Skip to content

Commit 79fccf2

Browse files
committed
Add service worker for offline support.
1 parent dba3e51 commit 79fccf2

File tree

2 files changed

+63
-1
lines changed

2 files changed

+63
-1
lines changed

_layouts/base.html

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
</head>
1111
<body class="layout-{{ page.layout }}">
1212
{{ content }}
13-
<script>_gaq=[['_setAccount','UA-6065217-64'],['_trackPageview']];(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.src='https://www.google-analytics.com/ga.js';s.parentNode.insertBefore(g,s)}(document,'script'))</script>
13+
<script>_gaq=[["_setAccount","UA-6065217-64"],["_trackPageview"]],navigator.onLine&&function(e,t){var a=e.createElement(t),c=e.getElementsByTagName(t)[0];a.src="https://www.google-analytics.com/ga.js",c.parentNode.insertBefore(a,c)}(document,"script")</script>
14+
<script>"serviceWorker"in navigator&&navigator.serviceWorker.register("/sw.js").catch(console.error.bind(console))</script>
1415
</body>
1516
</html>

sw.js

+61
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
---
3+
4+
'use strict';
5+
6+
var CACHE_KEY = 'cache-v{{ site.time | replace:" ","" | replace:":","" | replace:"-","" }}';
7+
8+
var prefetch = [
9+
{% for release in site.releases %}
10+
'/docs/{{ release }}.html',
11+
'https://rawgit.com/lodash/lodash/{{ release }}/lodash.js',
12+
{% endfor %}
13+
'/404.html',
14+
'/custom-builds.html',
15+
'/assets/js/docs.js',
16+
'https://embed.tonicdev.com/',
17+
'https://npmcdn.com/react@15.3.1/dist/react.min.js',
18+
'https://npmcdn.com/react-dom@15.3.1/dist/react-dom.min.js'
19+
];
20+
21+
var nocache = [
22+
'google-analytics.com'
23+
];
24+
25+
addEventListener('install', event =>
26+
event.waitUntil(Promise.all([
27+
skipWaiting(),
28+
caches.open(CACHE_KEY).then(cache =>
29+
cache
30+
.addAll(prefetch.map(entry => new Request(entry, { 'mode': 'no-cors' })))
31+
.catch(error => console.log('prefetch failed:', error))
32+
)
33+
]))
34+
);
35+
36+
addEventListener('activate', event =>
37+
event.waitUntil(Promise.all([
38+
clients.claim(),
39+
caches.keys().then(keys =>
40+
Promise.all(keys.map(key =>
41+
key == CACHE_KEY || caches.delete(key)
42+
))
43+
)
44+
]))
45+
);
46+
47+
addEventListener('fetch', event =>
48+
event.respondWith(
49+
caches.open(CACHE_KEY).then(cache =>
50+
cache.match(event.request).then(response =>
51+
response || fetch(event.request).then(response => {
52+
if (!nocache.some(entry => event.request.url.includes(entry))) {
53+
cache.put(event.request, response.clone());
54+
}
55+
return response;
56+
})
57+
.catch(error => console.log('fetch failed:', error))
58+
)
59+
)
60+
)
61+
);

0 commit comments

Comments
 (0)