diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/about.md | 1 | ||||
-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 | ||||
-rw-r--r-- | src/blog.njk | 7 | ||||
-rw-r--r-- | src/css.11ty.js | 36 | ||||
-rw-r--r-- | src/data/env.js | 8 | ||||
-rw-r--r-- | src/index.css | 121 | ||||
-rw-r--r-- | src/js.11ty.js | 35 | ||||
-rw-r--r-- | src/layouts/base.njk | 41 | ||||
-rw-r--r-- | src/layouts/post.njk | 2 | ||||
-rw-r--r-- | src/post/hello_world.md | 2 | ||||
-rw-r--r-- | src/post/post.11tydata.js | 8 | ||||
-rw-r--r-- | src/post/post.json | 3 |
22 files changed, 260 insertions, 151 deletions
diff --git a/src/about.md b/src/about.md index 4524f7a..207b2e3 100644 --- a/src/about.md +++ b/src/about.md @@ -6,3 +6,4 @@ tags: --- # About Me +This Marc Pervaz Boocha 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 diff --git a/src/blog.njk b/src/blog.njk index d2ac3e7..f4b9ad5 100644 --- a/src/blog.njk +++ b/src/blog.njk @@ -4,9 +4,8 @@ title: Blog tags: - navigator --- -<ul style="list-style-type:none"> {% for post in collections.posts %} -<li> +<article> <h1> <a href="{{ post.url | url }}">{{ post.data.title }}</a> </h1> @@ -14,6 +13,6 @@ tags: <p>{{ metadata.author.name }} - {{ post.data.date | datefmt }}<p> </small> <p>{{ post.data.description }}<p> -</li> +</article> {% endfor %} -</ul> + diff --git a/src/css.11ty.js b/src/css.11ty.js deleted file mode 100644 index 3a5b9df..0000000 --- a/src/css.11ty.js +++ /dev/null @@ -1,36 +0,0 @@ -const fs = require('fs') -const path = require('path') -const postcss = require('postcss') - -module.exports = class { - async data() { - return { - inputs: [ - 'index.css', - 'prism.css' - ], - - pagination: { - data: 'inputs', - alias: 'inputfiles', - size: 1 - }, - - permalink: ({ inputfiles }) => `/${inputfiles}`, - - eleventyExcludeFromCollections: true - } - }; - - async render({ inputfiles}) { - const inputfile = path.join(__dirname, inputfiles); - return await postcss([ - require('postcss-import'), - require('autoprefixer'), - ]) - .process(await fs.readFileSync(inputfile), { - from: inputfile - }) - .then(result => result.css) - }; -} diff --git a/src/data/env.js b/src/data/env.js new file mode 100644 index 0000000..f1d2920 --- /dev/null +++ b/src/data/env.js @@ -0,0 +1,8 @@ +const { env } = require("process") + +module.exports = () => { + return { + isdevel: env.NODE_ENV == "develoment", + env: env + } +}
\ No newline at end of file diff --git a/src/index.css b/src/index.css index a55d276..7984af2 100644 --- a/src/index.css +++ b/src/index.css @@ -1,62 +1,73 @@ :root { - font-family: sans-serif; + font-family: serif; } @media screen { - - body { - max-width: 920px; - margin: auto; - padding: 0.5rem; - } - - :any-link { - color: inherit; - text-decoration: underline; - } - - .menu :any-link { - text-decoration: inherit; - } - - .menu ul { - background: darkred; - color: white; - padding: 1rem; - font-size: 1rem; - } - - .menu li { - display: inline; - margin-right: 1rem; - padding-left: 0rem; - padding-right: 0rem; - } - - .err { - color: darkred; - } - - @media (prefers-color-scheme: dark) { - :root { - background: black; - color: white; - } - - .menu ul { - background: red; - } - - .err { - color: red; - } - - } + body { + max-width: 920px; + min-height: 98vh; + display: flex; + flex-direction: column; + margin: auto; + padding: 0.5rem; + } + main { + flex-grow: 1; + } + :any-link { + color: inherit; + text-decoration: underline; + } + :any-link:hover, + :any-link:active { + font-style: italic; + } + #menu { + background: darkred; + text-decoration: none; + font-weight: bold; + color: white; + padding: 1rem; + font-size: 1rem; + } + @media (max-width: 450px) { + #menu a { + display: block; + text-align: center; + margin: auto; + padding: 20px; + } + } + #menu :any-link { + text-decoration: none; + margin-right: 1rem; + padding-left: 0rem; + padding-right: 0rem; + } + #menu :any-link:hover { + text-decoration: none; + } + .err { + color: darkred; + } + @media (prefers-color-scheme: dark) { + :root { + background: black; + color: white; + } + #menu nav { + background: red; + } + .err { + color: red; + } + } } @media print { - header,nav,footer{ - display:none; - } -} - + header, + nav, + footer { + display: none; + } +}
\ No newline at end of file diff --git a/src/js.11ty.js b/src/js.11ty.js deleted file mode 100644 index b4b04c7..0000000 --- a/src/js.11ty.js +++ /dev/null @@ -1,35 +0,0 @@ -const fs = require('fs') -const path = require('path') -const postcss = require('postcss') - -module.exports = class { - async data() { - return { - inputs: [ - ], - - pagination: { - data: 'inputs', - alias: 'inputfiles', - size: 1 - }, - - permalink: ({ inputfiles }) => `/${inputfiles}.css`, - - eleventyExcludeFromCollections: true - } - }; - - async render({ inputfiles}) { - const inputfile = path.join(__dirname, inputfiles); - return await postcss([ - require('postcss-import'), - require('autoprefixer'), - require('cssnano') - ]) - .process(await fs.readFileSync(inputfile), { - from: inputfile - }) - .then(result => result.css) - }; -} diff --git a/src/layouts/base.njk b/src/layouts/base.njk index 10e448f..879d2d5 100644 --- a/src/layouts/base.njk +++ b/src/layouts/base.njk @@ -2,28 +2,47 @@ <html lang="en-GB"> <head> <meta charset="utf-8"> + <meta property="og:locale" content="en_GB"/> <title>{{ title or metadata.title }}</title> + <meta property="og:title" content="{{ title or metadata.title }}"> + <meta property="og:site_name" content="{{ metadata.title }}"> <meta name="author" content="{{ metadata.author.name }}"> <meta name="description" content="{{ description or metadata.description }}"> + <meta property="og:description" content="{{ description or metadata.description }}"> + <meta name="keywords" contents="{{ keywords }}"> <meta name="generator" contents="eleventy"> <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="twitter:card" content="summary"></meta> + <meta property="og:url" content="{{ page.url | url | absoluteUrl(metadata.url) }}"/> + <link rel="canonical" href="{{ page.url | url | absoluteUrl(metadata.url) }}"/> <link async rel="icon" href="{{ '/favicon.svg' | url }}" type="image/svg+xml"> <link rel="alternate" href="{{ metadata.feed | url }}" type="application/atom+xml" title="{{ metadata.title }}"> - <link rel="canonical" href="{{ page.url | url | absoluteUrl(metadata.url) }}"/> - <link as="style" href="{{ '/index.css' | url }}" rel="stylesheet"/> - <link as="style" href="{{ '/prism.css' | url }}" rel="stylesheet"> + <link rel="manifest" href="{{ '/app.webmanifest' | url }}" crossorigin="use-credentials"> + <meta name="theme-color" content"darkred"> + <link as="style" href="{{ '/assets/index.css' | url }}" rel="stylesheet"/> + {% if syntaxhighlight %}<link as="style" href="{{ '/assets//prism.css' | url }}" rel="stylesheet"/>{% endif %} + <script type="module" src="{{ '/assets/index.js' | url }}"></script> </head> <body> <header> - <nav class="menu"><ul> - {% for nav in navigator %} - <li><a href="{{ nav.url | url }}">{{ nav.title }}</a></li> - {% endfor %} - </ul></nav> + <nav id="menu"> + <a href="#">Sudomsg</a> + {% for nav in navigator %} + <a href="{{ nav.url | url }}">{{ nav.title }}</a> + {% endfor %} + </nav> </header> <main> - {{ content | safe }} + {{ content | safe }} </main> + <footer> + Subscribe: <a href="{{ '/feed.xml' | url }}" >RSS</a> + <a href="{{ '/feed.json' | url }}" >JSON</a> + </footer> + {% if not env.isdevel %} + <!-- Cloudflare Web Analytics --> + <script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "b70b2446607f42a4a139dea42210880e"}'></script> + <!-- End Cloudflare Web Analytics --> + {% endif %} </body> -</html> - +</html>
\ No newline at end of file diff --git a/src/layouts/post.njk b/src/layouts/post.njk index b2eb5e5..70e3be8 100644 --- a/src/layouts/post.njk +++ b/src/layouts/post.njk @@ -6,7 +6,7 @@ tags: <article> <h1>{{ title }}</h1> <small> - <time datetime="{{ date | datefmt }}">{{ date | datefmt }}</time> - {{ metadata.author.name }} + <time datetime="{{ date | datefmt }}">{{ date | datefmt }}</time> - {{ metadata.author.name }} </small> {{ content | safe }} </article> diff --git a/src/post/hello_world.md b/src/post/hello_world.md index 923ad0b..741c490 100644 --- a/src/post/hello_world.md +++ b/src/post/hello_world.md @@ -4,5 +4,5 @@ description: The First Post to the World date: 2021-09-12 --- This is the first post on my blog. - + Eleventy is super fresh init. diff --git a/src/post/post.11tydata.js b/src/post/post.11tydata.js new file mode 100644 index 0000000..68f56d2 --- /dev/null +++ b/src/post/post.11tydata.js @@ -0,0 +1,8 @@ +const slugify = require("@sindresorhus/slugify") + +module.exports = () => ({ + layout: "post.njk", + eleventyComputed: { + permalink: data => `/posts/${slugify(data.title)}/` + } +})
\ No newline at end of file diff --git a/src/post/post.json b/src/post/post.json deleted file mode 100644 index 60ff6df..0000000 --- a/src/post/post.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "layout": "post.njk" -}
\ No newline at end of file |