diff --git a/app/static/css/style.css b/app/static/css/style.css index 3725d14..33396fa 100644 --- a/app/static/css/style.css +++ b/app/static/css/style.css @@ -773,3 +773,19 @@ select { color: var(--offline, #888); font-weight: 600; } + +/* Logout button in top bar */ +.logout-btn { + background: none; + border: 1px solid rgba(255, 255, 255, 0.2); + color: var(--text-secondary); + font-size: 0.75rem; + padding: 0.25rem 0.6rem; + border-radius: 4px; + cursor: pointer; + min-height: 28px; +} + +.logout-btn:active { + opacity: 0.7; +} diff --git a/app/static/js/app.js b/app/static/js/app.js index f054d83..1c3810f 100644 --- a/app/static/js/app.js +++ b/app/static/js/app.js @@ -9,6 +9,7 @@ const NextSnap = { console.log(`NextSnap v${this.version} initializing...`); this.setupConnectivityMonitoring(); this.setupServiceWorkerMessaging(); + this.setupLogout(); this.checkHealth(); }, @@ -79,6 +80,17 @@ const NextSnap = { } }, + + setupLogout() { + const btn = document.getElementById('logoutBtn'); + if (!btn) return; + btn.addEventListener('click', async () => { + try { + await fetch('/api/auth/logout', { method: 'POST' }); + } catch (e) { /* offline - clear locally anyway */ } + window.location.href = '/login'; + }); + }, // Force service worker update async updateServiceWorker() { if ('serviceWorker' in navigator) { diff --git a/app/static/sw.js b/app/static/sw.js index 6cf799b..ea876cd 100644 --- a/app/static/sw.js +++ b/app/static/sw.js @@ -1,9 +1,9 @@ // NextSnap Service Worker // Provides offline-first caching for the app shell -const CACHE_VERSION = 'nextsnap-v25'; -const APP_SHELL_CACHE = 'nextsnap-shell-v21'; -const RUNTIME_CACHE = 'nextsnap-runtime-v21'; +const CACHE_VERSION = 'nextsnap-v27'; +const APP_SHELL_CACHE = 'nextsnap-shell-v23'; +const RUNTIME_CACHE = 'nextsnap-runtime-v23'; // Offline fallback page with bottom nav bar so user can navigate to cached pages const OFFLINE_PAGE = ` diff --git a/app/templates/base.html b/app/templates/base.html index 0224c28..0947f88 100644 --- a/app/templates/base.html +++ b/app/templates/base.html @@ -29,6 +29,9 @@
+ {% if show_nav %} + + {% endif %}