63 lines
1.8 KiB
JavaScript
63 lines
1.8 KiB
JavaScript
(function (root, factory) {
|
|
if (typeof module === 'object' && module.exports) module.exports = factory;
|
|
else root.createInstallApp = factory;
|
|
})(typeof self !== 'undefined' ? self : this, function createInstallApp(options) {
|
|
const dismissedKey = 'stackchain.install.dismissed.v1';
|
|
let deferredPrompt = null;
|
|
|
|
function hide() {
|
|
options.card.hidden = true;
|
|
}
|
|
|
|
function showNativePrompt(event) {
|
|
event.preventDefault();
|
|
deferredPrompt = event;
|
|
options.guidance.hidden = true;
|
|
options.installButton.hidden = false;
|
|
options.card.hidden = false;
|
|
}
|
|
|
|
async function install() {
|
|
if (!deferredPrompt) return;
|
|
const prompt = deferredPrompt;
|
|
deferredPrompt = null;
|
|
options.installButton.disabled = true;
|
|
await prompt.prompt();
|
|
const choice = await prompt.userChoice;
|
|
if (choice.outcome === 'accepted') {
|
|
hide();
|
|
options.status.textContent = 'Stackchain was added to your device.';
|
|
} else {
|
|
hide();
|
|
options.installButton.disabled = false;
|
|
options.status.textContent = 'Installation was not completed.';
|
|
}
|
|
}
|
|
|
|
function dismiss() {
|
|
options.storage.setItem(dismissedKey, '1');
|
|
hide();
|
|
}
|
|
|
|
function start() {
|
|
if (options.isStandalone() || options.storage.getItem(dismissedKey) === '1') {
|
|
hide();
|
|
return;
|
|
}
|
|
if (options.isIosSafari()) {
|
|
options.installButton.hidden = true;
|
|
options.guidance.hidden = false;
|
|
options.card.hidden = false;
|
|
}
|
|
options.window.addEventListener('beforeinstallprompt', showNativePrompt);
|
|
options.window.addEventListener('appinstalled', () => {
|
|
deferredPrompt = null;
|
|
hide();
|
|
});
|
|
options.installButton.addEventListener('click', install);
|
|
options.dismissButton.addEventListener('click', dismiss);
|
|
}
|
|
|
|
return {start};
|
|
});
|