forked from gedichtenkoffer/gedichtenkoffer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sw.js
59 lines (50 loc) · 1.78 KB
/
sw.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
---
---
const name = {{ site.git_hash | jsonify }};
{%- assign urls = "" | split: "" -%}
{%- for page in site.pages -%}
{%- if page.title -%}
{%- assign url = page.url | absolute_url -%}
{%- assign urls = urls | push: url -%}
{%- endif -%}
{%- endfor -%}
const assets = {{ urls | jsonify }};
// Install event
self.addEventListener('install', (evt) => {
evt.waitUntil(
caches.open(name).then((cache) => {
console.log('caching shell assets');
// Iterate over each asset
return Promise.all(assets.map((asset) => fetch(asset)
.then((resp) => self.clients.matchAll().then(() => {
if (!resp.ok) throw new Error(`HTTP error! status: ${resp.status}`);
return cache.put(asset, resp);
})
.catch(() => fetch(asset.replace(/_/g, " ")).then((resp) => {
if (!resp.ok) throw new Error(`HTTP error! status: ${resp.status}`);
return cache.put(asset, resp);
}).catch(e => console.log(`Failed to download ${asset}`)))
)
));
})
);
// Forces the waiting service worker to become the active service worker
self.skipWaiting();
});
// Activate event
self.addEventListener('activate', (evt) => {
evt.waitUntil(
caches.keys().then((keys) => Promise.all(keys
.filter((key) => key !== name)
.map((key) => caches.delete(key))
))
);
// Makes the service worker take control of the page immediately
self.clients.claim();
});
// Fetch events
self.addEventListener('fetch', (evt) => evt.respondWith(
caches.match(evt.request).then((cacheRes) => {
return cacheRes || fetch(evt.request);
})
));