diff --git a/ui/src/App.vue b/ui/src/App.vue
index 1dc56de..fdd5d9c 100644
--- a/ui/src/App.vue
+++ b/ui/src/App.vue
@@ -42,7 +42,22 @@
Reload Page
+
+ Navigate
+
+
+
+
+
+
+
+
+
@@ -59,6 +74,9 @@ interface Screen {
title: string;
url: string;
screenshot: string;
+ _showurl: boolean;
+ new_url: string;
+ loading: boolean;
}
interface Screens {
@@ -76,6 +94,9 @@ export default class App extends Vue {
for (const [name, screen] of Object.entries(screens)) {
const ts = new Date().getTime();
screen.screenshot = `/api/screen/${name}/screenshot?${ts}`;
+ screen._showurl = false;
+ screen.new_url = screen.url;
+ screen.loading = false;
}
this.screens = screens;
}
@@ -83,16 +104,41 @@ export default class App extends Vue {
async refresh_ss(name: string) {
const screen = this.screens[name];
+ const res = await fetch(`/api/screen/${name}/`);
+ const data = await res.json();
+ screen.url = data.url;
+ screen.title = data.title;
const base = screen.screenshot.split("?")[0];
const ts = new Date().getTime();
screen.screenshot = `${base}?${ts}`;
}
async refresh(name: string) {
+ const screen = this.screens[name];
+ screen.loading = true;
const res = await fetch(`/api/screen/${name}/refresh`, { method: "POST" });
if (res.ok) {
await this.refresh_ss(name);
}
+ screen.loading = false;
+ }
+
+ async show_urlbar(screen: Screen) {
+ screen.new_url = screen.url;
+ screen._showurl = true;
+ }
+
+ async navigate(name: string) {
+ const screen = this.screens[name];
+ screen.loading = true;
+ const form = new FormData();
+ form.append("url", screen.new_url);
+ await fetch(`/api/screen/${name}/navigate`, {
+ method: "POST",
+ body: form,
+ });
+ await this.refresh_ss(name);
+ screen.loading = false;
}
}