(function () { var STORAGE_DISMISS = 'geonet-console-pwa-install-dismissed'; var STORAGE_INSTALLED = 'geonet-console-pwa-installed'; var DISMISS_DAYS = 7; var deferredPrompt = null; function isStandalone() { return window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone === true; } function isIos() { return /iphone|ipad|ipod/i.test(navigator.userAgent); } function isDismissed() { try { var raw = localStorage.getItem(STORAGE_DISMISS); if (!raw) { return false; } var dismissedAt = parseInt(raw, 10); if (isNaN(dismissedAt)) { return false; } return (Date.now() - dismissedAt) < (DISMISS_DAYS * 24 * 60 * 60 * 1000); } catch (e) { return false; } } function markDismissed() { try { localStorage.setItem(STORAGE_DISMISS, String(Date.now())); } catch (e) {} hideBanner(); } function markInstalled() { try { localStorage.setItem(STORAGE_INSTALLED, '1'); } catch (e) {} hideBanner(); } function hideBanner() { var banner = document.getElementById('pwa-install-banner'); if (banner) { banner.hidden = true; banner.setAttribute('aria-hidden', 'true'); } } function showBanner(mode) { if (isStandalone() || isDismissed()) { return; } var banner = document.getElementById('pwa-install-banner'); if (!banner) { return; } var chromeRow = banner.querySelector('[data-pwa-install-chrome]'); var iosRow = banner.querySelector('[data-pwa-install-ios]'); if (mode === 'ios') { if (chromeRow) chromeRow.hidden = true; if (iosRow) iosRow.hidden = false; } else { if (chromeRow) chromeRow.hidden = false; if (iosRow) iosRow.hidden = true; } banner.hidden = false; banner.setAttribute('aria-hidden', 'false'); } function bindActions() { var banner = document.getElementById('pwa-install-banner'); if (!banner) { return; } var installBtn = banner.querySelector('[data-pwa-install-action]'); var dismissBtn = banner.querySelector('[data-pwa-install-dismiss]'); if (installBtn) { installBtn.addEventListener('click', function () { if (deferredPrompt) { deferredPrompt.prompt(); deferredPrompt.userChoice.then(function (choice) { if (choice.outcome === 'accepted') { markInstalled(); } deferredPrompt = null; }); return; } if (isIos()) { showBanner('ios'); } }); } if (dismissBtn) { dismissBtn.addEventListener('click', markDismissed); } } window.addEventListener('beforeinstallprompt', function (event) { event.preventDefault(); deferredPrompt = event; showBanner('chrome'); }); window.addEventListener('appinstalled', markInstalled); document.addEventListener('DOMContentLoaded', function () { bindActions(); if (isStandalone()) { hideBanner(); return; } if (isIos() && !isDismissed()) { window.setTimeout(function () { showBanner('ios'); }, 1500); return; } if (!deferredPrompt && !isDismissed()) { window.setTimeout(function () { if (!deferredPrompt && !isIos()) { return; } }, 2000); } }); })();