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