aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/assets.11tydata.json3
-rw-r--r--src/assets/atom.njk26
-rw-r--r--src/assets/error.md11
-rw-r--r--src/assets/index.mjs13
-rw-r--r--src/assets/json.njk30
-rw-r--r--src/assets/manifest.njk29
-rw-r--r--src/assets/prism.css130
-rw-r--r--src/assets/robot.njk6
-rw-r--r--src/assets/sitemap.njk14
-rw-r--r--src/assets/sw.11tydata.json3
-rw-r--r--src/assets/sw.mjs63
11 files changed, 328 insertions, 0 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/assets/atom.njk b/src/assets/atom.njk
new file mode 100644
index 0000000..4e517ca
--- /dev/null
+++ b/src/assets/atom.njk
@@ -0,0 +1,26 @@
+---
+permalink: /feed.xml
+---
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+ <title>{{ metadata.title }}</title>
+ <subtitle>{{ metadata.description }}</subtitle>
+ <link href="{{ permalink | url | absoluteUrl(metadata.url) }}" rel="self"/>
+ <link href="{{ "/" | url | absoluteUrl(metadata.url) }}"/>
+ <updated>{{ collections.posts | getNewestCollectionItemDate | dateToRfc3339 }}</updated>
+ <id>{{ metadata.url }}</id>
+ <author>
+ <name>{{ metadata.author.name }}</name>
+ <email>{{ metadata.author.email }}</email>
+ </author>
+ {% for post in collections.posts %}
+ {% set absolutePostUrl %}{{ post.url | url | absoluteUrl(metadata.url) }}{% endset %}
+ <entry>
+ <title>{{ post.data.title }}</title>
+ <link href="{{ absolutePostUrl }}"/>
+ <updated>{{ post.date | dateToRfc3339 }}</updated>
+ <id>{{ '/' | url | absoluteUrl(metadata.url) }}</id>
+ <content type="html"><![CDATA[{{ post.templateContent | htmlToAbsoluteUrls( absolutePostUrl ) }}]]></content>
+ </entry>
+ {% endfor %}
+</feed>
diff --git a/src/assets/error.md b/src/assets/error.md
new file mode 100644
index 0000000..65655f3
--- /dev/null
+++ b/src/assets/error.md
@@ -0,0 +1,11 @@
+---
+layout: base.njk
+pagination:
+ data: err
+ size: 1
+ alias: error
+permalink: "/{{ error.code }}.html"
+---
+# ERROR: {{ error.code }} {.err}
+
+{{ error.msg }}
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/assets/prism.css b/src/assets/prism.css
new file mode 100644
index 0000000..431fe8a
--- /dev/null
+++ b/src/assets/prism.css
@@ -0,0 +1,130 @@
+code[class*="language-"],pre[class*="language-"] {
+ color: #f8f8f2;
+ background: none;
+ text-shadow: 0 1px rgba(0, 0, 0, 0.3);
+ font-family: monospace;
+ font-size: 1em;
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ line-height: 1.5;
+ tab-size: 4;
+ hyphens: none;
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+ padding: 1em;
+ margin: .5em 0;
+ overflow: auto;
+ border-radius: 0.3em;
+}
+
+:not(pre) > code[class*="language-"],pre[class*="language-"] {
+ background: #272822;
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+ padding: .1em;
+ border-radius: .3em;
+ white-space: normal;
+}
+
+.token.comment,.token.prolog,.token.doctype,.token.cdata {
+ color: #8292a2;
+}
+
+.token.punctuation {
+ color: #f8f8f2;
+}
+
+.token.namespace {
+ opacity: .7;
+}
+
+.token.property,.token.tag,.token.constant,.token.symbol,.token.deleted {
+ color: #f92672;
+}
+
+.token.boolean,.token.number {
+ color: #ae81ff;
+}
+
+.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted {
+ color: #a6e22e;
+}
+
+.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable {
+ color: #f8f8f2;
+}
+
+.token.atrule,.token.attr-value,.token.function,.token.class-name {
+ color: #e6db74;
+}
+
+.token.keyword {
+ color: #66d9ef;
+}
+
+.token.regex,.token.important {
+ color: #fd971f;
+}
+
+.token.important,
+.token.bold {
+ font-weight: bold;
+}
+.token.italic {
+ font-style: italic;
+}
+
+.token.entity {
+ cursor: help;
+}
+
+@media screen and (prefers-color-scheme: dark){
+ code[class*="language-"],pre[class*="language-"] {
+ color: black;
+ text-shadow: 0 1px white;
+ }
+
+ :not(pre) > code[class*="language-"], pre[class*="language-"] {
+ background: #f5f2f0;
+ }
+
+ .token.comment,.token.prolog,.token.doctype,.token.cdata {
+ color: slategray;
+ }
+
+ .token.punctuation {
+ color: #999;
+ }
+
+ .token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.deleted {
+ color: #905;
+ }
+
+ .token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted {
+ color: #690;
+ }
+
+ .token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string {
+ color: #9a6e3a;
+ background: hsla(0, 0%, 100%, .5);
+ }
+
+ .token.atrule,.token.attr-value,.token.keyword {
+ color: #07a;
+ }
+
+ .token.function,.token.class-name {
+ color: #DD4A68;
+ }
+
+ .token.regex,.token.important,.token.variable {
+ color: #e90;
+ }
+} \ No newline at end of file
diff --git a/src/assets/robot.njk b/src/assets/robot.njk
new file mode 100644
index 0000000..dcaa728
--- /dev/null
+++ b/src/assets/robot.njk
@@ -0,0 +1,6 @@
+---
+permalink: /robot.txt
+---
+User-agent: *
+Allow: /
+Sitemap: {{ "/"| url | absoluteUrl(metadata.url) }}/sitemap.xml \ No newline at end of file
diff --git a/src/assets/sitemap.njk b/src/assets/sitemap.njk
new file mode 100644
index 0000000..910b238
--- /dev/null
+++ b/src/assets/sitemap.njk
@@ -0,0 +1,14 @@
+---
+permalink: /sitemap.xml
+---
+<?xml version="1.0" encoding="utf-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
+{%- for page in collections.all %}
+ {% set absoluteUrl %}{{ page.url | url | absoluteUrl(metadata.url) }}{% endset %}
+ <url>
+ <loc>{{ absoluteUrl }}</loc>
+ <lastmod>{{ page.date | datefmt }}</lastmod>
+ </url>
+{%- endfor %}
+</urlset>
+
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