diff --git a/src/static/app.js b/src/static/app.js index 89afa13..96a37a0 100644 --- a/src/static/app.js +++ b/src/static/app.js @@ -187,3 +187,34 @@ document.getElementById("logout-btn").addEventListener("click", () => { if ("serviceWorker" in navigator) { navigator.serviceWorker.register("/sw.js").catch(() => {}); } + +// ── PWA install banner ──────────────────────────────────────────────────────── +const INSTALL_DISMISSED_KEY = "lg_install_dismissed"; +let _deferredInstallPrompt = null; + +window.addEventListener("beforeinstallprompt", (e) => { + e.preventDefault(); + if (sessionStorage.getItem(INSTALL_DISMISSED_KEY)) return; + _deferredInstallPrompt = e; + document.getElementById("install-banner").classList.remove("hidden"); +}); + +document.getElementById("install-btn").addEventListener("click", async () => { + const banner = document.getElementById("install-banner"); + banner.classList.add("hidden"); + if (!_deferredInstallPrompt) return; + _deferredInstallPrompt.prompt(); + await _deferredInstallPrompt.userChoice; + _deferredInstallPrompt = null; +}); + +document.getElementById("install-dismiss").addEventListener("click", () => { + document.getElementById("install-banner").classList.add("hidden"); + sessionStorage.setItem(INSTALL_DISMISSED_KEY, "1"); + _deferredInstallPrompt = null; +}); + +window.addEventListener("appinstalled", () => { + document.getElementById("install-banner").classList.add("hidden"); + _deferredInstallPrompt = null; +}); diff --git a/src/static/index.html b/src/static/index.html index 97b008d..f8ccd3f 100644 --- a/src/static/index.html +++ b/src/static/index.html @@ -9,7 +9,7 @@ Lagomare Gates - +