|
// retoor <retoor@molodetz.nl>
|
|
|
|
export class PwaInstaller {
|
|
constructor() {
|
|
this.deferredPrompt = null;
|
|
this.triggers = Array.from(document.querySelectorAll("[data-pwa-install]"));
|
|
if (!this.triggers.length) {
|
|
return;
|
|
}
|
|
this.bindTriggers();
|
|
window.addEventListener("beforeinstallprompt", (event) => this.onPromptAvailable(event));
|
|
window.addEventListener("appinstalled", () => this.hideTriggers());
|
|
}
|
|
|
|
bindTriggers() {
|
|
this.triggers.forEach((trigger) => {
|
|
trigger.addEventListener("click", (event) => {
|
|
event.preventDefault();
|
|
this.install();
|
|
});
|
|
});
|
|
}
|
|
|
|
onPromptAvailable(event) {
|
|
event.preventDefault();
|
|
this.deferredPrompt = event;
|
|
this.showTriggers();
|
|
}
|
|
|
|
showTriggers() {
|
|
this.triggers.forEach((trigger) => {
|
|
trigger.hidden = false;
|
|
});
|
|
}
|
|
|
|
hideTriggers() {
|
|
this.triggers.forEach((trigger) => {
|
|
trigger.hidden = true;
|
|
});
|
|
}
|
|
|
|
async install() {
|
|
if (!this.deferredPrompt) {
|
|
return;
|
|
}
|
|
this.deferredPrompt.prompt();
|
|
await this.deferredPrompt.userChoice;
|
|
this.deferredPrompt = null;
|
|
this.hideTriggers();
|
|
}
|
|
}
|