|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const CACHE_NAME = 'wrdler-v0.0.2'; |
|
|
const RUNTIME_CACHE = 'wrdler-runtime'; |
|
|
|
|
|
|
|
|
const PRECACHE_URLS = [ |
|
|
'/', |
|
|
'/app/static/manifest.json', |
|
|
'/app/static/icon-192.png', |
|
|
'/app/static/icon-512.png' |
|
|
]; |
|
|
|
|
|
|
|
|
self.addEventListener('install', event => { |
|
|
console.log('[ServiceWorker] Installing...'); |
|
|
event.waitUntil( |
|
|
caches.open(CACHE_NAME) |
|
|
.then(cache => { |
|
|
console.log('[ServiceWorker] Precaching app shell'); |
|
|
return cache.addAll(PRECACHE_URLS); |
|
|
}) |
|
|
.then(() => self.skipWaiting()) |
|
|
); |
|
|
}); |
|
|
|
|
|
|
|
|
self.addEventListener('activate', event => { |
|
|
console.log('[ServiceWorker] Activating...'); |
|
|
event.waitUntil( |
|
|
caches.keys().then(cacheNames => { |
|
|
return Promise.all( |
|
|
cacheNames.map(cacheName => { |
|
|
if (cacheName !== CACHE_NAME && cacheName !== RUNTIME_CACHE) { |
|
|
console.log('[ServiceWorker] Deleting old cache:', cacheName); |
|
|
return caches.delete(cacheName); |
|
|
} |
|
|
}) |
|
|
); |
|
|
}).then(() => self.clients.claim()) |
|
|
); |
|
|
}); |
|
|
|
|
|
|
|
|
self.addEventListener('fetch', event => { |
|
|
|
|
|
if (event.request.method !== 'GET') { |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
if (!event.request.url.startsWith('http')) { |
|
|
return; |
|
|
} |
|
|
|
|
|
event.respondWith( |
|
|
caches.open(RUNTIME_CACHE).then(cache => { |
|
|
return fetch(event.request) |
|
|
.then(response => { |
|
|
|
|
|
if (response.status === 200) { |
|
|
cache.put(event.request, response.clone()); |
|
|
} |
|
|
return response; |
|
|
}) |
|
|
.catch(() => { |
|
|
|
|
|
return caches.match(event.request).then(cachedResponse => { |
|
|
if (cachedResponse) { |
|
|
console.log('[ServiceWorker] Serving from cache:', event.request.url); |
|
|
return cachedResponse; |
|
|
} |
|
|
|
|
|
|
|
|
return new Response('Offline - Please check your connection', { |
|
|
status: 503, |
|
|
statusText: 'Service Unavailable', |
|
|
headers: new Headers({ |
|
|
'Content-Type': 'text/plain' |
|
|
}) |
|
|
}); |
|
|
}); |
|
|
}); |
|
|
}) |
|
|
); |
|
|
}); |
|
|
|
|
|
|
|
|
self.addEventListener('message', event => { |
|
|
if (event.data.action === 'skipWaiting') { |
|
|
self.skipWaiting(); |
|
|
} |
|
|
}); |
|
|
|