hmm
@@ -1,7 +1,7 @@
|
|||||||
root = true
|
root = true
|
||||||
|
|
||||||
[*]
|
[*]
|
||||||
indent_style = tab
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
|
|||||||
@@ -1,11 +1,10 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
title: "Eleventy Base Blog v8",
|
title: "The Ramblings of TerribleDev",
|
||||||
url: "https://example.com/",
|
url: "https://blog.terrible.dev/",
|
||||||
language: "en",
|
language: "en",
|
||||||
description: "I am writing about my experiences as a naval navel-gazer.",
|
description: "I am writing about my experiences as a naval navel-gazer.",
|
||||||
author: {
|
author: {
|
||||||
name: "Your Name Here",
|
name: "Tommy Parnell",
|
||||||
email: "youremailaddress@example.com",
|
url: "https://blog.terrible.dev/about/"
|
||||||
url: "https://example.com/about-me/"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
<link rel="manifest" href="/manifest.json">
|
<link rel="manifest" href="/manifest.json">
|
||||||
<meta name="author" content="Tommy "TerribleDev" Parnell" />
|
<meta name="author" content="Tommy "TerribleDev" Parnell" />
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/favicon.ico" />
|
||||||
{%- css %}{% include "public/css/site.css" %}{% endcss %}
|
{%- css %}{% include "wwwroot/css/site.css" %}{% endcss %}
|
||||||
{%- css %}{% include "public/css/site.mobile.css" %}{% endcss %}
|
{%- css %}{% include "wwwroot/css/site.mobile.css" %}{% endcss %}
|
||||||
{%- css %}{% include "public/css/site.desktop.css" %}{% endcss %}
|
{%- css %}{% include "wwwroot/css/site.desktop.css" %}{% endcss %}
|
||||||
{#- Render the CSS bundle using Inlined CSS (for the fastest site performance in production) #}
|
{#- Render the CSS bundle using Inlined CSS (for the fastest site performance in production) #}
|
||||||
<style>{% getBundle "css" %}</style>
|
<style>{% getBundle "css" %}</style>
|
||||||
{% block head %}
|
{% block head %}
|
||||||
@@ -33,6 +33,7 @@
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="/js/swi.js"></script>
|
||||||
{% block scripts %}
|
{% block scripts %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
{#- Add an arbitrary string to the bundle #}
|
{#- Add an arbitrary string to the bundle #}
|
||||||
{%- css %}* { box-sizing: border-box; }{% endcss %}
|
{%- css %}* { box-sizing: border-box; }{% endcss %}
|
||||||
{#- Add the contents of a file to the bundle #}
|
{#- Add the contents of a file to the bundle #}
|
||||||
{%- css %}{% include "public/css/index.css" %}{% endcss %}
|
{%- css %}{% include "wwwroot/css/index.css" %}{% endcss %}
|
||||||
{#- Or add from node_modules #}
|
{#- Or add from node_modules #}
|
||||||
{# {%- css %}{% include "node_modules/prismjs/themes/prism-okaidia.css" %}{% endcss %} #}
|
{# {%- css %}{% include "node_modules/prismjs/themes/prism-okaidia.css" %}{% endcss %} #}
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
layout: layouts/base.njk
|
|
||||||
---
|
|
||||||
<!-- Delete this message, it will also remove the component CSS from the bundle -->
|
|
||||||
{%- css %}{% include "public/css/message-box.css" %}{% endcss %}
|
|
||||||
<div class="message-box">
|
|
||||||
<ol>
|
|
||||||
<li>Edit the <code>_data/metadata.js</code> with your blog’s information.</li>
|
|
||||||
<li>(Optional) Edit <code>eleventy.config.js</code> with your <a href="https://www.11ty.dev/docs/config/">configuration preferences</a>.</li>
|
|
||||||
<li>Delete this message from <code>_includes/layouts/home.njk</code>.</li>
|
|
||||||
</ol>
|
|
||||||
<p><em>This is an <a href="https://www.11ty.dev/">Eleventy project</a> created from the <a href="https://github.com/11ty/eleventy-base-blog"><code>eleventy-base-blog</code> repo</a>.</em></p>
|
|
||||||
</div>
|
|
||||||
<!-- Stop deleting -->
|
|
||||||
|
|
||||||
{{ content | safe }}
|
|
||||||
@@ -1,28 +1,36 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
---
|
---
|
||||||
{# Only include the syntax highlighter CSS on blog posts #}
|
|
||||||
{%- css %}{% include "node_modules/prismjs/themes/prism-okaidia.css" %}{% endcss %}
|
|
||||||
{%- css %}{% include "public/css/prism-diff.css" %}{%- endcss %}
|
|
||||||
<h1>{{ title }}</h1>
|
|
||||||
|
|
||||||
<ul class="post-metadata">
|
{%- set summerizedPost = content | summerizePost %}
|
||||||
<li><time datetime="{{ page.date | htmlDateString }}">{{ page.date | readableDate }}</time></li>
|
{%- block head %}
|
||||||
|
<meta name="description" content="{{ summerizedPost }}" />
|
||||||
|
<meta property="og:type" content="blog">
|
||||||
|
<meta property="og:title" content="{{ title }}">
|
||||||
|
<meta property="og:url" content="{{ url }}">
|
||||||
|
<meta property="og:site_name" content="{{ metadata.title }}">
|
||||||
|
<meta property="og:description" content="{{ content | summerizePost | nohtml }}">
|
||||||
|
<meta property="og:updated_time" content="{{ date | htmlDateString}}">
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:title" content="{{ title }}">
|
||||||
|
<meta name="twitter:description" content="{{ content | summerizePost | nohtml }}">
|
||||||
|
<meta name="twitter:site" content="@@TerribleDev">
|
||||||
|
<meta name="twitter:creator" content="@@TerribleDev">
|
||||||
|
<link rel="canonical" href="{{ url }}" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
<article itemprop="blogPost">
|
||||||
|
<h1 itemprop="headline" class="headline">{{ title }}</h1>
|
||||||
|
<time class="headlineSubtext" itemprop="datePublished" datetime="{{ date | htmlDateString }}">{{ date | readableDate}}</time>
|
||||||
|
{{ content | safe}}
|
||||||
|
{%- if tags | filterTagList %}
|
||||||
|
<div>
|
||||||
|
<span>Tagged In:</span><br />
|
||||||
{%- for tag in tags | filterTagList %}
|
{%- for tag in tags | filterTagList %}
|
||||||
{%- set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
<a href="/tag/{{ tag | slugify }}" class="btn block">{{ tag }}</a>
|
||||||
<li><a href="{{ tagUrl }}" class="post-tag">{{ tag }}</a>{%- if not loop.last %}, {% endif %}</li>
|
|
||||||
{%- endfor %}
|
{%- endfor %}
|
||||||
</ul>
|
</div>
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
{{ content | safe }}
|
</article>
|
||||||
|
|
||||||
{%- if collections.posts %}
|
|
||||||
{%- set previousPost = collections.posts | getPreviousCollectionItem %}
|
|
||||||
{%- set nextPost = collections.posts | getNextCollectionItem %}
|
|
||||||
{%- if nextPost or previousPost %}
|
|
||||||
<ul class="links-nextprev">
|
|
||||||
{%- if previousPost %}<li>Previous: <a href="{{ previousPost.url }}">{{ previousPost.data.title }}</a></li>{% endif %}
|
|
||||||
{%- if nextPost %}<li>Next: <a href="{{ nextPost.url }}">{{ nextPost.data.title }}</a></li>{% endif %}
|
|
||||||
</ul>
|
|
||||||
{%- endif %}
|
|
||||||
{%- endif %}
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<article class="btmRule">
|
<article class="btmRule">
|
||||||
<h3 itemprop="headline" class="headline"><a href="{{ post.url }}" class="link-unstyled">{{ post.data.title }}</a></h3>
|
<h3 itemprop="headline" class="headline"><a href="{{ post.url }}" class="link-unstyled">{{ post.data.title }}</a></h3>
|
||||||
<time class="headlineSubtext" itemprop="datePublished" datetime="{{ page.date | htmlDateString }}">{{ page.date | readableDate("D") }}</time>
|
<time class="headlineSubtext" itemprop="datePublished" datetime="{{ post.date | htmlDateString }}">{{ post.date | readableDate }}</time>
|
||||||
<div itemprop="articleBody">
|
<div itemprop="articleBody">
|
||||||
{{ post.content | summerizePost | safe }}
|
{{ post.content | summerizePost | safe }}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{%- css %}.postlist { counter-reset: start-from {{ (postslistCounter or postslist.length) + 1 }} }{% endcss %}
|
|
||||||
<ol reversed class="postlist">
|
<ol reversed class="postlist">
|
||||||
{% for post in postslist | reverse %}
|
{% for post in postslist %}
|
||||||
<li class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
<li class="postlist-item{% if post.url == url %} postlist-item-active{% endif %}">
|
||||||
<a href="{{ post.url }}" class="postlist-link">{% if post.data.title %}{{ post.data.title }}{% else %}<code>{{ post.url }}</code>{% endif %}</a>
|
<a href="{{ post.url }}" class="postlist-link">{% if post.data.title %}{{ post.data.title }}{% else %}<code>{{ post.url }}</code>{% endif %}</a>
|
||||||
<time class="postlist-date" datetime="{{ post.date | htmlDateString }}">{{ post.date | readableDate("LLLL yyyy") }}</time>
|
<time class="postlist-date" datetime="{{ post.date | htmlDateString }}">{{ post.date | readableDate("LLLL yyyy") }}</time>
|
||||||
|
|||||||
11
_includes/stockmeta.njk
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<meta name="description" content="My name is Tommy Parnell. I usually go by TerribleDev on the internets. These are just some of my writings and rants about the software space." />
|
||||||
|
<meta property="og:type" content="blog">
|
||||||
|
<meta property="og:title" content="{{ metadata.title }}">
|
||||||
|
<meta property="og:url" content="https://blog.terrible.dev/">
|
||||||
|
<meta property="og:site_name" content="{{ metadata.title }}">
|
||||||
|
<meta property="og:description" content="My name is Tommy Parnell. I usually go by TerribleDev on the internets. These are just some of my writings and rants about the software space.">
|
||||||
|
<meta name="twitter:card" content="summary">
|
||||||
|
<meta name="twitter:title" content="{{ metadata.title }}">
|
||||||
|
<meta name="twitter:description" content="My name is Tommy Parnell. I usually go by TerribleDev on the internets. These are just some of my writings and rants about the software space.">
|
||||||
|
<meta name="twitter:creator" content="@@TerribleDev">
|
||||||
|
<meta property="og:image" content="https://www.gravatar.com/avatar/333e3cea32cd17ff2007d131df336061?s=640" />
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/home.njk
|
layout: layouts/base.njk
|
||||||
permalink: 404.html
|
permalink: 404.html
|
||||||
eleventyExcludeFromCollections: true
|
eleventyExcludeFromCollections: true
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/home.njk
|
layout: layouts/base.njk
|
||||||
eleventyNavigation:
|
eleventyNavigation:
|
||||||
key: Archive
|
key: Archive
|
||||||
order: 2
|
order: 2
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
---
|
---
|
||||||
# Metadata comes from _data/metadata.js
|
# Metadata comes from _data/metadata.js
|
||||||
permalink: /feed/feed.xml
|
permalink: /rss.xml
|
||||||
---
|
---
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="{{ metadata.language }}">
|
<feed xmlns="http://www.w3.org/2005/Atom" xml:base="{{ metadata.language }}">
|
||||||
@@ -12,7 +12,6 @@ permalink: /feed/feed.xml
|
|||||||
<id>{{ metadata.url }}</id>
|
<id>{{ metadata.url }}</id>
|
||||||
<author>
|
<author>
|
||||||
<name>{{ metadata.author.name }}</name>
|
<name>{{ metadata.author.name }}</name>
|
||||||
<email>{{ metadata.author.email }}</email>
|
|
||||||
</author>
|
</author>
|
||||||
{%- for post in collections.posts | reverse %}
|
{%- for post in collections.posts | reverse %}
|
||||||
{% set absolutePostUrl %}{{ post.url | htmlBaseUrl(metadata.url) }}{% endset %}
|
{% set absolutePostUrl %}{{ post.url | htmlBaseUrl(metadata.url) }}{% endset %}
|
||||||
|
|||||||
@@ -1,22 +1,25 @@
|
|||||||
---
|
---
|
||||||
layout: layouts/base.njk
|
layout: layouts/base.njk
|
||||||
eleventyNavigation:
|
pagination:
|
||||||
key: Home Page
|
data: collections.posts
|
||||||
order: 1
|
reverse: true
|
||||||
numberOfLatestPostsToShow: 3
|
size: 10
|
||||||
|
permalink: "/{{ pagination.pageNumber | getPermalinkForHomePage }}"
|
||||||
---
|
---
|
||||||
{% set postslist = collections.posts %}
|
{% block head %}
|
||||||
{% for post in postslist | reverse %}
|
{%- include 'stockmeta.njk' %}
|
||||||
|
<link rel="canonical" href="https://blog.terrible.dev/">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% for post in pagination.items %}
|
||||||
{% include "postSummary.njk" %}
|
{% include "postSummary.njk" %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
<div class="bottomNavButtons">
|
<div class="bottomNavButtons">
|
||||||
<a href="{{ previous }}" class="btn">← Previous Page</a>
|
{% if pagination.href.previous %}
|
||||||
|
<a href="{{ pagination.href.previous }}" class="btn">← Previous Page</a>
|
||||||
|
{% endif %}
|
||||||
<div class="spacer"></div>
|
<div class="spacer"></div>
|
||||||
<a href="{{ next }}" class="btn">Next Page →</a>
|
{% if pagination.href.next %}
|
||||||
|
<a href="{{ pagination.href.next }}" class="btn">Next Page →</a>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{# LD data #}
|
|
||||||
|
|
||||||
{% block head %}
|
|
||||||
<link rel="canonical" href="https://blog.terrible.dev/">
|
|
||||||
{% endblock %}
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ if (navigator && navigator.serviceWorker && navigator.serviceWorker.controller)
|
|||||||
} else if (navigator && navigator.serviceWorker) {
|
} else if (navigator && navigator.serviceWorker) {
|
||||||
|
|
||||||
//Register the ServiceWorker
|
//Register the ServiceWorker
|
||||||
navigator.serviceWorker.register('/sw.min.js', {
|
navigator.serviceWorker.register('/sw.js', {
|
||||||
scope: '/'
|
scope: '/'
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
console.log('SW');
|
console.log('SW');
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
---
|
---
|
||||||
permalink: /tags/
|
permalink: /all-tags/
|
||||||
layout: layouts/home.njk
|
layout: layouts/base.njk
|
||||||
---
|
---
|
||||||
<h1>Tags</h1>
|
<h1>Tags</h1>
|
||||||
|
|
||||||
|
{% block head %}
|
||||||
|
{%- include 'stockmeta.njk' %}
|
||||||
|
<link rel="canonical" href="https://blog.terrible.dev/all-tags/" />
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
{% for tag in collections.all | getAllTags | filterTagList %}
|
{% for tag in collections.all | getAllTags | filterTagList %}
|
||||||
{% set tagUrl %}/tags/{{ tag | slugify }}/{% endset %}
|
<a href="/tags/{{ tag | slugify}}" class="btn block">{{ tag }}</a>
|
||||||
<li><a href="{{ tagUrl }}" class="post-tag">{{ tag }}</a></li>
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|||||||
@@ -9,14 +9,14 @@ pagination:
|
|||||||
- posts
|
- posts
|
||||||
- tagList
|
- tagList
|
||||||
addAllPagesToCollections: true
|
addAllPagesToCollections: true
|
||||||
layout: layouts/home.njk
|
layout: layouts/base.njk
|
||||||
eleventyComputed:
|
eleventyComputed:
|
||||||
title: Tagged “{{ tag }}”
|
title: Tagged “{{ tag }}”
|
||||||
permalink: /tag/{{ tag | slugify }}/
|
permalink: /tags/{{ tag | slugify }}/
|
||||||
---
|
---
|
||||||
<h1>Tagged “{{ tag }}”</h1>
|
|
||||||
|
|
||||||
{% set postslist = collections[ tag ] %}
|
{% set postslist = collections[ tag ] %}
|
||||||
{% include "postslist.njk" %}
|
{% for post in postslist %}
|
||||||
|
{% include "postSummary.njk" %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
<p>See <a href="/tags/">all tags</a>.</p>
|
<p>See <a href="/all-tags/">all tags</a>.</p>
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ module.exports = function(eleventyConfig) {
|
|||||||
// Copy the contents of the `public` folder to the output folder
|
// Copy the contents of the `public` folder to the output folder
|
||||||
// For example, `./public/css/` ends up in `_site/css/`
|
// For example, `./public/css/` ends up in `_site/css/`
|
||||||
eleventyConfig.addPassthroughCopy({
|
eleventyConfig.addPassthroughCopy({
|
||||||
"./public/": "/",
|
"./wwwroot/": "/",
|
||||||
"./node_modules/prismjs/themes/prism-okaidia.css": "/css/prism-okaidia.css"
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Run Eleventy when these files change:
|
// Run Eleventy when these files change:
|
||||||
@@ -67,12 +66,23 @@ module.exports = function(eleventyConfig) {
|
|||||||
|
|
||||||
eleventyConfig.addFilter("summerizePost", post => {
|
eleventyConfig.addFilter("summerizePost", post => {
|
||||||
// get content
|
// get content
|
||||||
return post.split('<!-- more -->')[0];
|
const splitted = post.split('<!-- more -->');
|
||||||
|
if(splitted.length > 1) {
|
||||||
|
return splitted[0];
|
||||||
|
}
|
||||||
|
// return the first paragraph
|
||||||
|
return post.split('\n')[0];
|
||||||
});
|
});
|
||||||
|
|
||||||
eleventyConfig.addFilter("getPermalinkForHomePage", post => {
|
eleventyConfig.addFilter("nohtml", content => {
|
||||||
|
// remove all html tags
|
||||||
|
return content.replace(/(<([^>]+)>)/gi, "");
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
eleventyConfig.addFilter("getPermalinkForHomePage", pageNumber => {
|
||||||
// get content
|
// get content
|
||||||
return post.split('<!-- more -->')[0];
|
return pageNumber === 0 ? '/' : '/page/' + (pageNumber + 1);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Return all the tags used in a collection
|
// Return all the tags used in a collection
|
||||||
@@ -90,18 +100,18 @@ module.exports = function(eleventyConfig) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Customize Markdown library settings:
|
// Customize Markdown library settings:
|
||||||
eleventyConfig.amendLibrary("md", mdLib => {
|
// eleventyConfig.amendLibrary("md", mdLib => {
|
||||||
mdLib.use(markdownItAnchor, {
|
// mdLib.use(markdownItAnchor, {
|
||||||
permalink: markdownItAnchor.permalink.ariaHidden({
|
// permalink: markdownItAnchor.permalink.ariaHidden({
|
||||||
placement: "after",
|
// placement: "after",
|
||||||
class: "header-anchor",
|
// class: "header-anchor",
|
||||||
symbol: "#",
|
// symbol: "#",
|
||||||
ariaHidden: false,
|
// ariaHidden: false,
|
||||||
}),
|
// }),
|
||||||
level: [1,2,3,4],
|
// level: [1,2,3,4],
|
||||||
slugify: eleventyConfig.getFilter("slugify")
|
// slugify: eleventyConfig.getFilter("slugify")
|
||||||
});
|
// });
|
||||||
});
|
// });
|
||||||
|
|
||||||
// Features to make your build faster (when you need them)
|
// Features to make your build faster (when you need them)
|
||||||
|
|
||||||
@@ -126,7 +136,7 @@ module.exports = function(eleventyConfig) {
|
|||||||
],
|
],
|
||||||
|
|
||||||
// Pre-process *.md files with: (default: `liquid`)
|
// Pre-process *.md files with: (default: `liquid`)
|
||||||
markdownTemplateEngine: 'md',
|
markdownTemplateEngine: false,
|
||||||
|
|
||||||
// Pre-process *.html files with: (default: `liquid`)
|
// Pre-process *.html files with: (default: `liquid`)
|
||||||
htmlTemplateEngine: "njk",
|
htmlTemplateEngine: "njk",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "eleventy-base-blog",
|
"name": "terribledev-blog",
|
||||||
"version": "8.0.0",
|
"version": "8.0.0",
|
||||||
"description": "A starter repository for a blog web site using the Eleventy site generator.",
|
"description": "A starter repository for a blog web site using the Eleventy site generator.",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,270 +0,0 @@
|
|||||||
/* Defaults */
|
|
||||||
:root {
|
|
||||||
--font-family: -apple-system, system-ui, sans-serif;
|
|
||||||
--font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Theme colors */
|
|
||||||
:root {
|
|
||||||
--color-gray-20: #e0e0e0;
|
|
||||||
--color-gray-50: #C0C0C0;
|
|
||||||
--color-gray-90: #333;
|
|
||||||
|
|
||||||
--background-color: #fff;
|
|
||||||
|
|
||||||
--text-color: var(--color-gray-90);
|
|
||||||
--text-color-link: #082840;
|
|
||||||
--text-color-link-active: #5f2b48;
|
|
||||||
--text-color-link-visited: #17050F;
|
|
||||||
|
|
||||||
--syntax-tab-size: 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
:root {
|
|
||||||
--color-gray-20: #e0e0e0;
|
|
||||||
--color-gray-50: #C0C0C0;
|
|
||||||
--color-gray-90: #dad8d8;
|
|
||||||
|
|
||||||
/* --text-color is assigned to --color-gray-_ above */
|
|
||||||
--text-color-link: #1493fb;
|
|
||||||
--text-color-link-active: #6969f7;
|
|
||||||
--text-color-link-visited: #a6a6f8;
|
|
||||||
|
|
||||||
--background-color: #15202b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Global stylesheet */
|
|
||||||
* {
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
html,
|
|
||||||
body {
|
|
||||||
padding: 0;
|
|
||||||
margin: 0 auto;
|
|
||||||
font-family: var(--font-family);
|
|
||||||
color: var(--text-color);
|
|
||||||
background-color: var(--background-color);
|
|
||||||
}
|
|
||||||
html {
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
body {
|
|
||||||
max-width: 40em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* https://www.a11yproject.com/posts/how-to-hide-content/ */
|
|
||||||
.visually-hidden {
|
|
||||||
clip: rect(0 0 0 0);
|
|
||||||
clip-path: inset(50%);
|
|
||||||
height: 1px;
|
|
||||||
overflow: hidden;
|
|
||||||
position: absolute;
|
|
||||||
white-space: nowrap;
|
|
||||||
width: 1px;
|
|
||||||
}
|
|
||||||
|
|
||||||
p:last-child {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
p {
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
li {
|
|
||||||
line-height: 1.5;
|
|
||||||
}
|
|
||||||
|
|
||||||
a[href] {
|
|
||||||
color: var(--text-color-link);
|
|
||||||
}
|
|
||||||
a[href]:visited {
|
|
||||||
color: var(--text-color-link-visited);
|
|
||||||
}
|
|
||||||
a[href]:hover,
|
|
||||||
a[href]:active {
|
|
||||||
color: var(--text-color-link-active);
|
|
||||||
}
|
|
||||||
|
|
||||||
main {
|
|
||||||
padding: 1rem;
|
|
||||||
}
|
|
||||||
main :first-child {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
header {
|
|
||||||
border-bottom: 1px dashed var(--color-gray-20);
|
|
||||||
}
|
|
||||||
header:after {
|
|
||||||
content: "";
|
|
||||||
display: table;
|
|
||||||
clear: both;
|
|
||||||
}
|
|
||||||
|
|
||||||
.links-nextprev {
|
|
||||||
list-style: none;
|
|
||||||
border-top: 1px dashed var(--color-gray-20);
|
|
||||||
padding: 1em 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
table {
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
table td,
|
|
||||||
table th {
|
|
||||||
padding-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
pre,
|
|
||||||
code {
|
|
||||||
font-family: var(--font-family-monospace);
|
|
||||||
}
|
|
||||||
pre:not([class*="language-"]) {
|
|
||||||
margin: .5em 0;
|
|
||||||
line-height: 1.375; /* 22px /16 */
|
|
||||||
-moz-tab-size: var(--syntax-tab-size);
|
|
||||||
-o-tab-size: var(--syntax-tab-size);
|
|
||||||
tab-size: var(--syntax-tab-size);
|
|
||||||
-webkit-hyphens: none;
|
|
||||||
-ms-hyphens: none;
|
|
||||||
hyphens: none;
|
|
||||||
direction: ltr;
|
|
||||||
text-align: left;
|
|
||||||
white-space: pre;
|
|
||||||
word-spacing: normal;
|
|
||||||
word-break: normal;
|
|
||||||
}
|
|
||||||
code {
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Header */
|
|
||||||
header {
|
|
||||||
display: flex;
|
|
||||||
gap: 1em .5em;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: center;
|
|
||||||
padding: 1em;
|
|
||||||
}
|
|
||||||
.home-link {
|
|
||||||
font-size: 1em; /* 16px /16 */
|
|
||||||
font-weight: 700;
|
|
||||||
margin-right: 2em;
|
|
||||||
}
|
|
||||||
.home-link:link:not(:hover) {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Nav */
|
|
||||||
.nav {
|
|
||||||
display: flex;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
list-style: none;
|
|
||||||
}
|
|
||||||
.nav-item {
|
|
||||||
display: inline-block;
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
.nav-item a[href]:not(:hover) {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.nav a[href][aria-current="page"] {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Posts list */
|
|
||||||
.postlist {
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
padding-left: 1.5rem;
|
|
||||||
}
|
|
||||||
.postlist-item {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
align-items: baseline;
|
|
||||||
counter-increment: start-from -1;
|
|
||||||
margin-bottom: 1em;
|
|
||||||
}
|
|
||||||
.postlist-item:before {
|
|
||||||
display: inline-block;
|
|
||||||
pointer-events: none;
|
|
||||||
content: "" counter(start-from, decimal-leading-zero) ". ";
|
|
||||||
line-height: 100%;
|
|
||||||
text-align: right;
|
|
||||||
margin-left: -1.5rem;
|
|
||||||
}
|
|
||||||
.postlist-date,
|
|
||||||
.postlist-item:before {
|
|
||||||
font-size: 0.8125em; /* 13px /16 */
|
|
||||||
color: var(--color-gray-90);
|
|
||||||
}
|
|
||||||
.postlist-date {
|
|
||||||
word-spacing: -0.5px;
|
|
||||||
}
|
|
||||||
.postlist-link {
|
|
||||||
font-size: 1.1875em; /* 19px /16 */
|
|
||||||
font-weight: 700;
|
|
||||||
flex-basis: calc(100% - 1.5rem);
|
|
||||||
padding-left: .25em;
|
|
||||||
padding-right: .5em;
|
|
||||||
text-underline-position: from-font;
|
|
||||||
text-underline-offset: 0;
|
|
||||||
text-decoration-thickness: 1px;
|
|
||||||
}
|
|
||||||
.postlist-item-active .postlist-link {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tags */
|
|
||||||
.post-tag {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
text-transform: capitalize;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
.postlist-item > .post-tag {
|
|
||||||
align-self: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Tags list */
|
|
||||||
.post-metadata {
|
|
||||||
display: inline-flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
gap: .5em;
|
|
||||||
list-style: none;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
}
|
|
||||||
.post-metadata time {
|
|
||||||
margin-right: 1em;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Direct Links / Markdown Headers */
|
|
||||||
.header-anchor {
|
|
||||||
text-decoration: none;
|
|
||||||
font-style: normal;
|
|
||||||
font-size: 1em;
|
|
||||||
margin-left: .1em;
|
|
||||||
}
|
|
||||||
a[href].header-anchor,
|
|
||||||
a[href].header-anchor:visited {
|
|
||||||
color: transparent;
|
|
||||||
}
|
|
||||||
a[href].header-anchor:focus,
|
|
||||||
a[href].header-anchor:hover {
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a[href].header-anchor:focus,
|
|
||||||
:hover > a[href].header-anchor {
|
|
||||||
color: #aaa;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 + .header-anchor {
|
|
||||||
font-size: 1.5em;
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
/* Message Box */
|
|
||||||
.message-box {
|
|
||||||
--color-message-box: #ffc;
|
|
||||||
|
|
||||||
display: block;
|
|
||||||
background-color: var(--color-message-box);
|
|
||||||
color: var(--color-gray-90);
|
|
||||||
padding: 1em 0.625em; /* 16px 10px /16 */
|
|
||||||
}
|
|
||||||
.message-box ol {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
|
||||||
.message-box {
|
|
||||||
--color-message-box: #082840;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/*
|
|
||||||
* New diff- syntax
|
|
||||||
*/
|
|
||||||
|
|
||||||
pre[class*="language-diff-"] {
|
|
||||||
--eleventy-code-padding: 1.25em;
|
|
||||||
padding-left: var(--eleventy-code-padding);
|
|
||||||
padding-right: var(--eleventy-code-padding);
|
|
||||||
}
|
|
||||||
.token.deleted {
|
|
||||||
background-color: hsl(0, 51%, 37%);
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
.token.inserted {
|
|
||||||
background-color: hsl(126, 31%, 39%);
|
|
||||||
color: inherit;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make the + and - characters unselectable for copy/paste */
|
|
||||||
.token.prefix.unchanged,
|
|
||||||
.token.prefix.inserted,
|
|
||||||
.token.prefix.deleted {
|
|
||||||
-webkit-user-select: none;
|
|
||||||
user-select: none;
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
padding-top: 2px;
|
|
||||||
padding-bottom: 2px;
|
|
||||||
}
|
|
||||||
.token.prefix.inserted,
|
|
||||||
.token.prefix.deleted {
|
|
||||||
width: var(--eleventy-code-padding);
|
|
||||||
background-color: rgba(0,0,0,.2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Optional: full-width background color */
|
|
||||||
.token.inserted:not(.prefix),
|
|
||||||
.token.deleted:not(.prefix) {
|
|
||||||
display: block;
|
|
||||||
margin-left: calc(-1 * var(--eleventy-code-padding));
|
|
||||||
margin-right: calc(-1 * var(--eleventy-code-padding));
|
|
||||||
text-decoration: none; /* override del, ins, mark defaults */
|
|
||||||
color: inherit; /* override del, ins, mark defaults */
|
|
||||||
}
|
|
||||||
BIN
wwwroot/Banner.jpg
Normal file
|
After Width: | Height: | Size: 868 KiB |
BIN
wwwroot/Banner.jpg.webp
Normal file
|
After Width: | Height: | Size: 300 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 215 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 215 KiB |
|
Before Width: | Height: | Size: 152 KiB After Width: | Height: | Size: 152 KiB |
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 86 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 75 KiB After Width: | Height: | Size: 75 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 6.0 KiB After Width: | Height: | Size: 6.0 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 58 KiB After Width: | Height: | Size: 58 KiB |
|
Before Width: | Height: | Size: 7.0 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 64 KiB |
|
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 344 KiB After Width: | Height: | Size: 344 KiB |
|
Before Width: | Height: | Size: 195 KiB After Width: | Height: | Size: 195 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 79 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 45 KiB After Width: | Height: | Size: 45 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.9 KiB After Width: | Height: | Size: 8.9 KiB |
|
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 67 KiB After Width: | Height: | Size: 67 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 5.5 MiB After Width: | Height: | Size: 5.5 MiB |