Files
image-sequencer/examples/lib/sw.js
Harsh Khandeparkar 0d4e760572 Update sw.js
2019-03-27 20:39:01 +00:00

87 lines
2.6 KiB
JavaScript

const request = new XMLHttpRequest();
request.open("GET", "../manifest.json", false);
request.send(null);
const meta = JSON.parse(request.responseText).metadata,
ver = meta.version,
betaVer = meta.betaVersion;
const version = (self.location.toString().indexOf('beta') == 0 || self.location.toString().includes('localhost') || self.location.toString().includes('127.0.0.1')) ? betaVer : ver;
const staticCacheName = `image-sequencer-static-v${version}`;
const isVersionNewer = (version, old) => {
version = version.split('.');
var major = version[0],
minor = version[1],
patch = version[2];
old = old.split('.');
var oldMajor = old[0],
oldMinor = old[1],
oldPatch = old[2];
if (major > oldMajor) return true
else if (minor > oldMinor) return true
else if (patch > oldPatch) return true
else return false
}
self.addEventListener('install', event => {
console.log('Attempting to install service worker');
});
self.addEventListener('activate', function(e) {
console.log('[ServiceWorker] Activate');
e.waitUntil(
caches.keys().then(function(cacheNames) {
return Promise.all(
cacheNames.filter(function(cacheName){
return isVersionNewer(staticCacheName.slice(-5), cacheName.slice(-5));
}).map(function(cacheName){
return caches.delete(cacheName);
})
);
})
);
});
self.addEventListener('fetch', function(event) {
event.respondWith(
if (caches.keys().length < 1){
caches.open(staticCacheName).then(function(cache) {
return cache.match(event.request).then(function (response) {
return response || fetch(event.request).then(function(response) {
if(event.request.method == "GET")
cache.put(event.request, response.clone());
return response;
});
});
});
if (!('indexedDB' in window)) {
console.log('This browser doesn\'t support IndexedDB');
return;
}
var dbPromise = idb.open('cache-db', 1, function(upgradeDb) {
if (!upgradeDb.objectStoreNames.contains('caches')) {
var cachedb = upgradeDb.createObjectStore('cache', {keyPath: 'name'});
}
}
dbPromise.then(function(db) {
var tx = db.transaction('caches', 'readwrite');
var store = tx.objectStore('caches');
var item = {
name: 'new-cache-availalble',
version: staticCacheName,
created: new Date().getTime()
};
store.add(item);
return tx.complete;
})
}
else return false;
);
});