major overhaul layout in order to fit in mastodon notes, PESOS-style!

This commit is contained in:
Wouter Groeneveld 2021-03-03 15:45:52 +01:00
parent 715ab1e683
commit 4567dea793
30 changed files with 1027 additions and 141 deletions

View File

@ -48,7 +48,8 @@ function makeIndex(posts) {
async function run() {
const posts = await loadPostsWithFrontMatter(`${__dirname}/content/post`);
const index = makeIndex(posts);
const notes = await loadPostsWithFrontMatter(`${__dirname}/content/notes`);
const index = makeIndex(posts.concat(notes));
console.log(JSON.stringify(index));
}

View File

@ -20,11 +20,11 @@ enableGitInfo = true
# disabled to get rid of cloudflare cookies
MathJax = false
description = "Freshly baked thought"
description = "Freshly baked thoughts"
accent = "#018661"
accent2 = "purple"
showBorder = true
copyright = "<a href='/no-copyright-no-tracking'>No &copy; and no tracking</a> - sharing is caring. <svg class='icon icon-small' width='16' height='16'><use xlink:href='#bulb'></use></svg> <a href='/'>Brain Baking</a>. <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg><a href='/index.xml'>RSS Feed</a>."
copyright = "<a href='/no-copyright-no-tracking'>No &copy; and no tracking</a> - sharing is caring. <svg class='icon icon-small' width='16' height='16'><use xlink:href='#bulb'></use></svg> <a href='/'>Brain Baking</a>. <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg><a href='/post/index.xml'>RSS Feed</a>."
[Author]
name = "Wouter Groeneveld"
@ -68,11 +68,17 @@ enableGitInfo = true
url = "/post"
weight = 2
[[menu.main]]
name = "Notes"
pre = "<svg width='24' height='24'><use xlink:href='#tech'></use></svg> "
url = "/notes"
weight = 3
[[menu.main]]
name = "Archives"
pre = "<svg width='24' height='24'><use xlink:href='#tag'></use></svg> "
url = "/archives"
weight = 3
weight = 4
[[menu.mainright]]
name = "About Me"

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/eceb0da5-f424-4acb-b5ae-65a820d8b1eb"
title: "@darth_mall Interesting, did you use Bridgy to convert Mastodon posts into webmentions? Many site..."
date: 2021-02-01
---
<span class="h-card"><a class="u-url mention" data-user="A4jKa9Q2dIr3nGJlJY" href="https://vis.social/@darth_mall" rel="ugc">@<span>darth_mall</span></a></span> Interesting, did you use Bridgy to convert Mastodon posts into webmentions? Many sites seem to use it, but it of course only scans your own Twitter/Masto feed. IMO, this renders it a bit useless unless you&#39;re very popular (😰). Anyone you don&#39;t know could talk about a post on your site, but it won&#39;t be received since these systems do not push webmentions themselves. Furthermore, I do not see anyone manually posting a link at the end of a post - that kind of defeats the purpose. <br>That said, is it working for you?

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/1bab58d4-5bf3-472e-b268-ae2dd47dd24d"
title: "Just saying hi @kogakure 👋 getting my feet wet with decentralized “tooting” (although I opted for..."
date: 2021-02-06
---
<p>Just saying hi <span class="h-card"><a class="u-url mention" data-user="A4fMTkA13Luczi3SCW" href="https://mastodon.social/@kogakure" rel="ugc">@<span>kogakure</span></a></span> 👋 getting my feet wet with decentralized “tooting” (although I opted for Pleroma, less drama to install in my own VPS it seemed)</p>

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/0707fd54-185d-4ee7-9204-be370d57663c"
title: "@rubenerd just installed my own Pleroma server to say hi! Big fan of your micro-blog for ages here."
date: 2021-02-06
---
<p><span class="h-card"><a class="u-url mention" data-user="A4fIbZoZ0HNJPHV4Vs" href="https://bsd.network/@rubenerd" rel="ugc">@<span>rubenerd</span></a></span> just installed my own Pleroma server to say hi! Big fan of your micro-blog for ages here.</p>

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/7b4e207f-47ed-4d2a-913e-9de73a1075c2"
title: "Hi @laura thanks to your https://laurakalbag.com/what-is-mastodon-and-why-should-i-use-it/ I dipp..."
date: 2021-02-06
---
<p>Hi <span class="h-card"><a class="u-url mention" data-user="A4fIvtjUepzOyQooXg" href="https://mastodon.laurakalbag.com/@laura" rel="ugc">@<span>laura</span></a></span> thanks to your <a href="https://laurakalbag.com/what-is-mastodon-and-why-should-i-use-it">https://laurakalbag.com/what-is-mastodon-and-why-should-i-use-it</a>/ I dipped my toes into decentralized social networks 😅 FYI The “Whats wrong with Twitter” link on there is broken. Loving what you do so far, you made me reconsider accessibility and privacy features on my own site!</p>

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/bd940e2d-12b0-4649-b198-053a49f81d34"
title: "@laura It did more than helping! I&#39;m slowly but surely taking back my data. Started with Ever..."
date: 2021-02-06
---
<span class="h-card"><a class="u-url mention" data-user="A4fIvtjUepzOyQooXg" href="https://mastodon.laurakalbag.com/@laura" rel="ugc">@<span>laura</span></a></span> It did more than helping! I&#39;m slowly but surely taking back my data. Started with Evernote -&gt; DEVONThink, got to Gmail -&gt; ProtonMail, and now to Android -&gt; LineageOS. All your fault 😂

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/f5fd9f27-460c-4984-aaf4-843788b94419"
title: "Has anyone else noticed posted links on Twitter get re-encoded into t.co URLs in order to gather ..."
date: 2021-02-07
---
Has anyone else noticed posted links on Twitter get re-encoded into <a href="http://t.co" rel="ugc">t.co</a> URLs in order to gather even more &#39;insight&#39; data? That said, I&#39;m having trouble finding anyone on the Fediverse... Any hints?

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/0a54f23f-d362-4b12-9d67-3f8a4945d5ae"
title: "Trying to wrap my mind around WebMentions and how I could implement them without resorting to a t..."
date: 2021-02-07
---
Trying to wrap my mind around WebMentions and how I could implement them without resorting to a third-party provider... <a href="https://sebastiandedeyne.com/adding-webmentions-to-my-blog/" rel="ugc">https://sebastiandedeyne.com/adding-webmentions-to-my-blog/</a> I wonder if a link such as this one would receive a webmention/pingback if I just write about it using Hugo.

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/fe700d1f-bc60-4707-bed1-45f9dfdf507c"
title: "Okay, so sending involves Webmention.app and IFTTT to poll my RSS feed (According to https://www...."
date: 2021-02-07
---
Okay, so sending involves <a href="http://Webmention.app" rel="ugc">Webmention.app</a> and IFTTT to poll my RSS feed (According to <a href="https://www.jayeless.net/2021/02/integrating-webmentions-into-hugo.html" rel="ugc">https://www.jayeless.net/2021/02/integrating-webmentions-into-hugo.html</a>). Holy shit. Is it even worth it...

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/77a3ecfb-47e1-4d7a-a24a-8b779d80a8ac"
title: "I pulled the Google plug and installed LineageOS: https://brainbaking.com/post/2021/03/getting-ri..."
date: 2021-03-02
---
I pulled the Google plug and installed LineageOS: <a href="https://brainbaking.com/post/2021/03/getting-rid-of-tracking-using-lineageos/" rel="ugc">https://brainbaking.com/post/2021/03/getting-rid-of-tracking-using-lineageos/</a> Very impressed so far! Also rely on my own CalDAV server to replace GCalendar. Any others here running <a class="hashtag" data-tag="lineageos" href="https://chat.brainbaking.com/tag/lineageos" rel="tag ugc">#lineageos</a> for privacy reasons?

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/feb772dc-ffec-45c9-be75-51d56c5457ff"
title: "@aussocialadmin Great! I didn&#39;t even know https://joinmobilizon.org/ existed, thanks for shar..."
date: 2021-03-03
---
<span class="h-card"><a class="u-url mention" data-user="A4nTeVFn4QjKtHVqpU" href="https://aus.social/@aussocialadmin" rel="ugc">@<span>aussocialadmin</span></a></span> Great! I didn&#39;t even know <a href="https://joinmobilizon.org/" rel="ugc">https://joinmobilizon.org/</a> existed, thanks for sharing! So many superb alternatives. If only the userbase would follow...

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/e31b1547-31b5-4a35-8c6d-535cdaec4725"
title: "@StampedingLonghorn @256 Don&#39;t forget the cleverly hidden Roland MT-32, a majestic piece of p..."
date: 2021-03-03
---
<span class="h-card"><a class="u-url mention" data-user="A4nwg4LYyh4WgrJOXg" href="https://social.linux.pizza/@StampedingLonghorn" rel="ugc">@<span>StampedingLonghorn</span></a></span> <span class="h-card"><a class="u-url mention" data-user="A4kSMHDHqoHahjCthg" href="https://mastodon.social/@256" rel="ugc">@<span>256</span></a></span> Don&#39;t forget the cleverly hidden Roland MT-32, a majestic piece of pre-MIDI standardized era synthesizer. What else would you use to run Sierra Online games, and monkey1? I really need one for my 486... <a href="https://brainbaking.com/post/2021/02/my-retro-desktop-setup/" rel="ugc">https://brainbaking.com/post/2021/02/my-retro-desktop-setup/</a>

View File

@ -0,0 +1,8 @@
---
source: "https://chat.brainbaking.com/objects/2e58289c-f5f0-415c-b2e1-62c74662aa16"
title: "@StampedingLonghorn I tried to chase him away, but you know how that turned out... 😼 There&#39;s ..."
date: 2021-03-03
---
<span class="h-card"><a class="u-url mention" data-user="A4nwg4LYyh4WgrJOXg" href="https://social.linux.pizza/@StampedingLonghorn" rel="ugc">@<span>StampedingLonghorn</span></a></span> I tried to chase him away, but you know how that turned out... 😼 There&#39;s even cat hair inside the cases... (to be clear: also unintentional)

12
content/notes/_index.md Normal file
View File

@ -0,0 +1,12 @@
---
title: Half-Baked Ideas
type: note
---
> A half-baked idea a day keeps the doctor away. <span>Wouter</span>
These are fleeting, _half-baked_ thoughts, that may or may not get fully baked into fleshed out [blog posts](/post). The notes below are also syndicated to other platforms, such as <svg class='icon icon-text'><use xlink:href='#discuss'></use></svg>[Mastodon](https://chat.brainbaking.com/@wouter). Enjoy reading my ramblings!
Not finding what you're looking for? [Browse the archives](/archives).<br/>
Want to stay up to date? [Subscribe to the <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg>Notes Feed](/notes/index.xml).<br/>
Interested more substantial thoughts? [Read the Freshly Baked blog](/post).

View File

@ -8,4 +8,5 @@ icontag: book
A continuous pursuit of knowledge for either personal or professional reasons is called "Lifelong learning" - also known as "**Brain Baking**". I discovered that in order for me to teach and inspire others, I first had to teach and inspire myself. You are looking at the result of that work.
Not finding what you're looking for? [Browse the archives](/archives).<br/>
Want to stay up to date? [Subscribe to the <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg>RSS Feed](/index.xml).
Want to stay up to date? [Subscribe to the <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg>Blog Feed](/post/index.xml).<br/>
Interested in fleeting thoughts? [Read Half-Baked Thoughts](/notes).

View File

@ -1,50 +1,78 @@
{{ partial "header" . }}
<main>
<div class="intro">
<main class="intro">
{{ with .Site.Params.profilePic }} <img class="profile" src="{{ . }}"> {{ end }}
{{ with .Site.Params.profilePic }} <img class="profile" src="{{ . }}"> {{ end }}
<h1 style="color: #555">
<span style="float: left;">Brain</span>
<div class="avatar-container" style="float: left;">
<div class="avatar-img-border">
<a title="{{ .Site.Title }}" href="{{ .Site.BaseURL }}">
<img class="avatar-img" src="/img/avatar-icon.png" alt="{{ .Site.Title }}" />
</a>
</div>
</div>
<span style="float: left;">Baking</span>
</h1>
<h1 style="color: #666">
<span style="float: left;">Brain</span>
<div class="avatar-container" style="float: left;">
<div class="avatar-img-border">
<a title="{{ .Site.Title }}" href="{{ .Site.BaseURL }}">
<img class="avatar-img" src="/img/avatar-icon.png" alt="{{ .Site.Title }}" />
</a>
</div>
</div>
<span style="float: left;">Baking</span>
<div class="subtitle">
<span class="phonetic">
/breɪn ˈbeɪkɪŋ/
</span>
<span class="noun">
Noun
</span>
</div>
</h1>
<blockquote class="text-justify" style="clear: both;">
<em><svg class='icon icon-float'><use xlink:href='#bulb'></use></svg><a href="/">Brain Baking</a>:</em>&nbsp;transforming&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#about'></use></svg><a href="/about">personal</a>&nbsp;
</span> thoughts about thoughts into&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#teaching'></use></svg><a href="/teaching">well-digestible</a>
</span> material. The reflective aroma of burnt nervous tissue.
Includes a crispy crust of relations between &nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#tech'></use></svg><a href="/post">technology</a>
</span>,&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#book'></use></svg><a href="/post">philosophy</a>
</span>&nbsp;and&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#tag'></use></svg><a href="/archives">the world</a>
</span>.
</blockquote>
<blockquote class="text-justify" style="clear: both;">
<em><a href="/">Brain Baking</a>:</em>&nbsp;transforming&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#about'></use></svg><a href="/about">personal</a>&nbsp;
</span> thoughts about thoughts into&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#bulb'></use></svg><a href="/projects">well-digestible</a>
</span> material. The reflective aroma of burnt nervous tissue.
Includes a crispy crust of relations between &nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#tech'></use></svg><a href="/notes">technology</a>
</span>,&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#book'></use></svg><a href="/post">philosophy</a>
</span>&nbsp;and&nbsp;
<span style="white-space: nowrap;">
<svg class='icon icon-float'><use xlink:href='#tag'></use></svg><a href="/archives">the world</a>
</span>.
</blockquote>
<hr/>
<hr/>
<div class="freshly-baked">
<h3>
<svg class='icon'><use xlink:href='#news'></use></svg>{{ markdownify .Site.Params.Description }}:
</h3>
<h2><a href="/about" alt="go to the about page"><svg class='icon'><use xlink:href='#about'></use></svg></a>About the Head Brain Baker</h2>
<article class="p-author h-card">
<div class="avatar">
<img class="u-photo" src="{{ .Site.BaseURL }}/img/avatar.jpg" alt="A photo of Me!" />
</div>
<p class="p-note">
Hey! I'm <a class="p-name u-uid u-url" href="{{ .Site.BaseURL }}">{{ .Site.Author.name }}</a> <span class="pronoun">(<span class="p-x-pronoun-nominative p-pronoun-nominative">he</span>/<span class="p-pronoun-oblique p-x-pronoun-oblique">him</span>/<span class="p-pronoun-possessive p-x-pronoun-possessive">his</span>)</span>, a level {{ .Site.Params.level }} <em class="p-job-title">Brain Baker</em> living in <span class="p-locality">Belgium</span>. I currently find myself teaching, writing, programming, researching, and of course baking bread! <em>Brain Baking</em> is my way to inspire myself and others to ponder and learn. Read more <a class="u-url" href="about">about me here</a>.
</p>
<p>
If you found my bakings amusing and/or helpful, you can <a rel="me" href="https://ko-fi.com/woutergroeneveld"><strong>buy me a coffee</strong></a> - if you don't mind I'll use it to enjoy a cup of tea instead. I also like to hear about your bakings via <svg class='icon icon-text'><use xlink:href='#discuss'></use></svg><a rel="me" class="u-url" href="{{ .Site.Author.mastodonlink }}">Mastodon</a> or <svg class='icon icon-text'><use xlink:href='#mail'></use></svg><span class="link meel">e-mail</span>. Thanks!
</p>
</article>
{{ range (.Paginator 1).Pages.ByDate.Reverse }}
<article>
Below is a list of recent <em>freshly baked thoughts</em> (<a href="/post">blog posts</a>) and <em>half-baked ideas</em> (<a href="/notes">notes</a>). You can also search through the <a href="/archives">archives</a> or <svg class='icon icon-text'><use xlink:href='#news'></use></svg><a href="/index.xml">subscribe</a> to all content. Have fun!
</article>
<hr/>
<h2><a href="/post" alt="go to all blog posts"><svg class='icon'><use xlink:href='#news'></use></svg></a>New {{ markdownify .Site.Params.Description }}</h2>
<p>
<a href="/post/index.xml">Subscribe to the <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg>Blog post feed</a>.
</p>
<div class="freshly-baked">
{{ $paginator := .Paginate (where .Site.Pages "Type" "post") 4 }}
{{ range $paginator.Pages.ByDate.Reverse }}
<article>
{{ .Date.Format (.Site.Params.dateFormat | default "2 January 2006") | $.Scratch.Set "subtitle" }}
{{ with .Description }} {{ $.Scratch.Set "subtitle" . }} {{ end }}
@ -53,16 +81,28 @@
</h4>
{{ .Params.subtitle }}&nbsp;&nbsp;
<span style="color: lightgrey;"><svg class='icon icon-text'><use xlink:href='#cal1'></use></svg> {{ $.Scratch.Get "subtitle" }}</span>
{{ end }}
</div>
</article>
{{ end }}
</div>
<hr/>
<h2><a href="/notes" alt="go to all notes"><svg class='icon'><use xlink:href='#discuss'></use></svg></a>New Half-baked ideas</h2>
<p>
<a href="/notes/index.xml">Subscribe to the <svg class='icon icon-small' width='16' height='16'><use xlink:href='#news'></use></svg>Notes feed</a> or <a href="{{ .Site.Author.mastodonlink }}">Follow me on Mastodon</a>.
</p>
<div class="new-notes notes tootlist">
{{ $pag := first 4 (where .Site.Pages.ByDate.Reverse "Type" "notes") }}
{{ range $pag }}
{{ partial "toot" . }}
{{ end }}
</div>
<hr/>
</main>
<footer style="position: fixed; bottom: 0; width: 100%">
<p class="copyright text-muted">{{ .Site.Params.copyright | default "&copy; All rights reserved. Powered by [Hugo](https://gohugo.io) and [Minimal](https://github.com/calintat/minimal)" | markdownify }}</p>
<footer>
<p class="copyright text-muted">{{ .Site.Params.copyright | markdownify }}</p>
</footer>

49
layouts/notes/list.html Normal file
View File

@ -0,0 +1,49 @@
{{ partial "header" . }}
{{ partial "bigimg" . }}
<a id="top"></a>
<main class="list">
<header>
<h1>
<svg class='icon'><use xlink:href="#{{ .Params.icontag }}"></use></svg>&nbsp;{{ .Title }}
</h1>
</header>
{{ $paginator := .Paginate (where .Data.Pages ".Params.type" "ne" "archive") $.Site.Params.pagination }}
{{ if eq $paginator.PageNumber 1 }}
<hr/>
{{ with .Content }}
<article>
{{ . }}
</article>
{{ end }}
{{ end }}
{{ if (not .Params.disableList) }}
<div class="tootlist">
{{ range ($paginator.Pages).GroupByDate "2006" "desc" }}
<h2>{{ .Key }}</h2>
{{ range .Pages.GroupByDate "January" }}
<h3>{{ .Key }}</h3>
{{ range .Pages.ByDate.Reverse }}
{{ partial "toot" . }}
{{ end }}
{{ end }}
{{ end }}
</div>
{{ template "_internal/pagination.html" . }}
{{ end }}
<footer>
<svg class='icon icon-text' width='24' height='24'><use xlink:href='#up'></use></svg><a href="#top">Top</a>
</footer>
</main>
{{ partial "footer" . }}

48
layouts/notes/single.html Normal file
View File

@ -0,0 +1,48 @@
{{ partial "header" . }}
{{ partial "bigimg" . }}
<main class="single {{ .Section }}">
<article class="h-entry">
<a id="top"></a>
<header>
<h1>
Half-Baked Thought
</h1>
<h2 class="p-name">
{{ substr .Title 0 50 }}...
</h2>
<h3>
<time datetime='{{ .Date.Format "2006-01-02" }}' class="dt-published">
<svg class='icon icon-text' width='24' height='24'>
<use xlink:href='#cal1'></use>
</svg>
<a class="u-url u-uid" href="{{ .RelPermalink }}">
{{ .Date.Format (.Site.Params.dateFormat | default "2 January 2006") }}
</a>
</time>
&nbsp;|&nbsp;
<span title="Categories">
<svg class='icon icon-text' width='24' height='24'>
<use xlink:href='#folder'></use>
</svg>
<a class="p-category u-url" href="/notes">notes</a>
</span>
</h3>
</header>
<div class="inmargin">
<a rel="author" href="{{ .Site.BaseURL }}about">
<img class="u-photo" src="{{ .Site.BaseURL }}/img/avatar.jpg" alt="A photo of Me!" />
</a>
</div>
<div class="e-content content toot">
{{ .Content | safeHTML }}
</div>
<hr/>
Also posted <svg class='icon icon-text' width='16' height='16'><use xlink:href='#discuss'></use></svg><a href="{{ .Params.source }}" rel="syndication" class="u-syndication">on Mastodon</a> by <a rel="author" href="{{ .Site.BaseURL }}about">{{ .Site.Author.name }}</a>.
</article>
</main>
{{ partial "footer.html" . }}

View File

@ -1,67 +0,0 @@
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//css/reveal.css">
<link rel="stylesheet" href="/slides/theme.css" id="theme">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//lib/css/zenburn.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<!-- If the query includes 'print-pdf', use the PDF print sheet -->
<script>
document.write( '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//css/print/' + ( window.location.search.match( /print-pdf/gi ) ? 'pdf' : 'paper' ) + '.css" type="text/css" media="print">' );
</script>
<!--[if lt IE 9]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//lib/js/html5shiv.js"></script>
<![endif]-->
<link href="{{"mermaid/mermaid.css" | relURL}}" type="text/css" rel="stylesheet"/>
<script defer src="{{"mermaid/mermaid.min.js" | relURL}}">
mermaid.initialize({
startOnLoad: true,
flowchart: {
useMaxWidth: true
}
});
</script>
</head>
<body>
<div class="reveal">
<div class="slides">
<section data-markdown="{{ .Params.slideshow }}"
data-separator="^---"
data-separator-vertical="^___"
data-charset="utf-8">
</section>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//lib/js/head.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//js/reveal.js"></script>
<script>
// options: see https://github.com/hakimel/reveal.js/
Reveal.initialize({
width: 960,
height: 700,
controls: true,
progress: true,
history: true,
transition: 'fade', // default/cube/page/concave/zoom/linear/fade/none/convex
center: true,
slideNumber: true,
theme: Reveal.getQueryHash().theme, // available themes are in /css/theme
// Optional libraries used to extend on reveal.js
dependencies: [
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//lib/js/classList.js', condition: function() { return !document.body.classList; } },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } },
{ src: 'https://cdnjs.cloudflare.com/ajax/libs/reveal.js/3.3.0//plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } }
]
});
</script>
</body>
</html>

86
masto-feed-parser.js Normal file
View File

@ -0,0 +1,86 @@
const got = require("got");
const parser = require("fast-xml-parser");
const fs = require('fs').promises;
const { writeFileSync, existsSync, mkdirSync } = require('fs');
const { resolve } = require('path');
const ent = require('ent')
const notesdir = `${__dirname}/content/notes`
const url = "https://chat.brainbaking.com/users/wouter/feed";
// https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search
async function getFiles(dir) {
const dirents = await fs.readdir(dir, { withFileTypes: true });
const files = await Promise.all(dirents.map((dirent) => {
const res = resolve(dir, dirent.name);
return dirent.isDirectory() ? getFiles(res) : res;
}));
return Array.prototype.concat(...files);
}
function stripBeforeThirdSlash(str) {
const splitted = str.split('/')
return splitted.slice(splitted.length - 3).join('/')
}
function stripBeforeLastSlash(str) {
return str.substring(str.lastIndexOf('/') + 1, str.length)
}
function strpad(n) {
return String("0" + n).slice(-2);
}
function convertAtomItemToMd(item) {
const path = `${notesdir}/${item.year}/${item.month}`
if(!existsSync(`${notesdir}/${item.year}`)) mkdirSync(`${notesdir}/${item.year}`)
if(!existsSync(path)) mkdirSync(path)
const mddata = `---
source: "${item.url}"
title: "${item.title}"
date: ${item.year}-${item.month}-${item.day}
---
${item.content}
`
writeFileSync(`${path}/${item.hash}.md`, mddata, 'utf-8')
}
(async function main() {
const notesroot = await getFiles(notesdir)
const notes = notesroot
.filter(name => name.endsWith('.md'))
.map(n => stripBeforeThirdSlash(n.replace('.md', '')))
const buffer = await got(url, {
responseType: "buffer",
resolveBodyOnly: true,
timeout: 5000,
retry: 5
});
const root = parser.parse(buffer.toString())
const items = root.feed.entry.map(item => {
const date = new Date(item.published)
const year = date.getFullYear()
const month = strpad(date.getMonth() + 1)
const day = strpad(date.getDay() + 1)
return {
title: ent.decode(item.title), // summary (cut-off) of content
content: ent.decode(item.content), // format: &lt;span class=&quot;h-card....
url: item.id, // format: https://chat.brainbaking.com/objects/0707fd54-185d-4ee7-9204-be370d57663c
id: stripBeforeLastSlash(item.id),
hash: `${day}h${date.getHours()}m${date.getMinutes()}s${date.getSeconds()}`,
date, // format: 2021-03-02T16:18:46.658056Z
year,
month,
day
}
})
.filter(itm => !notes.includes(`${itm.year}/${itm.month}/${itm.hash}`))
.forEach(convertAtomItemToMd)
console.log('Done!')
})()

522
package-lock.json generated
View File

@ -7,6 +7,12 @@
"": {
"version": "1.0.0",
"hasInstallScript": true,
"dependencies": {
"crypto-js": "^4.0.0",
"ent": "^2.2.0",
"fast-xml-parser": "^3.18.0",
"got": "^11.8.2"
},
"devDependencies": {
"@babel/cli": "^7.8.4",
"@babel/core": "^7.9.6",
@ -1041,6 +1047,65 @@
"to-fast-properties": "^2.0.0"
}
},
"node_modules/@sindresorhus/is": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
"integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sindresorhus/is?sponsor=1"
}
},
"node_modules/@szmarczak/http-timer": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
"integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
"dependencies": {
"defer-to-connect": "^2.0.0"
},
"engines": {
"node": ">=10"
}
},
"node_modules/@types/cacheable-request": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
"integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
"dependencies": {
"@types/http-cache-semantics": "*",
"@types/keyv": "*",
"@types/node": "*",
"@types/responselike": "*"
}
},
"node_modules/@types/http-cache-semantics": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
"integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
},
"node_modules/@types/keyv": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
"integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/node": {
"version": "14.14.31",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
"integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g=="
},
"node_modules/@types/responselike": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
"integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@ -1345,6 +1410,31 @@
"node": ">=0.10.0"
}
},
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
"integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==",
"engines": {
"node": ">=10.6.0"
}
},
"node_modules/cacheable-request": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
"integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
"dependencies": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
"http-cache-semantics": "^4.0.0",
"keyv": "^4.0.0",
"lowercase-keys": "^2.0.0",
"normalize-url": "^4.1.0",
"responselike": "^2.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001066",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz",
@ -1415,6 +1505,14 @@
"node": ">=0.10.0"
}
},
"node_modules/clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
"dependencies": {
"mimic-response": "^1.0.0"
}
},
"node_modules/collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@ -1511,6 +1609,11 @@
"dev": true,
"optional": true
},
"node_modules/crypto-js": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
"integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
},
"node_modules/debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -1531,6 +1634,39 @@
"node": ">=0.10"
}
},
"node_modules/decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"dependencies": {
"mimic-response": "^3.1.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/decompress-response/node_modules/mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==",
"engines": {
"node": ">=10"
}
},
"node_modules/define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@ -1604,6 +1740,19 @@
"integrity": "sha512-4lwnxp+ArqOX9hiLwLpwhfqvwzUHFuDgLz4NTiU3lhygUzWtocIJ/5Vix+mWVNE2HQ9aI1k2ncGe5H/0OktMvA==",
"dev": true
},
"node_modules/end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dependencies": {
"once": "^1.4.0"
}
},
"node_modules/ent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
},
"node_modules/escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@ -1794,6 +1943,18 @@
"node": ">=0.10.0"
}
},
"node_modules/fast-xml-parser": {
"version": "3.18.0",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.18.0.tgz",
"integrity": "sha512-tRrwShhppv0K5GKEtuVs92W0VGDaVltZAwtHbpjNF+JOT7cjIFySBGTEOmdBslXYyWYaZwEX/g4Su8ZeKg0LKQ==",
"bin": {
"xml2js": "cli.js"
},
"funding": {
"type": "paypal",
"url": "https://paypal.me/naturalintelligence"
}
},
"node_modules/file-is-binary": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz",
@ -1922,6 +2083,20 @@
"node": ">=6.9.0"
}
},
"node_modules/get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dependencies": {
"pump": "^3.0.0"
},
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@ -1982,6 +2157,30 @@
"node": ">=4"
}
},
"node_modules/got": {
"version": "11.8.2",
"resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
"integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
"dependencies": {
"@sindresorhus/is": "^4.0.0",
"@szmarczak/http-timer": "^4.0.5",
"@types/cacheable-request": "^6.0.1",
"@types/responselike": "^1.0.0",
"cacheable-lookup": "^5.0.3",
"cacheable-request": "^7.0.1",
"decompress-response": "^6.0.0",
"http2-wrapper": "^1.0.0-beta.5.2",
"lowercase-keys": "^2.0.0",
"p-cancelable": "^2.0.0",
"responselike": "^2.0.0"
},
"engines": {
"node": ">=10.19.0"
},
"funding": {
"url": "https://github.com/sindresorhus/got?sponsor=1"
}
},
"node_modules/graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
@ -2085,6 +2284,23 @@
"node": ">=0.10.0"
}
},
"node_modules/http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
},
"node_modules/http2-wrapper": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
"integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"dependencies": {
"quick-lru": "^5.1.1",
"resolve-alpn": "^1.0.0"
},
"engines": {
"node": ">=10.19.0"
}
},
"node_modules/inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -2354,6 +2570,11 @@
"node": ">=4"
}
},
"node_modules/json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"node_modules/json5": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
@ -2369,6 +2590,14 @@
"node": ">=6"
}
},
"node_modules/keyv": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
"integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
"dependencies": {
"json-buffer": "3.0.1"
}
},
"node_modules/kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@ -2443,6 +2672,14 @@
"loose-envify": "cli.js"
}
},
"node_modules/lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==",
"engines": {
"node": ">=8"
}
},
"node_modules/lunr": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz",
@ -2510,6 +2747,14 @@
"node": ">=0.10.0"
}
},
"node_modules/mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==",
"engines": {
"node": ">=4"
}
},
"node_modules/minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@ -2606,6 +2851,14 @@
"node": ">=0.10.0"
}
},
"node_modules/normalize-url": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@ -2701,11 +2954,18 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"dependencies": {
"wrappy": "1"
}
},
"node_modules/p-cancelable": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
"integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg==",
"engines": {
"node": ">=8"
}
},
"node_modules/p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
@ -2857,6 +3117,26 @@
"dev": true,
"optional": true
},
"node_modules/pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"node_modules/quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==",
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@ -3016,6 +3296,11 @@
"path-parse": "^1.0.6"
}
},
"node_modules/resolve-alpn": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
"integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
},
"node_modules/resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@ -3023,6 +3308,14 @@
"dev": true,
"optional": true
},
"node_modules/responselike": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
"integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
"dependencies": {
"lowercase-keys": "^2.0.0"
}
},
"node_modules/ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@ -3577,8 +3870,7 @@
"node_modules/wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
},
"dependencies": {
@ -4593,6 +4885,56 @@
"to-fast-properties": "^2.0.0"
}
},
"@sindresorhus/is": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.0.tgz",
"integrity": "sha512-FyD2meJpDPjyNQejSjvnhpgI/azsQkA4lGbuu5BQZfjvJ9cbRZXzeWL2HceCekW4lixO9JPesIIQkSoLjeJHNQ=="
},
"@szmarczak/http-timer": {
"version": "4.0.5",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz",
"integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==",
"requires": {
"defer-to-connect": "^2.0.0"
}
},
"@types/cacheable-request": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz",
"integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==",
"requires": {
"@types/http-cache-semantics": "*",
"@types/keyv": "*",
"@types/node": "*",
"@types/responselike": "*"
}
},
"@types/http-cache-semantics": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz",
"integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A=="
},
"@types/keyv": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz",
"integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==",
"requires": {
"@types/node": "*"
}
},
"@types/node": {
"version": "14.14.31",
"resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.31.tgz",
"integrity": "sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g=="
},
"@types/responselike": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz",
"integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==",
"requires": {
"@types/node": "*"
}
},
"ansi-styles": {
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
@ -4846,6 +5188,25 @@
"unset-value": "^1.0.0"
}
},
"cacheable-lookup": {
"version": "5.0.4",
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz",
"integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA=="
},
"cacheable-request": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.1.tgz",
"integrity": "sha512-lt0mJ6YAnsrBErpTMWeu5kl/tg9xMAWjavYTN6VQXM1A/teBITuNcccXsCxF0tDQQJf9DfAaX5O4e0zp0KlfZw==",
"requires": {
"clone-response": "^1.0.2",
"get-stream": "^5.1.0",
"http-cache-semantics": "^4.0.0",
"keyv": "^4.0.0",
"lowercase-keys": "^2.0.0",
"normalize-url": "^4.1.0",
"responselike": "^2.0.0"
}
},
"caniuse-lite": {
"version": "1.0.30001066",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001066.tgz",
@ -4909,6 +5270,14 @@
}
}
},
"clone-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
"integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
"requires": {
"mimic-response": "^1.0.0"
}
},
"collection-visit": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
@ -4995,6 +5364,11 @@
"dev": true,
"optional": true
},
"crypto-js": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
"integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
},
"debug": {
"version": "2.6.9",
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
@ -5012,6 +5386,26 @@
"dev": true,
"optional": true
},
"decompress-response": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
"requires": {
"mimic-response": "^3.1.0"
},
"dependencies": {
"mimic-response": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ=="
}
}
},
"defer-to-connect": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz",
"integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg=="
},
"define-properties": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
@ -5072,6 +5466,19 @@
"integrity": "sha512-4lwnxp+ArqOX9hiLwLpwhfqvwzUHFuDgLz4NTiU3lhygUzWtocIJ/5Vix+mWVNE2HQ9aI1k2ncGe5H/0OktMvA==",
"dev": true
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"requires": {
"once": "^1.4.0"
}
},
"ent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
@ -5222,6 +5629,11 @@
}
}
},
"fast-xml-parser": {
"version": "3.18.0",
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.18.0.tgz",
"integrity": "sha512-tRrwShhppv0K5GKEtuVs92W0VGDaVltZAwtHbpjNF+JOT7cjIFySBGTEOmdBslXYyWYaZwEX/g4Su8ZeKg0LKQ=="
},
"file-is-binary": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/file-is-binary/-/file-is-binary-1.0.0.tgz",
@ -5324,6 +5736,14 @@
"integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
"dev": true
},
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"requires": {
"pump": "^3.0.0"
}
},
"get-value": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
@ -5374,6 +5794,24 @@
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
"dev": true
},
"got": {
"version": "11.8.2",
"resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz",
"integrity": "sha512-D0QywKgIe30ODs+fm8wMZiAcZjypcCodPNuMz5H9Mny7RJ+IjJ10BdmGW7OM7fHXP+O7r6ZwapQ/YQmMSvB0UQ==",
"requires": {
"@sindresorhus/is": "^4.0.0",
"@szmarczak/http-timer": "^4.0.5",
"@types/cacheable-request": "^6.0.1",
"@types/responselike": "^1.0.0",
"cacheable-lookup": "^5.0.3",
"cacheable-request": "^7.0.1",
"decompress-response": "^6.0.0",
"http2-wrapper": "^1.0.0-beta.5.2",
"lowercase-keys": "^2.0.0",
"p-cancelable": "^2.0.0",
"responselike": "^2.0.0"
}
},
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
@ -5457,6 +5895,20 @@
}
}
},
"http-cache-semantics": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz",
"integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ=="
},
"http2-wrapper": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz",
"integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==",
"requires": {
"quick-lru": "^5.1.1",
"resolve-alpn": "^1.0.0"
}
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@ -5674,6 +6126,11 @@
"integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
"dev": true
},
"json-buffer": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"json5": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
@ -5683,6 +6140,14 @@
"minimist": "^1.2.5"
}
},
"keyv": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.3.tgz",
"integrity": "sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA==",
"requires": {
"json-buffer": "3.0.1"
}
},
"kind-of": {
"version": "6.0.3",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
@ -5739,6 +6204,11 @@
"js-tokens": "^3.0.0 || ^4.0.0"
}
},
"lowercase-keys": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
"integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
},
"lunr": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.8.tgz",
@ -5794,6 +6264,11 @@
"to-regex": "^3.0.2"
}
},
"mimic-response": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
"integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
@ -5877,6 +6352,11 @@
"dev": true,
"optional": true
},
"normalize-url": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz",
"integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ=="
},
"object-copy": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
@ -5953,11 +6433,15 @@
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"p-cancelable": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.0.0.tgz",
"integrity": "sha512-wvPXDmbMmu2ksjkB4Z3nZWTSkJEb9lqVdMaCKpZUGJG9TMiNp9XcbG3fn9fPKjem04fJMJnXoyFPk2FmgiaiNg=="
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
@ -6075,6 +6559,20 @@
"dev": true,
"optional": true
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
"integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA=="
},
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
@ -6212,6 +6710,11 @@
"path-parse": "^1.0.6"
}
},
"resolve-alpn": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.0.0.tgz",
"integrity": "sha512-rTuiIEqFmGxne4IovivKSDzld2lWW9QCjqv80SYjPgf+gS35eaCAjaP54CCwGAwBtnCsvNLYtqxe1Nw+i6JEmA=="
},
"resolve-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
@ -6219,6 +6722,14 @@
"dev": true,
"optional": true
},
"responselike": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz",
"integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==",
"requires": {
"lowercase-keys": "^2.0.0"
}
},
"ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
@ -6671,8 +7182,7 @@
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
}

View File

@ -26,5 +26,10 @@
"bugs": {
"url": "https://github.com/wgroeneveld/brainbaking/issues"
},
"homepage": "https://github.com/wgroeneveld/brainbaking#readme"
"homepage": "https://github.com/wgroeneveld/brainbaking#readme",
"dependencies": {
"ent": "^2.2.0",
"fast-xml-parser": "^3.18.0",
"got": "^11.8.2"
}
}

File diff suppressed because one or more lines are too long

View File

@ -56,6 +56,14 @@ document.addEventListener("DOMContentLoaded",function() {
})
}
(function makeTootClickable() {
[...document.querySelectorAll('.toot')].forEach(toot => {
toot.addEventListener('click', function() {
window.location.href = this.querySelector('.permalink').href
})
})
})();
(function() {
const $target = document.querySelector('#searchapp');
const $pages = document.querySelector('#resultaten .pages');

View File

@ -1,28 +1,59 @@
.pronoun
color: grey
.intro
transform: translateY(22vh)
padding-top: 3rem !important
h1, h2
color: $grey
.intro > h1
color: #212121
font-size: 8vh
h2
font-size: 4vh
.intro > h1
text-shadow: #bbbbbb 0 4px 5px
font-size: 5vh
@media (min-width: 560px)
font-size: 8vh
@media (min-width: 768px)
font-size: 9vh
@media (min-width: 1200px)
font-size: 10vh
@media (min-width: 1600px)
font-size: 12vh
.subtitle
font-size: 1rem
float: right
clear: both
margin-right: 3rem
margin-top: -2.5rem
margin-bottom: 4rem
.intro > h2
color: #757575
font-size: 3vmin
.noun
font-style: italic
&::before
content: ";"
.intro > .profile
width: 10vh
height: 10vh
border-radius: 50%
.avatar-container
width: 100px
margin-left: 45px
.avatar-container
width: 50px
margin-left: 25px
margin-top: 1rem
@media (min-width: 560px)
width: 66px
margin-left: 45px
@media (min-width: 768px)
width: 75px
@media (min-width: 1200px)
width: 80px
@media (min-width: 1600px)
width: 100px
.avatar-img-border
width: 100%
@ -37,8 +68,13 @@
width: 100%
border-radius: 50%
display: block
animation: rotate 2s infinite
-webkit-animation: rotate 5s infinite
.intro
margin-top: -150px
@media (min-width: 768px)
margin-top: -100px
@-webkit-keyframes rotate
100%
transform: rotate(360deg)
@keyframes rotate
100%
transform: rotate(360deg)

View File

@ -126,6 +126,9 @@ main
right: calc(-600px + 50vw)
position: absolute
@media (min-width: 1600px)
right: calc(-700px + 50vw)
.list-tags
a
text-decoration: none !important
@ -201,6 +204,6 @@ kbd
background: rgba(0,0,0,0.65) !important
article hr
article hr, main.intro hr
margin-top: 60px
margin-bottom: 60px

View File

@ -0,0 +1,34 @@
.toot
border: 1px solid #cccccc
padding: 0.5em
border-radius: 5px
box-shadow: rgba(100, 100, 111, 0.2) 0px 7px 29px 0px
&:hover
transition: 250ms linear
transform: scale(1.1)
border-color: var(--accent)
.notes
.u-photo
border-radius: 50%
margin-top: 0
.tootlist
h1, h2, h3
text-align: left
h3
margin-left: 3rem
.toot
cursor: pointer
article
margin-bottom: 2.5rem
margin-top: 2rem
.meta
border-top: 1px solid #eeeeee
padding-top: 0.5rem

View File

@ -19,3 +19,4 @@ $grey: #333
@import 'listing'
@import 'goodreads'
@import 'forms'
@import 'toot'

View File

@ -0,0 +1,17 @@
<article class="h-entry">
<div class="content toot">
<div class="e-content">
{{ .Content }}
</div>
<div class="meta">
<time datetime='{{ .Date.Format "2006-01-02" }}' class="dt-published">
<svg class='icon icon-text' width='24' height='24'>
<use xlink:href='#cal1'></use>
</svg>
{{ .Date.Format (.Site.Params.dateFormat | default "2 January 2006") }}
</time>
&nbsp;|&nbsp;
<a href="{{ .RelPermalink }}" class="permalink">Permalink</a>
</div>
</div>
</article>