/* Service Worker */ const swVersion = '2023.5.2-001' const cacheName = `owlboard-${swVersion}` const cacheIDs = [cacheName] let staticCache = [ '/styles/fonts/firamono/firamono-500.woff2', '/styles/fonts/firamono/firamono-regular.woff2', '/styles/fonts/urwgothic/urwgothic.woff2', '/styles/fonts/urwgothic/urwgothicDemi.woff2', '/images/icon.svg', '/images/logo/wide_logo.svg', '/images/logo/mono-logo.svg', '/images/app-icons/any/plain-logo.svg', '/images/app-icons/any/plain-logo-512.png', '/images/nav/alert_icon.svg', '/images/nav/save.svg', '/images/nav/home_icon.svg', '/images/nav/back.svg', '/images/nav/hamburger.svg', '/images/nav/close.svg', '/images/nav/refresh.svg', '/images/nre/nre-powered_400w.webp', '/images/nre/nre-powered_400w.jxl' ] const dynamicCache = [ '/404.html', '/auth.html', '/board.html', '/conn-err.html', '/help.html', '/', '/issue.html', '/find-code.html', '/settings.html', '/pis.html', '/manifest.json', '/styles/board.css', '/styles/find-code.css', '/styles/help.css', '/styles/issue.css', '/styles/main.css', '/styles/settings.css', '/styles/pis.css', '/js/find-code.js', '/js/index.js', '/js/issue.js', '/js/lib.board.js', '/js/lib.main.js', '/js/auth.js', '/js/settings.js', '/js/simple-board.js', '/js/pis.js' ] for(let i = 0; i < dynamicCache.length; i++) { let item = dynamicCache[i] + `?${swVersion}` staticCache.push(item) } self.addEventListener('install', (e) => { console.log('[Service Worker] Install') e.waitUntil( (async () => { const cache = await caches.open(cacheName) console.log('[Service Worker] Caching app data') await cache.addAll(staticCache) })() ) }) self.addEventListener('fetch', (e) => { e.respondWith( (async () => { const r = await caches.match(e.request,{ignoreSearch: true}) if (r) { return r } const response = await fetch(e.request) console.log(`[Service Worker] Not cached - fetching from server: ${e.request.url}`) return response })() ) }) self.addEventListener('activate', function (event) { event.waitUntil(caches.keys().then(function (keys) { return Promise.all(keys.filter(function (key) { return !cacheIDs.includes(key) }).map(function (key) { return caches.delete(key) })) }).then(function () { return self.clients.claim() })) })