100 lines
3.1 KiB
JavaScript
100 lines
3.1 KiB
JavaScript
var serviceWorkerRegistrationMixin = {
|
|
created: function() {
|
|
if (!("serviceWorker" in navigator)) {
|
|
console.log("Nettleseren din støtter ikke service-workers.");
|
|
return;
|
|
}
|
|
if ("PushManager" in window && __PUSHENABLED__) {
|
|
if (Notification.permission !== "granted") {
|
|
localStorage.removeItem("push");
|
|
}
|
|
}
|
|
if (window.location.href.includes('localhost')) {
|
|
console.info("Service worker manually disabled while on localhost.")
|
|
} else {
|
|
this.registerPushListener();
|
|
this.registerServiceWorker();
|
|
}
|
|
},
|
|
methods: {
|
|
registerPushListener: function() {
|
|
try {
|
|
const channel = new BroadcastChannel("updatePush");
|
|
channel.addEventListener("message", event => {
|
|
if (event.data.success) {
|
|
localStorage.setItem("push", true);
|
|
this.$emit("push-allowed");
|
|
}
|
|
});
|
|
} catch (e) {
|
|
console.log("Using safari 'eh? No notifications for you.");
|
|
}
|
|
},
|
|
sendMessage: function(message) {
|
|
return new Promise(function(resolve, reject) {
|
|
var messageChannel = new MessageChannel();
|
|
messageChannel.port1.onmessage = function(event) {
|
|
if (event.data.error) {
|
|
reject(event.data.error);
|
|
} else {
|
|
resolve(event.data);
|
|
}
|
|
};
|
|
if (navigator.serviceWorker.controller == null) {
|
|
resolve();
|
|
} else {
|
|
navigator.serviceWorker.controller.postMessage(message, [
|
|
messageChannel.port2
|
|
]);
|
|
}
|
|
});
|
|
},
|
|
serviceWorkerUpdateFoundListener: function(serviceWorker) {
|
|
const installingWorker = serviceWorker.installing;
|
|
installingWorker.onstatechange = () => {
|
|
if (
|
|
installingWorker.state === "installed" &&
|
|
navigator.serviceWorker.controller
|
|
) {
|
|
this.$emit("service-worker-updated");
|
|
}
|
|
};
|
|
},
|
|
registerServiceWorkerPushNotification: function() {
|
|
if (!("PushManager" in window)) {
|
|
throw new Error("No Push API Support!");
|
|
}
|
|
window.Notification.requestPermission().then(permission => {
|
|
if (permission !== "granted") {
|
|
console.log(
|
|
"Du valgte å ikke ha arbeids-arbeideren til å sende deg dytte-meldinger :'('"
|
|
);
|
|
return;
|
|
}
|
|
if (localStorage.getItem("push") == null) {
|
|
this.sendMessage("updatePush");
|
|
}
|
|
});
|
|
},
|
|
registerServiceWorker: function() {
|
|
if ("serviceWorker" in navigator) {
|
|
navigator.serviceWorker
|
|
.register("/service-worker.js")
|
|
.then(serviceWorker => {
|
|
console.log(
|
|
"Arbeids arbeideren din er installert. Du kan nå gå offline frem til neste trekning."
|
|
);
|
|
serviceWorker.onupdatefound = () => {
|
|
this.serviceWorkerUpdateFoundListener(serviceWorker);
|
|
};
|
|
})
|
|
.catch(error => {
|
|
console.error("Arbeids arbeideren klarer ikke arbeide.", error);
|
|
});
|
|
}
|
|
}
|
|
}
|
|
};
|
|
|
|
export default serviceWorkerRegistrationMixin;
|