Previous version made GPDR-friendly
This commit is contained in:
96
src/_includes/partials/global/service-worker.js
Normal file
96
src/_includes/partials/global/service-worker.js
Normal file
@@ -0,0 +1,96 @@
|
||||
const CACHE_KEYS = {
|
||||
PRE_CACHE: `precache-${VERSION}`,
|
||||
RUNTIME: `runtime-${VERSION}`
|
||||
};
|
||||
|
||||
// URLS that we don’t want to end up in the cache
|
||||
const EXCLUDED_URLS = [
|
||||
'/contact',
|
||||
'/thank-you'
|
||||
];
|
||||
|
||||
// URLS that we want to be cached when the worker is installed
|
||||
const PRE_CACHE_URLS = [
|
||||
'/',
|
||||
'/fonts/varela-round-v12-latin-regular.woff',
|
||||
'/fonts/varela-v10-latin-regular.woff',
|
||||
'/fonts/open-sans-v17-latin-300.woff',
|
||||
'/fonts/open-sans-v17-latin-regular.woff',
|
||||
'/fonts/open-sans-v17-latin-600.woff',
|
||||
'/fonts/open-sans-v17-latin-700.woff'
|
||||
];
|
||||
|
||||
// You might want to bypass a certain host
|
||||
const IGNORED_HOSTS = ['localhost', 'unpkg.com', ];
|
||||
|
||||
/**
|
||||
* Takes an array of strings and puts them in a named cache store
|
||||
*
|
||||
* @param {String} cacheName
|
||||
* @param {Array} items=[]
|
||||
*/
|
||||
const addItemsToCache = function(cacheName, items = []) {
|
||||
caches.open(cacheName).then(cache => cache.addAll(items));
|
||||
};
|
||||
|
||||
self.addEventListener('install', evt => {
|
||||
self.skipWaiting();
|
||||
|
||||
addItemsToCache(CACHE_KEYS.PRE_CACHE, PRE_CACHE_URLS);
|
||||
});
|
||||
|
||||
self.addEventListener('activate', evt => {
|
||||
// Look for any old caches that don't match our set and clear them out
|
||||
evt.waitUntil(
|
||||
caches
|
||||
.keys()
|
||||
.then(cacheNames => {
|
||||
return cacheNames.filter(item => !Object.values(CACHE_KEYS).includes(item));
|
||||
})
|
||||
.then(itemsToDelete => {
|
||||
return Promise.all(
|
||||
itemsToDelete.map(item => {
|
||||
return caches.delete(item);
|
||||
})
|
||||
);
|
||||
})
|
||||
.then(() => self.clients.claim())
|
||||
);
|
||||
});
|
||||
|
||||
self.addEventListener('fetch', evt => {
|
||||
const {hostname} = new URL(evt.request.url);
|
||||
|
||||
// Check we don't want to ignore this host
|
||||
if (IGNORED_HOSTS.indexOf(hostname) >= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Check we don't want to ignore this URL
|
||||
if (EXCLUDED_URLS.some(page => evt.request.url.indexOf(page) > -1)) {
|
||||
return;
|
||||
}
|
||||
|
||||
evt.respondWith(
|
||||
caches.match(evt.request).then(cachedResponse => {
|
||||
// Item found in cache so return
|
||||
if (cachedResponse) {
|
||||
return cachedResponse;
|
||||
}
|
||||
|
||||
// Nothing found so load up the request from the network
|
||||
return caches.open(CACHE_KEYS.RUNTIME).then(cache => {
|
||||
return fetch(evt.request)
|
||||
.then(response => {
|
||||
// Put the new response in cache and return it
|
||||
return cache.put(evt.request, response.clone()).then(() => {
|
||||
return response;
|
||||
});
|
||||
})
|
||||
.catch(ex => {
|
||||
return;
|
||||
});
|
||||
});
|
||||
})
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user