csvxml/public/sw.js

89 lines
3.0 KiB
JavaScript

const debug = false;
const CACHE_NAME = 'csvxml-cache-v1';
const urlsToCache = [
'/index.htm',
'/assets/js/jszip/dist/jszip.min.js',
'/assets/js/csvxmlV2.min.js?v000003',
'/assets/css/csvxml.min.css?v000003',
'/assets/fonts/SourceSansPro-Regular.woff2',
'/json/fields.de.json',
'/json/fields.en.json',
'/json/fields.hu.json',
'/json/tls.de.json',
'/json/tls.en.json',
'/json/tls.hu.json',
];
self.addEventListener('install', function(event) {
// Perform install steps
event.waitUntil(
Promise.all([
caches.open(CACHE_NAME)
.then(function(cache) {
if (debug === true) console.log('Opened cache');
return cache.addAll(urlsToCache.map(url => new Request(url, {credentials: 'same-origin'})));
}),
])
);
});
self.addEventListener('fetch', function(event) {
if (event.request.url.startsWith(location.origin) === false) return;
event.respondWith(
caches.match(event.request)
.then(function(response) {
if (response) {
if (debug === true) console.log("Serving " + event.request.url + " from cache.");
return response;
}
// IMPORTANT: Clone the request. A request is a stream and
// can only be consumed once. Since we are consuming this
// once by cache and once by the browser for fetch, we need
// to clone the response.
var fetchRequest = event.request.clone();
return fetch(fetchRequest).then(
function(response) {
// Check if we received a valid response
if(!response || response.status !== 200 || response.type !== 'basic') {
return response;
}
var responseToCache = response.clone();
caches.open(CACHE_NAME)
.then(function(cache) {
if (debug === true) console.log("Added " + event.request.url + "to cache");
cache.put(event.request, responseToCache);
});
return response;
}
).catch(
() => {
console.log("Problem");
if (event.request.url.indexOf("index.php?") == -1) return;
else {
console.log("Fixing");
return caches.open(CACHE_NAME).then(
function(cache) {
// cache.keys().then(function(keys) { console.log(keys); })
// return cache.match("index.php")
});
}
}
);
})
);
});