diff --git a/schoolapps/static/common/serviceworker.js b/schoolapps/static/common/serviceworker.js index db21e62f0b96d19e568b4f6a97308900e63736f4..6252e54a032551e97b1c2adb500d7721b150be04 100644 --- a/schoolapps/static/common/serviceworker.js +++ b/schoolapps/static/common/serviceworker.js @@ -1,18 +1,14 @@ -//This is the SchoolApps service worker with Advanced caching +//This is the SchoolApps service worker const CACHE = "schoolapps-cache"; const precacheFiles = [ - '/', - '/faq', + '', + '/faq/', ]; const offlineFallbackPage = '/offline'; -const cacheFirstPaths = [ - '/faq', -]; - const avoidCachingPaths = [ '/admin', '/settings', @@ -44,14 +40,14 @@ function comparePaths(requestUrl, pathsArray) { } self.addEventListener("install", function (event) { - console.log("[SchoolApps PWA] Install Event processing"); + console.log("[SchoolApps PWA] Install Event processing."); - console.log("[SchoolApps PWA] Skip waiting on install"); + console.log("[SchoolApps PWA] Skipping waiting on install."); self.skipWaiting(); event.waitUntil( caches.open(CACHE).then(function (cache) { - console.log("[SchoolApps PWA] Caching pages during install"); + console.log("[SchoolApps PWA] Caching pages during install."); return cache.addAll(precacheFiles).then(function () { return cache.add(offlineFallbackPage); @@ -62,84 +58,43 @@ self.addEventListener("install", function (event) { // Allow sw to control of current page self.addEventListener("activate", function (event) { - console.log("[SchoolApps PWA] Claiming clients for current page"); + console.log("[SchoolApps PWA] Claiming clients for current page."); event.waitUntil(self.clients.claim()); }); // If any fetch fails, it will look for the request in the cache and serve it from there first self.addEventListener("fetch", function (event) { if (event.request.method !== "GET") return; - - if (comparePaths(event.request.url, cacheFirstPaths)) { - cacheFirstFetch(event); - } else { - networkFirstFetch(event); - } + networkFirstFetch(event); }); -function cacheFirstFetch(event) { - event.respondWith( - fromCache(event.request).then( - function (response) { - // The response was found in the cache so we respond with it and update the entry - - // This is where we call the server to get the newest version of the - // file to use the next time we show view - event.waitUntil( - fetch(event.request).then(function (response) { - return updateCache(event.request, response); - }) - ); - - return response; - }, - function () { - // The response was not found in the cache so we look for it on the server - return fetch(event.request) - .then(function (response) { - // If request was successful, add or update it in the cache - event.waitUntil(updateCache(event.request, response.clone())); - - return response; - }) - .catch(function (error) { - // The following validates that the request was for a navigation to a new document - if (event.request.destination !== "document" || event.request.mode !== "navigate") { - return; - } - - console.log("[SchoolApps PWA] Network request failed and no cache." + error); - // Use the precached offline page as fallback - return caches.match(offlineFallbackPage) - }); - } - ) - ); -} - function networkFirstFetch(event) { event.respondWith( fetch(event.request) .then(function (response) { // If request was successful, add or update it in the cache + console.log("[SchoolApps PWA] Network request successful."); event.waitUntil(updateCache(event.request, response.clone())); return response; }) .catch(function (error) { console.log("[SchoolApps PWA] Network request failed. Serving content from cache: " + error); - return fromCache(event.request); + return fromCache(event); }) ); } -function fromCache(request) { +function fromCache(event) { // Check to see if you have it in the cache // Return response // If not in the cache, then return offline fallback page return caches.open(CACHE).then(function (cache) { - return cache.match(request).then(function (matching) { + return cache.match(event.request) + .then(function (matching) { if (!matching || matching.status === 404) { - return caches.match(offlineFallbackPage); + console.log("[SchoolApps PWA] Cache request failed. Serving offline fallback page."); + // Use the precached offline page as fallback + return caches.match(offlineFallbackPage) } return matching; diff --git a/schoolapps/static/common/workbox-sw.js b/schoolapps/static/common/workbox-sw.js deleted file mode 100644 index 61b3289a81a12f15841f55e57ace9063bafa3e51..0000000000000000000000000000000000000000 --- a/schoolapps/static/common/workbox-sw.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(){"use strict";try{self["workbox:sw:4.3.1"]&&_()}catch(t){}const t="https://storage.googleapis.com/workbox-cdn/releases/4.3.1",e={backgroundSync:"background-sync",broadcastUpdate:"broadcast-update",cacheableResponse:"cacheable-response",core:"core",expiration:"expiration",googleAnalytics:"offline-ga",navigationPreload:"navigation-preload",precaching:"precaching",rangeRequests:"range-requests",routing:"routing",strategies:"strategies",streams:"streams"};self.workbox=new class{constructor(){return this.v={},this.t={debug:"localhost"===self.location.hostname,modulePathPrefix:null,modulePathCb:null},this.s=this.t.debug?"dev":"prod",this.o=!1,new Proxy(this,{get(t,s){if(t[s])return t[s];const o=e[s];return o&&t.loadModule(`workbox-${o}`),t[s]}})}setConfig(t={}){if(this.o)throw new Error("Config must be set before accessing workbox.* modules");Object.assign(this.t,t),this.s=this.t.debug?"dev":"prod"}loadModule(t){const e=this.i(t);try{importScripts(e),this.o=!0}catch(s){throw console.error(`Unable to import module '${t}' from '${e}'.`),s}}i(e){if(this.t.modulePathCb)return this.t.modulePathCb(e,this.t.debug);let s=[t];const o=`${e}.${this.s}.js`,r=this.t.modulePathPrefix;return r&&""===(s=r.split("/"))[s.length-1]&&s.splice(s.length-1,1),s.push(o),s.join("/")}}}(); -//# sourceMappingURL=workbox-sw.js.map