mirror of
https://github.com/marcrobledo/savegame-editors.git
synced 2025-04-24 16:35:10 +00:00
83 lines
2.6 KiB
JavaScript
83 lines
2.6 KiB
JavaScript
/*
|
|
Cache Service Worker template by mrc 2019
|
|
mostly based in:
|
|
https://github.com/GoogleChrome/samples/blob/gh-pages/service-worker/basic/service-worker.js
|
|
https://github.com/chriscoyier/Simple-Offline-Site/blob/master/js/service-worker.js
|
|
https://gist.github.com/kosamari/7c5d1e8449b2fbc97d372675f16b566e
|
|
|
|
Note for GitHub Pages:
|
|
there can be an unexpected behaviour (cache not updating) when site is accessed from
|
|
https://user.github.io/repo/ (without index.html) in some browsers (Firefox)
|
|
use absolute paths if hosted in GitHub Pages in order to avoid it
|
|
also invoke sw with an absolute path:
|
|
navigator.serviceWorker.register('/repo/_cache_service_worker.js', {scope: '/repo/'})
|
|
*/
|
|
|
|
|
|
/* MOD: fix old caches for mrc */
|
|
caches.keys().then(function(cacheNames){
|
|
for(var i=0; i<cacheNames.length; i++){
|
|
if(
|
|
cacheNames[i]==='runtime' ||
|
|
/^precache-\w+$/.test(cacheNames[i]) ||
|
|
/^precache-editor-([\w\+]+)-\w+$/.test(cacheNames[i]) ||
|
|
/^v?\d+\w?$/.test(cacheNames[i])
|
|
){
|
|
console.log('deleting old cache: '+cacheNames[i]);
|
|
caches.delete(cacheNames[i]);
|
|
}
|
|
}
|
|
});
|
|
|
|
var PRECACHE_ID='pokemon-picross-editor';
|
|
var PRECACHE_VERSION='v1';
|
|
var PRECACHE_URLS=[
|
|
'/savegame-editors/pokemon-picross/','/savegame-editors/pokemon-picross/index.html',
|
|
'/savegame-editors/pokemon-picross/favicon.png',
|
|
'/savegame-editors/pokemon-picross/pokemon-picross.js',
|
|
'/savegame-editors/savegame-editor.js',
|
|
'/savegame-editors/savegame-editor.css'
|
|
];
|
|
|
|
|
|
|
|
// install event (fired when sw is first installed): opens a new cache
|
|
self.addEventListener('install', evt => {
|
|
evt.waitUntil(
|
|
caches.open('precache-'+PRECACHE_ID+'-'+PRECACHE_VERSION)
|
|
.then(cache => cache.addAll(PRECACHE_URLS))
|
|
.then(self.skipWaiting())
|
|
);
|
|
});
|
|
|
|
|
|
// activate event (fired when sw is has been successfully installed): cleans up old outdated caches
|
|
self.addEventListener('activate', evt => {
|
|
evt.waitUntil(
|
|
caches.keys().then(cacheNames => {
|
|
return cacheNames.filter(cacheName => (cacheName.startsWith('precache-'+PRECACHE_ID+'-') && !cacheName.endsWith('-'+PRECACHE_VERSION)));
|
|
}).then(cachesToDelete => {
|
|
return Promise.all(cachesToDelete.map(cacheToDelete => {
|
|
console.log('delete '+cacheToDelete);
|
|
return caches.delete(cacheToDelete);
|
|
}));
|
|
}).then(() => self.clients.claim())
|
|
);
|
|
});
|
|
|
|
|
|
// fetch event (fired when requesting a resource): returns cached resource when possible
|
|
self.addEventListener('fetch', evt => {
|
|
if(evt.request.url.startsWith(self.location.origin)){ //skip cross-origin requests
|
|
evt.respondWith(
|
|
caches.match(evt.request).then(cachedResource => {
|
|
if (cachedResource) {
|
|
return cachedResource;
|
|
}else{
|
|
return fetch(evt.request);
|
|
}
|
|
})
|
|
);
|
|
}
|
|
});
|