diff options
add service worker
Diffstat (limited to '')
-rw-r--r-- | src/assets/assets.11tydata.json | 3 | ||||
-rw-r--r-- | src/assets/atom.njk (renamed from src/feed.njk) | 3 | ||||
-rw-r--r-- | src/assets/error.md (renamed from src/error.md) | 1 | ||||
-rw-r--r-- | src/assets/index.mjs | 13 | ||||
-rw-r--r-- | src/assets/json.njk | 30 | ||||
-rw-r--r-- | src/assets/manifest.njk | 29 | ||||
-rw-r--r-- | src/assets/prism.css (renamed from src/prism.css) | 0 | ||||
-rw-r--r-- | src/assets/robot.njk (renamed from src/robot.njk) | 1 | ||||
-rw-r--r-- | src/assets/sitemap.njk (renamed from src/sitemap.njk) | 1 | ||||
-rw-r--r-- | src/assets/sw.11tydata.json | 3 | ||||
-rw-r--r-- | src/assets/sw.mjs | 63 |
11 files changed, 142 insertions, 5 deletions
diff --git a/src/assets/assets.11tydata.json b/src/assets/assets.11tydata.json new file mode 100644 index 0000000..45b2b90 --- /dev/null +++ b/src/assets/assets.11tydata.json @@ -0,0 +1,3 @@ +{ + "eleventyExcludeFromCollections": true +}
\ No newline at end of file diff --git a/src/feed.njk b/src/assets/atom.njk index 120c33b..4e517ca 100644 --- a/src/feed.njk +++ b/src/assets/atom.njk @@ -1,6 +1,5 @@ --- permalink: /feed.xml -eleventyExcludeFromCollections: true --- <?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> @@ -21,7 +20,7 @@ eleventyExcludeFromCollections: true <link href="{{ absolutePostUrl }}"/> <updated>{{ post.date | dateToRfc3339 }}</updated> <id>{{ '/' | url | absoluteUrl(metadata.url) }}</id> - <content type="html">{{ post.templateContent | htmlToAbsoluteUrls( absolutePostUrl ) }}</content> + <content type="html"><![CDATA[{{ post.templateContent | htmlToAbsoluteUrls( absolutePostUrl ) }}]]></content> </entry> {% endfor %} </feed> diff --git a/src/error.md b/src/assets/error.md index a84fe07..65655f3 100644 --- a/src/error.md +++ b/src/assets/error.md @@ -5,7 +5,6 @@ pagination: size: 1 alias: error permalink: "/{{ error.code }}.html" -eleventyExcludeFromCollections: true --- # ERROR: {{ error.code }} {.err} diff --git a/src/assets/index.mjs b/src/assets/index.mjs new file mode 100644 index 0000000..99a92fc --- /dev/null +++ b/src/assets/index.mjs @@ -0,0 +1,13 @@ +const main = async () => { + window.addEventListener('load', async () => { + if ('serviceWorker' in navigator) { + try { + var sw = await navigator.serviceWorker.register('/sw.js') + } catch { + console.log("Service Worker failed to register") + } + } + }) +} + +main() diff --git a/src/assets/json.njk b/src/assets/json.njk new file mode 100644 index 0000000..6d8c7ec --- /dev/null +++ b/src/assets/json.njk @@ -0,0 +1,30 @@ +--- +permalink: /feed.json +--- +{ + "version": "https://jsonfeed.org/version/1.1", + "title": "{{ metadata.title }}", + "language": "{{ metadata.language }}", + "home_page_url": "{{ "/" | url | absoluteUrl(metadata.url) }}", + "feed_url": "{{ permalink | url | absoluteUrl(metadata.url) }}", + "description": "{{ metadata.description }}", + "author": { + "name": "{{ metadata.author.name }}" + }, + "items": [ + {%- for post in collections.posts | reverse %} + {%- set absolutePostUrl %}{{ post.url | url | absoluteUrl(metadata.url) }}{% endset -%} + { + "id": "{{ absolutePostUrl }}", + "url": "{{ absolutePostUrl }}", + "title": "{{ post.data.title }}", + "content_html": {% if post.templateContent %}{{ post.templateContent | htmlToAbsoluteUrls(absolutePostUrl) | dump | safe }} + {% else %}""{% endif %}, + "date_published": "{{ post.date | rssDate }}" + } + {%- if not loop.last -%} + , + {%- endif -%} +{%- endfor %} +] +} diff --git a/src/assets/manifest.njk b/src/assets/manifest.njk new file mode 100644 index 0000000..3942d06 --- /dev/null +++ b/src/assets/manifest.njk @@ -0,0 +1,29 @@ +--- +permalink: /app.webmanifest +--- +{ + "$schema": "https://json.schemastore.org/web-manifest-combined.json", + "name": "{{ metadata.title }}", + + "lang": "en-GB", + "start_url": "{{ '/' | url }}", + "id": "{{ '/' | url }}", + "scope": "{{ '/' | url }}", + "display": "minimal-ui", + "background_color": "red", + "theme_color": "red", + "description": "{{ metadata.description }}", + "icons": [ + { + "src": "{{ '/favicon.ico' | url }}", + "sizes": "256x256", + "type": "image/vnd.microsoft.icon" + }, + { + "src": "{{ '/favicon.svg' | url }}", + "sizes": "any", + "type": "image/svg+xml" + } + ] + +} diff --git a/src/prism.css b/src/assets/prism.css index 431fe8a..431fe8a 100644 --- a/src/prism.css +++ b/src/assets/prism.css diff --git a/src/robot.njk b/src/assets/robot.njk index 79c49c0..dcaa728 100644 --- a/src/robot.njk +++ b/src/assets/robot.njk @@ -1,6 +1,5 @@ --- permalink: /robot.txt -eleventyExcludeFromCollections: true --- User-agent: * Allow: / diff --git a/src/sitemap.njk b/src/assets/sitemap.njk index b2ff291..910b238 100644 --- a/src/sitemap.njk +++ b/src/assets/sitemap.njk @@ -1,6 +1,5 @@ --- permalink: /sitemap.xml -eleventyExcludeFromCollections: true --- <?xml version="1.0" encoding="utf-8"?> <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> diff --git a/src/assets/sw.11tydata.json b/src/assets/sw.11tydata.json new file mode 100644 index 0000000..55b70b5 --- /dev/null +++ b/src/assets/sw.11tydata.json @@ -0,0 +1,3 @@ +{ + "permalink": "/sw.js" +}
\ No newline at end of file diff --git a/src/assets/sw.mjs b/src/assets/sw.mjs new file mode 100644 index 0000000..432e630 --- /dev/null +++ b/src/assets/sw.mjs @@ -0,0 +1,63 @@ +const cache_name = "v3" + +const install_sw = async event => { + const precache = async() => { + const cache = await caches.open(cache_name); + return cache.addAll([ + '/index.css', + '/prism.css', + '/index.js', + '/sw.js', + '/favicon.svg', + '/offline.html', + '/' + ]) + } + event.waitUntil(precache()) +} + +const activate_sw = async event => { + const cachepreserve = ['v3']; + + const invalidatecache = async() => { + const keys = await caches.keys() + Promise.all( + keys.map((key) => { + if (cachepreserve.indexOf(key) === -1) { + return caches.delete(key) + } + })) + } + event.waitUntil(invalidatecache()) +} + +const fetch_sw = async event => { + const cache_fetch = async() => { + if (event.request.method != 'GET') { + return + } + const cacheres = await caches.match(event.request) + if (cacheres !== undefined) { + return cacheres + } + try { + const response = await fetch(event.request) + const cache = await caches.open(cache_name) + cache.put(event.request, response.clone()) + return response + } catch { + return caches.match('/offline.html') + } + } + + event.respondWith(cache_fetch()) +} + +const main = async() => { + self.addEventListener('install', install_sw) + self.addEventListener('activate', activate_sw) + self.addEventListener('fetch', fetch_sw) + +} + +main()
\ No newline at end of file |