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; } }