From 4f5976ea60bf9cf0976d13d958364d13bde6bd51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Sun, 10 Jun 2018 13:33:57 +0200 Subject: [PATCH] grandlyon-gnm: use generic service worker (#24405) --- static/grandlyon-gnm/extra.js | 2 +- static/grandlyon-gnm/service-worker.js | 136 ------------------------- 2 files changed, 1 insertion(+), 137 deletions(-) delete mode 100644 static/grandlyon-gnm/service-worker.js diff --git a/static/grandlyon-gnm/extra.js b/static/grandlyon-gnm/extra.js index 49bbc72..99a1634 100644 --- a/static/grandlyon-gnm/extra.js +++ b/static/grandlyon-gnm/extra.js @@ -568,7 +568,7 @@ $(function() { /* service worker */ if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/static/grandlyon-gnm/service-worker.js', {scope: '/'}).then(function(registration) { + navigator.serviceWorker.register('/service-worker.js', {scope: '/'}).then(function(registration) { // Registration was successful console.log('ServiceWorker registration successful with scope: ', registration.scope); }).catch(function(err) { diff --git a/static/grandlyon-gnm/service-worker.js b/static/grandlyon-gnm/service-worker.js deleted file mode 100644 index 5835046..0000000 --- a/static/grandlyon-gnm/service-worker.js +++ /dev/null @@ -1,136 +0,0 @@ -/* global self, caches, fetch, URL, Response */ -'use strict'; - -var config = { - version: 'v0', - staticCacheItems: [ - '/offline/' - ], - cachePathPattern: /^\/static\/.*/, - handleFetchPathPattern: /.*/, - offlineImage: '' - + 'Offline' - + '' - + '' - + 'offline', - offlinePage: '/offline/' -}; - -function cacheName (key, opts) { - return `${opts.version}-${key}`; -} - -function addToCache (cacheKey, request, response) { - if (response.ok && cacheKey !== null) { - var copy = response.clone(); - caches.open(cacheKey).then( cache => { - cache.put(request, copy); - }); - } - return response; -} - -function fetchFromCache (event) { - return caches.match(event.request).then(response => { - if (!response) { - throw Error(`${event.request.url} not found in cache`); - } - return response; - }); -} - -function offlineResponse (resourceType, opts) { - if (resourceType === 'image') { - return new Response(opts.offlineImage, - { headers: { 'Content-Type': 'image/svg+xml' } } - ); - } else if (resourceType === 'content') { - return caches.match(opts.offlinePage); - } - return undefined; -} - -self.addEventListener('install', event => { - function onInstall (event, opts) { - var cacheKey = cacheName('static', opts); - return caches.open(cacheKey) - .then(cache => cache.addAll(opts.staticCacheItems)); - } - - event.waitUntil( - onInstall(event, config).then( () => self.skipWaiting() ) - ); -}); - -self.addEventListener('activate', event => { - function onActivate (event, opts) { - return caches.keys() - .then(cacheKeys => { - var oldCacheKeys = cacheKeys.filter(key => key.indexOf(opts.version) !== 0); - var deletePromises = oldCacheKeys.map(oldKey => caches.delete(oldKey)); - return Promise.all(deletePromises); - }); - } - - event.waitUntil( - onActivate(event, config) - .then( () => self.clients.claim() ) - ); -}); - -self.addEventListener('fetch', event => { - - function shouldHandleFetch (event, opts) { - var request = event.request; - var url = new URL(request.url); - var criteria = { - matchesPathPattern: opts.handleFetchPathPattern.test(url.pathname), - isGETRequest : request.method === 'GET', - isFromMyOrigin : url.origin === self.location.origin - }; - var failingCriteria = Object.keys(criteria) - .filter(criteriaKey => !criteria[criteriaKey]); - return !failingCriteria.length; - } - - function onFetch (event, opts) { - var request = event.request; - var url = new URL(request.url); - var acceptHeader = request.headers.get('Accept'); - var resourceType = 'static'; - var cacheKey; - - if (acceptHeader.indexOf('text/html') !== -1) { - resourceType = 'content'; - } else if (acceptHeader.indexOf('image') !== -1) { - resourceType = 'image'; - } - - cacheKey = null; - if (opts.cachePathPattern.test(url.pathname)) { - cacheKey = cacheName(resourceType, opts); - } - - /* always network first */ - if (true || resourceType === 'content') { - event.respondWith( - fetch(request) - .then(response => addToCache(cacheKey, request, response)) - .catch(() => fetchFromCache(event)) - .catch(() => offlineResponse(resourceType, opts)) - ); - } else { - event.respondWith( - fetchFromCache(event) - .catch(() => fetch(request)) - .then(response => addToCache(cacheKey, request, response)) - .catch(() => offlineResponse(resourceType, opts)) - ); - } - } - if (shouldHandleFetch(event, config)) { - onFetch(event, config); - } - -}); -- 2.17.1