Add PWA + ServiceWorker with offline support

pull/2807/head
Daniel Supernault 2021-06-17 22:42:08 -06:00
rodzic 22c321a998
commit 78ee44662c
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 0DEF1C662C9033F7
3 zmienionych plików z 113 dodań i 1 usunięć

File diff suppressed because one or more lines are too long

45
public/sw.js vendored 100644
Wyświetl plik

@ -0,0 +1,45 @@
const OFFLINE_VERSION = 1;
const CACHE_NAME = "offline";
const OFFLINE_URL = "/offline.html";
self.addEventListener("install", (event) => {
event.waitUntil(
(async () => {
const cache = await caches.open(CACHE_NAME);
await cache.add(new Request(OFFLINE_URL, { cache: "reload" }));
})()
);
self.skipWaiting();
});
self.addEventListener("activate", (event) => {
event.waitUntil(
(async () => {
if ("navigationPreload" in self.registration) {
await self.registration.navigationPreload.enable();
}
})()
);
self.clients.claim();
});
self.addEventListener("fetch", (event) => {
if (event.request.mode === "navigate") {
event.respondWith(
(async () => {
try {
const preloadResponse = await event.preloadResponse;
if (preloadResponse) {
return preloadResponse;
}
const networkResponse = await fetch(event.request);
return networkResponse;
} catch (error) {
const cache = await caches.open(CACHE_NAME);
const cachedResponse = await cache.match(OFFLINE_URL);
return cachedResponse;
}
})()
);
}
});

Wyświetl plik

@ -34,6 +34,12 @@ window.App.boot = function() {
new Vue({ el: '#content'});
}
window.addEventListener("load", () => {
if ("serviceWorker" in navigator) {
navigator.serviceWorker.register("/sw.js");
}
});
window.App.util = {
compose: {
post: (function() {
@ -230,4 +236,4 @@ window.App.util = {
.attr('width', 34).attr('height', 34);
})
};
};