aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/about.md1
-rw-r--r--src/assets/assets.11tydata.json3
-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.mjs13
-rw-r--r--src/assets/json.njk30
-rw-r--r--src/assets/manifest.njk29
-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.json3
-rw-r--r--src/assets/sw.mjs63
-rw-r--r--src/blog.njk7
-rw-r--r--src/css.11ty.js36
-rw-r--r--src/data/env.js8
-rw-r--r--src/index.css121
-rw-r--r--src/js.11ty.js35
-rw-r--r--src/layouts/base.njk41
-rw-r--r--src/layouts/post.njk2
-rw-r--r--src/post/hello_world.md2
-rw-r--r--src/post/post.11tydata.js8
-rw-r--r--src/post/post.json3
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