summaryrefslogtreecommitdiff
path: root/app/public/sw2.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/public/sw2.js')
-rw-r--r--app/public/sw2.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/app/public/sw2.js b/app/public/sw2.js
new file mode 100644
index 0000000..0dabb13
--- /dev/null
+++ b/app/public/sw2.js
@@ -0,0 +1,40 @@
+// https://googlechrome.github.io/samples/service-worker/basic/
+
+const PRECACHE = "notes-precache-v1";
+const RUNTIME = "notes-runtime";
+
+const PRECACHE_URLS = [
+ "./", // Alias for index.html
+ "index.html",
+ "style.css",
+ "main.js"
+];
+
+self.addEventListener("install", e => e.waitUntil(
+ caches.open(PRECACHE)
+ .then(cache => cache.addAll(PRECACHE_URLS))
+ .then(self.skipWaiting())));
+
+self.addEventListener("activate", e => {
+ const currentCaches = [PRECACHE, RUNTIME];
+ e.waitUntil( // Clean up old caches
+ caches.keys().then(cacheNames =>
+ cacheNames.filter(cacheName => !currentCaches.includes(cacheName))
+ ).then(cachesToDelete => Promise.all(cachesToDelete.map(cacheToDelete =>
+ caches.delete(cacheToDelete)))
+ ).then(() => self.clients.claim())
+ );
+});
+
+self.addEventListener("fetch", e => {
+ if (e.request.url.startsWith(self.location.origin)) {
+ e.respondWith(caches.match(e.request).then(cachedResponse =>
+ cachedResponse? cachedResponse
+ : caches.open(RUNTIME).then(cache =>
+ fetch(e.request).then(res =>
+ cache.put(e.request, res.clone()).then(() => res)
+ )
+ )
+ ));
+ }
+});