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;
 |