GeoNetAgent, LDAPWeb, server-audit, server-connection
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

143 lines
3.9 KiB

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