diff options
Diffstat (limited to 'src')
32 files changed, 275 insertions, 724 deletions
diff --git a/src/about.md b/src/about.md index ef1fad4..a0beb69 100644 --- a/src/about.md +++ b/src/about.md @@ -1,15 +1,11 @@ --- -layout: base.njk +layout: page title: About Me -tags: - - navigator --- -# About Me - ## {{ metadata.author.name }} -{.side} +{.side} Email: <{{ metadata.author.email }}> -Github: <{{ metadata.author.github | url}}> +Github: <{{ metadata.author.github}}> diff --git a/src/assets/atom.njk b/src/assets/atom.njk deleted file mode 100644 index 4e517ca..0000000 --- a/src/assets/atom.njk +++ /dev/null @@ -1,26 +0,0 @@ ---- -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 deleted file mode 100644 index 65655f3..0000000 --- a/src/assets/error.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -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.css b/src/assets/index.css deleted file mode 100644 index 2a75675..0000000 --- a/src/assets/index.css +++ /dev/null @@ -1,137 +0,0 @@ -:root { - --fg: rgb(0 0 0); - --bg: rgb(255 255 255); - --brand: rgb(139 0 0); - - @media screen and (prefers-color-scheme: dark) { - --bg: rgb(0 0 0); - --fg: rgb(255 255 255); - --brand: rgb(255 0 0); - } -} - -body { - font-family: serif; - background-color: var(--bg); - color: var(--fg); - - @media screen { - max-width: 920px; - min-height: calc(100vh - 1rem); - margin: 0.5rem auto; - display: grid; - grid-template: "head" auto "main" auto "footer" 1fr / auto; - - & > header { - background-color: var(--brand); - font-weight: bold; - color: rgb(255 255 255); - padding: 1rem; - grid-area: head; - - & *:any-link { - text-decoration: none; - } - } - - & > footer { - background-color: var(--brand); - color: rgb(255 255 255); - padding: 0.5rem; - align-self: end; - grid-area: footer; - - & *:any-link { - text-decoration: none; - } - } - - & > main { - margin: 0.5rem 0; - grid-area: main; - } - } -} - -* :any-link { - color: inherit; - text-decoration: underline; - - @media screen { - &:is(:hover, :active) { - font-style: italic; - } - } -} - -.header-anchor:any-link { - text-decoration: none; - - @media screen { - &:is(:hover, :active) { - font-style: inherit; - } - } -} - -a[href^="mailto:"]::after { - content: "📧"; -} - -.err { - color: var(--brand); -} - -aside { - width: 40%; - padding: 0.5rem; - margin-left: 0.5rem; - float: right; - background-color: var(--brand); - color: rgb(255 255 255); -} - -img { - max-width: 100%; - max-height: 100%; - - &.side { - width: 40%; - float: right; - - @media screen and (max-width: 450px) { - width: 100%; - float: none; - } - } -} - -@media screen { - nav > a { - margin-right: 1rem; - padding-left: 0; - padding-right: 0; - - @media (max-width: 450px) { - display: block; - margin: auto; - text-align: center; - padding: 16px; - - &.navlinks { - display: none; - - &.navopen { - display: block; - } - } - } - } -} - -@media print { - header, - footer { - display: none; - } -} diff --git a/src/assets/index.mjs b/src/assets/index.mjs deleted file mode 100644 index 4d7c2b0..0000000 --- a/src/assets/index.mjs +++ /dev/null @@ -1,12 +0,0 @@ -document.getElementById("nav-toogle").addEventListener("click", async() => { - const navlinks = Array.from(document.getElementsByClassName("navlinks")) - for (const navlink of navlinks) { - navlink.classList.toggle("navopen") - } - return false -}) -window.addEventListener('load', async() => { - if ('serviceWorker' in navigator) { - navigator.serviceWorker.register('/sw.js') - } -})
\ No newline at end of file diff --git a/src/assets/json.njk b/src/assets/json.njk deleted file mode 100644 index 0d58804..0000000 --- a/src/assets/json.njk +++ /dev/null @@ -1,30 +0,0 @@ ---- -permalink: /feed.json ---- -{ - "version": "https://jsonfeed.org/version/1.1", - "title": "{{ metadata.title }}", - "language": "{{ metadata.language }}", - "home_page_url": "{{ 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 deleted file mode 100644 index 9362037..0000000 --- a/src/assets/manifest.njk +++ /dev/null @@ -1,29 +0,0 @@ ---- -permalink: /app.webmanifest ---- -{ - "$schema": "https://json.schemastore.org/web-manifest-combined.json", - "name": "{{ metadata.title }}", - - "lang": "{{ metadata.language }}", - "start_url": "/", - "id": "/", - "scope": "/", - "display": "minimal-ui", - "background_color": "{{ metadat.theme }}", - "theme_color": "{{ metadat.theme }}", - "description": "{{ metadata.description }}", - "icons": [ -{%- for size in [192,512,1024] %} - { - "src": "/favicon/{{ size }}.png", - "type": "image/png", - "sizes": "{{ size }}x{{ size }}", - "purpose": "maskable" - } - {%- if not loop.last -%} - , - {%- endif -%} - {%- endfor -%} - ] -} diff --git a/src/assets/prism.css b/src/assets/prism.css deleted file mode 100644 index 110c6be..0000000 --- a/src/assets/prism.css +++ /dev/null @@ -1,162 +0,0 @@ -code[class*="language-"], -pre[class*="language-"] { - color: rgb(248 248 242); - background: none; - text-shadow: 0 1px rgb(0 0 0 / 30%); - 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; - - @media screen and (prefers-color-scheme: dark) { - code[class*="language-"], - pre[class*="language-"] { - color: #000; - text-shadow: 0 1px #fff; - } - } -} - -/* Code blocks */ - -pre[class*="language-"] { - padding: 1em; - margin: 0.5em 0; - overflow: auto; - border-radius: 0.3em; -} - -:not(pre) > code[class*="language-"], -pre[class*="language-"] { - background: rgb(39 40 34); - - @media screen and (prefers-color-scheme: dark) { - background: rgb(245 242 240); - } -} - -/* Inline code */ - -:not(pre) > code[class*="language-"] { - padding: 0.1em; - border-radius: 0.3em; - white-space: normal; -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: rgb(130 146 162); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(112 128 144); - } -} - -.token.punctuation { - color: rgb(248 248 242); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(153 0 85); - } -} - -.token.namespace { - opacity: 0.7; -} - -.token.property, -.token.tag, -.token.constant, -.token.symbol, -.token.deleted { - color: rgb(249 38 114); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(153 0 85); - } -} - -.token.boolean, -.token.number { - color: rgb(174 129 255); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(153 0 85); - } -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.inserted { - color: rgb(166 226 46); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(102 153 0); - } -} - -.token.operator, -.token.entity, -.token.url, -.language-css .token.string, -.style .token.string, -.token.variable { - color: rgb(248 248 242); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(154 110 58); - background: rgb(255 255 255 / 50%); - } -} - -.token.atrule, -.token.attr-value, -.token.function, -.token.class-name { - color: rgb(230 219 116); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(0 118 168); - } -} - -.token.keyword { - color: rgb(102 217 239); - - @media screen and (prefers-color-scheme: dark) { - color: rgb(221 75 104); - } -} - -.token.regex, -.token.important { - color: rgb(253 151 31); - - @media screen (prefers-color-scheme: dark) { - color: rgb(238 153 0); - } -} - -.token.important, -.token.bold { - font-weight: bold; -} - -.token.italic { - font-style: italic; -} - -.token.entity { - cursor: help; -} diff --git a/src/assets/robot.njk b/src/assets/robot.njk deleted file mode 100644 index dcaa728..0000000 --- a/src/assets/robot.njk +++ /dev/null @@ -1,6 +0,0 @@ ---- -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 deleted file mode 100644 index 910b238..0000000 --- a/src/assets/sitemap.njk +++ /dev/null @@ -1,14 +0,0 @@ ---- -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.mjs b/src/assets/sw.mjs deleted file mode 100644 index 78d659a..0000000 --- a/src/assets/sw.mjs +++ /dev/null @@ -1,59 +0,0 @@ -const sw_cache = { - offline: "/offline.html", - default: [ - "/index.css", - "/prism.css", - "/index.js", - "/favicon/icon.svg", - "/offline.html", - "/" - ], - // eslint-disable-next-line no-undef - store: VERSION, -} - -self.addEventListener('install', event => { - self.skipWaiting() - event.waitUntil((async() => { - const cache = await self.caches.open(sw_cache.store) - return cache.addAll(sw_cache.default) - })()) -}) - -self.addEventListener('activate', event => { - event.waitUntil((async() => { - const keys = await self.caches.keys() - Promise.all(keys.map(key => { - if (key !== sw_cache.store) { - return self.caches.delete(key) - } - })) - })()) -}) - -self.addEventListener('fetch', event => { - event.respondWith((async() => { - if (event.request.method != 'GET') { - return fetch(event.request) - } - - const req_url = new URL(event.request.url) - if (req_url.origin != self.location.origin) { - return fetch(event.request) - } - - const cacheres = await self.caches.match(event.request) - return cacheres || (async() => { - try { - const response = await self.fetch(event.request) - const cache = await self.caches.open(sw_cache.store) - cache.put(event.request, response.clone()) - return response - } catch { - return self.caches.match(sw_cache.offline) - } - })() - })()) - - -})
\ No newline at end of file diff --git a/src/blog.11ty.js b/src/blog.11ty.js new file mode 100644 index 0000000..eb79089 --- /dev/null +++ b/src/blog.11ty.js @@ -0,0 +1,23 @@ +module.exports = class { + data() { + return { + layout: "base", + title: "Blog" + }; + } + + render(data) { + return `<div role="feed" aria-busy="false"> + ${(data.collections.posts || []).map((post, index, array) => `<article aria-posinset="${index}" aria-setsize="${array.len}"> + <h1> + <a href="${post.url}">${post.data.title}</a> + </h1> + <small> + <time datetime="${data.page.date.toISOString()}">${data.page.date.toDateString()}</time> - <a rel=author href="${data.metadata.author.url}">${data.metadata.author.name}</a> + </small> + <p>${post.data.description}</p> + </article> + `).join()} + </div>`; + } +}; diff --git a/src/blog.njk b/src/blog.njk deleted file mode 100644 index 9bd2a05..0000000 --- a/src/blog.njk +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: base.njk -title: Blog -tags: - - navigator ---- -<div role="feed" aria-busy="false"> - {% for post in collections.posts %} - <article aria-posinset="{{ loop.index }}" aria-setsize="{{ loop.size }}"> - <h1> - <a href="{{ post.url | url }}">{{ post.data.title }}</a> - </h1> - <small> - <p>{{ metadata.author.name }} - {{ post.data.date | datefmt }}</p> - </small> - <p>{{ post.data.description }}</p> - </article> - {% endfor %} -</div>
\ No newline at end of file diff --git a/src/data/env.js b/src/data/env.js index 91842b4..a497313 100644 --- a/src/data/env.js +++ b/src/data/env.js @@ -1,3 +1,3 @@ -const process = require("process") +const process = require("process"); -module.exports = () => process.env
\ No newline at end of file +module.exports = () => process.env;
\ No newline at end of file diff --git a/src/data/err.js b/src/data/err.js deleted file mode 100644 index 0e3fe56..0000000 --- a/src/data/err.js +++ /dev/null @@ -1,121 +0,0 @@ -module.exports = [{ - code: "offline", - msg: "The Page is offline" - }, - { - code: 400, - msg: "Bad Request" - }, - { - code: 401, - msg: "Unauthorized" - }, - { - code: 402, - msg: "Payment Required" - }, - { - code: 403, - msg: "Forbidden" - }, - { - code: 404, - msg: "Not Found" - }, - { - code: 405, - msg: "Method Not Allowed" - }, - { - code: 406, - msg: "Not Acceptable" - }, - { - code: 407, - msg: "Proxy Authentication Required" - }, - { - code: 408, - msg: "Request Timeout" - }, - { - code: 409, - msg: "Conflict" - }, - { - code: 410, - msg: "Gone" - }, - { - code: 411, - msg: "Length Required" - }, - { - code: 412, - msg: "Precondition Failed" - }, - { - code: 413, - msg: "Payload Too Large" - }, - { - code: 414, - msg: "URI Too Long" - }, - { - code: 415, - msg: "Unsupported Media Type" - }, - { - code: 416, - msg: "Range Not Satisfiable" - }, - { - code: 417, - msg: "Expectation Failed" - }, - { - code: 418, - msg: "I\"m a teapot" - }, - { - code: 421, - msg: "Misdirected Request" - }, - { - code: 422, - msg: "Unprocessable Entity" - }, - { - code: 423, - msg: "Locked" - }, - { - code: 424, - msg: "Failed Dependency" - }, - { - code: 425, - msg: "Too Early" - }, - { - code: 426, - msg: "Upgrade Required" - }, - { - code: 428, - msg: "Precondition Required" - }, - { - code: 429, - msg: "Too Many Requests" - }, - { - code: 431, - msg: "Request Header Fields Too Large" - }, - { - code: 451, - msg: "Unavailable For Legal Reasons" - } -]
\ No newline at end of file diff --git a/src/data/metadata.js b/src/data/metadata.js index db05b63..a38e344 100644 --- a/src/data/metadata.js +++ b/src/data/metadata.js @@ -15,4 +15,4 @@ module.exports = { image: "/favicon/512.png", url: "/about/#marc-pervaz-boocha" } -}
\ No newline at end of file +};
\ No newline at end of file diff --git a/src/data/navigator.js b/src/data/navigator.js deleted file mode 100644 index 2081e7d..0000000 --- a/src/data/navigator.js +++ /dev/null @@ -1,13 +0,0 @@ -module.exports = [{ - url: "/", - title: "Home" - }, - { - url: "/blog/", - title: "Blog" - }, - { - url: "/about/", - title: "About" - } -]
\ No newline at end of file diff --git a/src/gen/atom.11ty.js b/src/gen/atom.11ty.js new file mode 100644 index 0000000..0184018 --- /dev/null +++ b/src/gen/atom.11ty.js @@ -0,0 +1,30 @@ +module.exports = class { + async data() { + return { + permalink: "/feed.xml" + }; + } + + async render(data) { + return `<?xml version="1.0" encoding="utf-8"?> + <feed xmlns="http://www.w3.org/2005/Atom"> + <title>${data.metadata.title}</title> + <subtitle>${data.metadata.description}</subtitle> + <link href="${new URL(data.url, data.metadata.url)}" rel="self"/> + <link href="${data.metadata.url}"/> + <updated>${this.getNewestCollectionItemDate((data.collections.posts) || []).toISOString()}</updated> + <id>${data.metadata.url}</id> + <author> + <name>${data.metadata.author.name}</name> + <email>${data.metadata.author.email}</email> + </author> + ${(await Promise.all((data.collections.posts || []).map(async post => `<entry> + <title>${post.data.title}</title> + <link href="${new URL(post.url, data.metadata.url)}"/> + <updated>${post.date.toISOString()}</updated> + <id>${new URL(post.url, data.metadata.url)}</id> + <content type="html"><![CDATA[${await this.convertHtmlToAbsoluteUrls(post.templateContent, new URL(post.url, data.metadata.url)) || ""}]]></content> + </entry>`))).join()} + </feed>`; + } +}; diff --git a/src/gen/error.11ty.js b/src/gen/error.11ty.js new file mode 100644 index 0000000..6c7105e --- /dev/null +++ b/src/gen/error.11ty.js @@ -0,0 +1,21 @@ +module.exports = class { + data() { + return { + layout: "base", + pagination: { + data: "err", + size: 1, + }, + err: { + offline: "The Page is offline", + 404: "Not Found" + }, + permalink: data => `/${data.pagination.items}.html` + }; + } + + render(data) { + return `<h1 style="color: rgb(139 0 0)">ERROR: ${data.pagination.items}</h1> + <p>${data.err[data.pagination.items]}</p>`; + } +}; diff --git a/src/assets/assets.11tydata.js b/src/gen/gen.11tydata.js index 6704307..52b6ced 100644 --- a/src/assets/assets.11tydata.js +++ b/src/gen/gen.11tydata.js @@ -1,8 +1,8 @@ -const path = require("path") +const path = require("path"); module.exports = { eleventyExcludeFromCollections: true, eleventyComputed: { - permalink: data => data.permalink || `/${path.relative("/assets", data.page.filePathStem)}.${data.page.outputFileExtension}` + permalink: data => data.permalink || `/${path.relative("/gen", data.page.filePathStem)}.${data.page.outputFileExtension}` } -}
\ No newline at end of file +};
\ No newline at end of file diff --git a/src/gen/json.11ty.js b/src/gen/json.11ty.js new file mode 100644 index 0000000..017b69c --- /dev/null +++ b/src/gen/json.11ty.js @@ -0,0 +1,28 @@ +module.exports = class { + async data() { + return { + permalink: "/feed.json" + }; + } + + async render(data) { + return JSON.stringify({ + version: "https://jsonfeed.org/version/1.1", + title: data.metadata.title, + language: data.metadata.language, + home_page_url: data.metadata.url, + feed_url: new URL(data.page.url, data.metadata.url), + description: data.metadata.description, + author: { + name: data.metadata.author.name + }, + items: await Promise.all((data.collections.posts || []).map(async post => ({ + id: new URL(post.url, data.metadata.url), + url: new URL(post.url, data.metadata.url), + title: new URL(post.url, data.metadata.url), + content_html: await this.convertHtmlToAbsoluteUrls(post.templateContent, new URL(post.url, data.metadata.url)), + date_published: post.date.toISOString() + })).reverse()) + }); + } +};
\ No newline at end of file diff --git a/src/gen/manifest.11ty.js b/src/gen/manifest.11ty.js new file mode 100644 index 0000000..e41df83 --- /dev/null +++ b/src/gen/manifest.11ty.js @@ -0,0 +1,28 @@ +module.exports = class { + data() { + return { + permalink: "/app.webmanifest" + }; + } + + render(data) { + return JSON.stringify({ + $schema: "https://json.schemastore.org/web-manifest-combined.json", + name: data.metadata.title, + lang: data.metadata.language, + start_url: "/", + id: "/", + scope: "/", + display: "minimal-ui", + background_color: data.metadata.theme, + theme_color: data.metadata.theme, + description: data.metadata.description, + icons: [192, 512, 1024].map(size => ({ + src: `/favicon/${size}.png`, + type: "image/png", + sizes: `${size}x${size}`, + purpose: "maskable" + })) + }); + } +};
\ No newline at end of file diff --git a/src/gen/metadata.11ty.js b/src/gen/metadata.11ty.js new file mode 100644 index 0000000..87d7997 --- /dev/null +++ b/src/gen/metadata.11ty.js @@ -0,0 +1,15 @@ +module.exports = class { + data() { + return { + permalink: "/assets/metadata.js" + }; + } + + render() { + const obj = JSON.stringify({ + version: new Date().toISOString() + }); + return `const obj = '${obj}' + export default () => JSON.parse(obj);`; + } +};
\ No newline at end of file diff --git a/src/gen/robot.11ty.js b/src/gen/robot.11ty.js new file mode 100644 index 0000000..289d3b6 --- /dev/null +++ b/src/gen/robot.11ty.js @@ -0,0 +1,13 @@ +module.exports = class { + data() { + return { + permalink: "/robot.txt" + }; + } + + render(data) { + return `User-agent: * + Disallow: + Sitemap: ${new URL("/sitemap.xml",data.metadata.url)}`; + } +};
\ No newline at end of file diff --git a/src/gen/sitemap.11ty.js b/src/gen/sitemap.11ty.js new file mode 100644 index 0000000..02b285f --- /dev/null +++ b/src/gen/sitemap.11ty.js @@ -0,0 +1,17 @@ +module.exports = class { + data() { + return { + permalink: "/sitemap.xml" + }; + } + + render(data) { + return `<?xml version="1.0" encoding="utf-8"?> + <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + ${(data.collections.all || []).map(page => `<url> + <loc>${new URL(page.url, data.metadata.url)}</loc> + <lastmod>${page.date.toISOString()}</lastmod> + </url>`).join()} + </urlset>`; + } +}; diff --git a/src/index.md b/src/index.md index 01346a5..c4d3ed6 100644 --- a/src/index.md +++ b/src/index.md @@ -1,11 +1,6 @@ --- -layout: base.njk -title: Home -tags: - - navigator +layout: page +title: Welcome --- -# About This Blog - -This is my special place on the big World Wide Web - + diff --git a/src/layouts/base.11ty.js b/src/layouts/base.11ty.js new file mode 100644 index 0000000..a42b15f --- /dev/null +++ b/src/layouts/base.11ty.js @@ -0,0 +1,51 @@ +const {oneLine} = require("common-tags") + +module.exports = class { + render(data) { + return oneLine`<!DOCTYPE html> + <html lang="${data.metadata.language}"> + <head> + <meta charset="utf-8"> + <meta property="og:locale content=en_GB"> + <title property="og:title">${data.title || data.metadata.title}</title> + <meta property="og:site_name" content="${data.metadata.title}"> + <meta name="author" content="${data.metadata.author.name}"> + <meta name="description" property="og:description content="${data.description || data.metadata.description}"> + <meta property="og:type" content="website"> + ${data.keywords ? `<meta name="keywords" contents="${data.keywords.join()}>`: ""} + <meta name="generator" contents="Eleventy v${data.pkg.dependencies["@11ty/eleventy"].replace("^", "")}"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <meta name="twitter:card" content="summary"> + <meta property=og:url content="${new URL(data.page.url, data.metadata.url)}"> + <link rel="canonical" href="${new URL(data.page.url, data.metadata.url)}"> + <link rel="alternate" href="${data.metadata.feed.atom}" type="application/atom+xml" title="${data.metadata.title}"> + <link rel="alternate" href="${data.metadata.feed.json}" type="application/feed+json" title="${data.metadata.title}"> + <meta property="og:image" content="/favicon/1024.png"> + <link rel="icon" href="/favicon.ico" sizes="any"> + <link rel="icon" href="/favicon/icon.svg" type="image/svg+xml"> + <link rel="apple-touch-icon" href="/favicon/192.png"> + <link rel="manifest" href="/app.webmanifest"> + <link rel="stylesheet" href="/assets/index.css"> + <link rel="stylesheet" href="/vendor/prism.css"> + <script type="module" src="/assets/index.js" defer></script> + </head> + <body> + <header> + <nav> + <a href="#" id="nav-toogle">Sudomsg</a> + <a class="navlinks" href="/" >Home</a> + <a class="navlinks" href="/blog/">Blog</a> + <a class="navlinks" href="/about/">About</a> + </nav> + </header> + <main> + ${data.content} + </main> + <footer> + Subscribe: <a href="${data.metadata.feed.atom}">RSS</a> + <a href="${data.metadata.feed.json}">JSON</a> + </footer> + </body> + </html>`; + } +}; diff --git a/src/layouts/base.njk b/src/layouts/base.njk deleted file mode 100644 index 20b1100..0000000 --- a/src/layouts/base.njk +++ /dev/null @@ -1,46 +0,0 @@ -<!DOCTYPE html> -<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 property="og:url" content="{{ page.url | url | absoluteUrl(metadata.url) }}"/> - <link rel="canonical" href="{{ page.url | url | absoluteUrl(metadata.url) }}"/> - <link rel="alternate" href="{{ metadata.feed.atom | url }}" type="application/atom+xml" title="{{ metadata.title }}"/> - <link rel="alternate" href="{ metadata.feed.json | url }" type="application/feed+json" title="{{ metadata.title }}"/> - <link rel="icon" href="{{ '/favicon.ico' | url }}" sizes="any"/> - <link rel="icon" href="{{ '/favicon/icon.svg' | url }}" type="image/svg+xml"/> - <link rel="apple-touch-icon" href="{{ '/favicon/192.png' | url }}"/> - <link rel="manifest" href="{{ '/app.webmanifest' | url }}" crossorigin="use-credentials"/> - <meta name="theme-color" content="{{ metadat.theme }}"/> - <link as="style" href="{{ '/index.css' | url }}" rel="stylesheet"/> - {% if syntaxhighlight %}<link as="style" href="{{ '/prism.css' | url }}" rel="stylesheet"/>{% endif %} - <script type="module" src="{{ '/index.js' | url }}"></script> - </head> - <body> - <header> - <nav> - <a href="#" id="nav-toogle">Sudomsg</a> - {% for nav in navigator %} - <a class="navlinks" href="{{ nav.url | url }}">{{ nav.title }}</a> - {% endfor %} - </nav> - </header> - <main> - {{ content | safe }} - </main> - <footer> - Subscribe: <a href="{{ metadata.feed.atom | url }}" >RSS</a> - <a href="{{ metadata.feed.json | url }}" >JSON</a> - </footer> - </body> -</html>
\ No newline at end of file diff --git a/src/layouts/page.11ty.js b/src/layouts/page.11ty.js new file mode 100644 index 0000000..53b0bd8 --- /dev/null +++ b/src/layouts/page.11ty.js @@ -0,0 +1,14 @@ +module.exports = class { + data() { + return { + layout: "base", + }; + } + + render(data) { + return `<article> + <h1>${data.title}</h1> + ${data.content} + </article>`; + } +}; diff --git a/src/layouts/post.11ty.js b/src/layouts/post.11ty.js new file mode 100644 index 0000000..2cd725d --- /dev/null +++ b/src/layouts/post.11ty.js @@ -0,0 +1,17 @@ +module.exports = class { + data() { + return { + layout: "page", + tags: [ + "posts" + ] + }; + } + + render(data) { + return `<small> + <time datetime="${data.page.date.toISOString()}">${data.page.date.toDateString()}</time> - <a rel=author href="${data.metadata.author.url}">${data.metadata.author.name}</a> + </small> + ${data.content}`; + } +}; diff --git a/src/layouts/post.njk b/src/layouts/post.njk deleted file mode 100644 index f8a4aee..0000000 --- a/src/layouts/post.njk +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: base.njk -tags: - - posts ---- -<article> - <h1>{{ title }}</h1> - <small> - <time datetime="{{ date | datefmt }}">{{ date | datefmt }}</time> - <a href="{{ metadata.author.url }}">{{ metadata.author.name }}</a> - </small> - {{ content | safe }} -</article>
\ No newline at end of file diff --git a/src/post/post.11tydata.js b/src/post/post.11tydata.js index 68f56d2..6ae489a 100644 --- a/src/post/post.11tydata.js +++ b/src/post/post.11tydata.js @@ -1,8 +1,8 @@ -const slugify = require("@sindresorhus/slugify") +const slugify = require("@sindresorhus/slugify"); module.exports = () => ({ - layout: "post.njk", - eleventyComputed: { - permalink: data => `/posts/${slugify(data.title)}/` - } -})
\ No newline at end of file + layout: "post", + eleventyComputed: { + permalink: data => `/posts/${slugify(data.title)}/` + } +}); |