layout: none permalink: “sw.js”
const version = '{{ site.time | date: '%Y%m%d%H%M%S' }}'; const cacheName = `static::${version}`;
const buildContentBlob = () => {
return [ {% for post in site.posts limit: 50 %} "{{ site.baseurl }}{{ post.url }}", {% endfor %} {% for page in site.pages %} {% unless page.url contains 'sw.js' or page.url contains '404.html' or page.url contains '.xml' %} "{{ site.baseurl }}{{ page.url }}", {% endunless %} {% endfor %} ]
};
const updateStaticCache = () => {
return caches.open(cacheName).then(cache => { return cache.addAll(buildContentBlob()); });
};
const clearOldCache = () => {
return caches.keys().then(keys => { return Promise.all( keys .filter(key => { return key !== cacheName; }) .map(key => { console.log(`Service Worker: removing cache ${key}`); return caches.delete(key); }) ); });
};
self.addEventListener(“install”, event => {
console.log('Service Worker registered.'); event.waitUntil( updateStaticCache().then(() => { console.log(`Service Worker: cache updated to version: ${cacheName}`); }) );
});
self.addEventListener(“activate”, event => {
event.waitUntil(clearOldCache());
});
self.addEventListener(“fetch”, event => {
let request = event.request; let url = new URL(request.url); if (url.origin !== location.origin) { return; } if (request.method !== "GET") { event.respondWith(fetch(request)); return; } let offline = "/offline.html"; if (request.url.match(/\.(jpe?g|png|gif|svg|tiff?)$/)) { offline = "/uploads/sample.jpg"; } event.respondWith( fetch(request) .catch(async () => { return (await caches.match(request)) || caches.match(offline); }) ); return;
});