summaryrefslogtreecommitdiff
path: root/themes/hugo-book/assets/sw.js
diff options
context:
space:
mode:
authoraethrvmn <me@aethrvmn.gr>2025-08-30 13:17:32 +0000
committeraethrvmn <me@aethrvmn.gr>2025-08-30 13:17:32 +0000
commit1147a663e70aadb2578cbe601bc723d7cd939c5a (patch)
treeb5100d2031328be3cfd3e9ae62730436bd573e0f /themes/hugo-book/assets/sw.js
parentadded .gitignore (diff)
added non-content
Diffstat (limited to '')
-rw-r--r--themes/hugo-book/assets/sw.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/themes/hugo-book/assets/sw.js b/themes/hugo-book/assets/sw.js
new file mode 100644
index 0000000..2ff11fc
--- /dev/null
+++ b/themes/hugo-book/assets/sw.js
@@ -0,0 +1,55 @@
+const cacheName = self.location.pathname
+const pages = [
+{{ if eq .Site.Params.BookServiceWorker "precache" }}
+ {{ range .Site.AllPages -}}
+ "{{ .RelPermalink }}",
+ {{ end -}}
+{{ end }}
+];
+
+self.addEventListener("install", function (event) {
+ self.skipWaiting();
+
+ caches.open(cacheName).then((cache) => {
+ return cache.addAll(pages);
+ });
+});
+
+self.addEventListener("fetch", (event) => {
+ const request = event.request;
+ if (request.method !== "GET") {
+ return;
+ }
+
+ /**
+ * @param {Response} response
+ * @returns {Promise<Response>}
+ */
+ function saveToCache(response) {
+ if (cacheable(response)) {
+ return caches
+ .open(cacheName)
+ .then((cache) => cache.put(request, response.clone()))
+ .then(() => response);
+ } else {
+ return response;
+ }
+ }
+
+ /**
+ * @param {Error} error
+ */
+ function serveFromCache(error) {
+ return caches.open(cacheName).then((cache) => cache.match(request.url));
+ }
+
+ /**
+ * @param {Response} response
+ * @returns {Boolean}
+ */
+ function cacheable(response) {
+ return response.type === "basic" && response.ok && !response.headers.has("Content-Disposition")
+ }
+
+ event.respondWith(fetch(request).then(saveToCache).catch(serveFromCache));
+});
Directive (EU) 2019/790, Article 4(3); all rights regarding Text and Data Mining (TDM) are reserved.