diff --git a/.gitea/workflows/test.yml b/.gitea/workflows/test.yml index 5ef1f06..edf6d19 100644 --- a/.gitea/workflows/test.yml +++ b/.gitea/workflows/test.yml @@ -1,16 +1,17 @@ name: Run Tests on: - push: - branches: [main] - paths: - - 'dashboard/**' - - '.gitea/workflows/test.yml' - pull_request: - branches: [main] - paths: - - 'dashboard/**' - - '.gitea/workflows/test.yml' + workflow_dispatch: + # push: + # branches: [main] + # paths: + # - 'dashboard/**' + # - '.gitea/workflows/test.yml' + # pull_request: + # branches: [main] + # paths: + # - 'dashboard/**' + # - '.gitea/workflows/test.yml' jobs: backend-tests: diff --git a/dashboard/frontend/src/routes/Terminal.svelte b/dashboard/frontend/src/routes/Terminal.svelte index 851dbbf..4ed7054 100644 --- a/dashboard/frontend/src/routes/Terminal.svelte +++ b/dashboard/frontend/src/routes/Terminal.svelte @@ -35,6 +35,7 @@ let showMenu = $state(false); let voiceTick = $state(0); let isDark = $state(false); + let isFullscreen = $state(false); let tabCounter = 0; const tabData = new Map(); @@ -459,6 +460,35 @@ function activeVoice() { return voiceTick >= 0 && tabData.get(activeTab)?.voice; } + function toggleFullscreen() { + const elem = document.documentElement; + if (!document.fullscreenElement) { + elem.requestFullscreen().then(() => { + isFullscreen = true; + }).catch(err => { + console.error('Failed to enter fullscreen:', err); + }); + } else { + document.exitFullscreen().then(() => { + isFullscreen = false; + }).catch(err => { + console.error('Failed to exit fullscreen:', err); + }); + } + } + + onMount(() => { + syncTheme(); + themeObserver.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] }); + const requestedHost = new URLSearchParams(window.location.search).get("host"); + if (requestedHost && !tabs.length && hostById(requestedHost)) addTab(requestedHost); + + // Listen for fullscreen changes + document.addEventListener('fullscreenchange', () => { + isFullscreen = !!document.fullscreenElement; + }); + }); + onDestroy(() => { themeObserver.disconnect(); tabData.forEach((d) => { @@ -536,17 +566,30 @@ {/if} - {#if activeTab && tabs.find(t => t.id === activeTab)?.connected && activeVoice()} - {@const v = activeVoice()} -