2019-12-03 14:04:40 +00:00
|
|
|
const precacheVersion = 1;
|
|
|
|
const precacheName = 'precache-v' + precacheVersion;
|
|
|
|
const precacheFiles = [
|
|
|
|
'/',
|
2019-12-11 12:18:55 +00:00
|
|
|
'/bg-error.png',
|
2019-12-03 14:04:40 +00:00
|
|
|
'/api/2.0/modules',
|
|
|
|
'/api/2.0/people/info.json',
|
|
|
|
'/api/2.0/people/@self.json',
|
|
|
|
'/api/2.0/settings.json',
|
|
|
|
];
|
|
|
|
|
|
|
|
self.addEventListener('install', (e) => {
|
|
|
|
self.skipWaiting();
|
|
|
|
|
|
|
|
e.waitUntil(
|
|
|
|
caches.open(precacheName).then((cache) => {
|
|
|
|
return cache.addAll(precacheFiles);
|
2019-12-11 09:41:22 +00:00
|
|
|
})
|
2019-12-03 14:04:40 +00:00
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
self.addEventListener('activate', (e) => {
|
|
|
|
e.waitUntil(
|
|
|
|
caches.keys().then((cacheNames) => {
|
|
|
|
return Promise.all(cacheNames.map((thisCacheName) => {
|
|
|
|
|
|
|
|
if (thisCacheName.includes("precache") && thisCacheName !== precacheName) {
|
|
|
|
console.log('[ServiceWorker] Removing cached files from old cache - ', thisCacheName);
|
|
|
|
return caches.delete(thisCacheName);
|
|
|
|
}
|
|
|
|
|
|
|
|
}));
|
|
|
|
})
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
self.addEventListener('fetch', (e) => {
|
|
|
|
e.respondWith(
|
|
|
|
caches.match(e.request).then((cachesResponse) => {
|
|
|
|
if(cachesResponse){
|
|
|
|
return cachesResponse;
|
|
|
|
}
|
|
|
|
return fetch(e.request)
|
|
|
|
.then((fetchResponse) => {
|
|
|
|
return fetchResponse;
|
|
|
|
})
|
2019-12-11 09:41:22 +00:00
|
|
|
.catch(() => useFallback());
|
2019-12-03 14:04:40 +00:00
|
|
|
})
|
|
|
|
);
|
2019-12-11 09:41:22 +00:00
|
|
|
e.waitUntil(
|
|
|
|
update(e.request).then(refresh)
|
|
|
|
);
|
|
|
|
});
|
|
|
|
|
|
|
|
function update(request) {
|
|
|
|
return caches.open(precacheName).then((cache) =>
|
|
|
|
{
|
|
|
|
caches.match(request).then((cachesResponse) => {
|
|
|
|
if(cachesResponse){
|
|
|
|
fetch(request).then((response) =>
|
|
|
|
cache.put(request, response.clone()).then(() => response)
|
|
|
|
).catch((err) => console.log(`[ServiceWorker] ${err}`));
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
const fallback =
|
2019-12-11 14:07:56 +00:00
|
|
|
'<div style="cursor: default;background: url(/bg-error.png);width: 100%;height: 310px;padding: 315px 0 0;'+
|
2019-12-11 09:41:22 +00:00
|
|
|
'margin-top: -325px;'+
|
|
|
|
'position: absolute;'+
|
|
|
|
'left: 0;'+
|
|
|
|
'top: 50%;'+
|
|
|
|
'z-index: 1;">'+
|
|
|
|
'<div style="width: 310px;'+
|
|
|
|
'margin: 0 auto;'+
|
|
|
|
'padding-left: 38px;'+
|
|
|
|
'text-align: center;'+
|
|
|
|
'font: normal 24px/35px Tahoma;'+
|
|
|
|
'color: #275678;'+
|
|
|
|
'position: relative;">\n'+
|
|
|
|
'<p>No internet connection found.</p>\n'+
|
|
|
|
'</div>\n'+
|
|
|
|
'</div>';
|
|
|
|
|
|
|
|
function useFallback() {
|
|
|
|
return Promise.resolve(new Response(fallback, { headers: {
|
|
|
|
'Content-Type': 'text/html; charset=utf-8'
|
|
|
|
}}));
|
|
|
|
}
|
|
|
|
|
|
|
|
function refresh(response) {
|
2019-12-11 12:05:15 +00:00
|
|
|
|
|
|
|
//Send data update messages to all clients
|
|
|
|
|
2019-12-11 09:41:22 +00:00
|
|
|
/*return self.clients.matchAll().then((clients) => {
|
|
|
|
clients.forEach((client) => {
|
|
|
|
const message = {
|
|
|
|
type: 'refresh',
|
|
|
|
url: response.url,
|
|
|
|
eTag: response.headers.get('ETag')
|
|
|
|
};
|
|
|
|
client.postMessage(JSON.stringify(message));
|
|
|
|
});
|
|
|
|
});*/
|
|
|
|
}
|