Add theme with only required fonts
This commit is contained in:
parent
4f3e1fb4e1
commit
8995ecbb1f
|
@ -0,0 +1,20 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2021 Jez Cope
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@ -0,0 +1,33 @@
|
|||
# Mnemosyne: a minimal Hugo theme
|
||||
|
||||
This is the theme that I use for [my blog, eRambler](https://erambler.co.uk).
|
||||
|
||||
## Installation
|
||||
|
||||
In your Hugo site `themes` directory, run:
|
||||
|
||||
```
|
||||
git clone https://tildegit.org/petrichor/theme-mnemosyne-hugo.git
|
||||
```
|
||||
|
||||
Next, open `config.toml` in the base of the Hugo site and ensure the theme option is set to `mnemosyne`.
|
||||
|
||||
```
|
||||
theme = "mnemosyne"
|
||||
```
|
||||
|
||||
For more information read the official [quick start guide](https://gohugo.io/getting-started/quick-start/) of Hugo.
|
||||
|
||||
## Contributing
|
||||
|
||||
I don't really have time to test & accept contributions, but feel free to fork this theme and do your own thing with it.
|
||||
|
||||
## License
|
||||
|
||||
This theme is released under the [MIT license](https://tildegit.org/petrichor/theme-mnemosyne-hugo/src/branch/main/LICENSE).
|
||||
|
||||
## Acknowledgements
|
||||
|
||||
This theme is based on: [Blank][], a starter [Hugo](https://gohugo.io/) theme for developers. Use it to make your own theme.
|
||||
|
||||
[Blank]: https://themes.gohugo.io/theme/blank/
|
|
@ -0,0 +1,4 @@
|
|||
+++
|
||||
title = "{{ replace .Name "-" " " | title }}"
|
||||
date = {{ .Date }}
|
||||
+++
|
|
@ -0,0 +1,342 @@
|
|||
/* webmention.js
|
||||
|
||||
Simple thing for embedding webmentions from webmention.io into a page, client-side.
|
||||
|
||||
(c)2018-2020 fluffy (http://beesbuzz.biz)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
GitHub repo (for latest released versions, issue tracking, etc.):
|
||||
|
||||
https://github.com/PlaidWeb/webmention.js
|
||||
|
||||
Basic usage:
|
||||
|
||||
<script src="/path/to/webmention.js" data-param="val" ... async />
|
||||
<div id="webmentions"></div>
|
||||
|
||||
Allowed parameters:
|
||||
|
||||
page-url:
|
||||
|
||||
The base URL to use for this page. Defaults to window.location
|
||||
|
||||
add-urls:
|
||||
|
||||
Additional URLs to check, separated by |s
|
||||
|
||||
id:
|
||||
|
||||
The HTML ID for the object to fill in with the webmention data.
|
||||
Defaults to "webmentions"
|
||||
|
||||
wordcount:
|
||||
|
||||
The maximum number of words to render in reply mentions.
|
||||
|
||||
max-webmentions:
|
||||
|
||||
The maximum number of mentions to retrieve. Defaults to 30.
|
||||
|
||||
prevent-spoofing:
|
||||
|
||||
By default, Webmentions render using the mf2 'url' element, which plays
|
||||
nicely with webmention bridges (such as brid.gy and telegraph)
|
||||
but allows certain spoofing attacks. If you would like to prevent
|
||||
spoofing, set this to a non-empty string (e.g. "true").
|
||||
|
||||
sort-by:
|
||||
|
||||
What to order the responses by; defaults to 'published'. See
|
||||
https://github.com/aaronpk/webmention.io#api
|
||||
|
||||
sort-dir:
|
||||
|
||||
The order to sort the responses by; defaults to 'up' (i.e. oldest
|
||||
first). See https://github.com/aaronpk/webmention.io#api
|
||||
|
||||
comments-are-reactions:
|
||||
|
||||
If set to a non-empty string (e.g. "true"), will display comment-type responses
|
||||
(replies/mentions/etc.) as being part of the reactions
|
||||
(favorites/bookmarks/etc.) instead of in a separate comment list.
|
||||
|
||||
A more detailed example:
|
||||
|
||||
<script src="/path/to/webmention.min.js"
|
||||
data-id="webmentionContainer"
|
||||
data-wordcount="30"
|
||||
data-prevent-spoofing="true"
|
||||
data-comments-are-reactions="true"
|
||||
/>
|
||||
|
||||
*/
|
||||
|
||||
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
function getCfg(key, dfl) {
|
||||
return document.currentScript.getAttribute("data-" + key) || dfl;
|
||||
}
|
||||
|
||||
var refurl = getCfg('page-url',
|
||||
window.location.href.replace(/#.*$/, ''));
|
||||
var addurls = getCfg('add-urls', undefined);
|
||||
var containerID = getCfg('id', "webmentions");
|
||||
var textMaxWords = getCfg('wordcount');
|
||||
var maxWebmentions = getCfg('max-webmentions', 30);
|
||||
var mentionSource = getCfg('prevent-spoofing') ? 'wm-source' : 'url';
|
||||
var sortBy = getCfg('sort-by', 'published');
|
||||
var sortDir = getCfg('sort-dir', 'up');
|
||||
var commentsAreReactions = getCfg('comments-are-reactions');
|
||||
|
||||
var reactTitle = {
|
||||
'in-reply-to': 'replied',
|
||||
'like-of': 'liked',
|
||||
'repost-of': 'reposted',
|
||||
'bookmark-of': 'bookmarked',
|
||||
'mention-of': 'mentioned',
|
||||
'rsvp': 'RSVPed',
|
||||
'follow-of': 'followed'
|
||||
};
|
||||
|
||||
var reactEmoji = {
|
||||
'in-reply-to': '💬',
|
||||
'like-of': '❤️',
|
||||
'repost-of': '🔄',
|
||||
'bookmark-of': '⭐️',
|
||||
'mention-of': '💬',
|
||||
'rsvp': '📅',
|
||||
'follow-of': '🐜'
|
||||
};
|
||||
|
||||
var rsvpEmoji = {
|
||||
'yes': '✅',
|
||||
'no': '❌',
|
||||
'interested': '💡',
|
||||
'maybe': '💭'
|
||||
};
|
||||
|
||||
function entities(text) {
|
||||
return text.replace(/&/g, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.replace(/"/g, '"');
|
||||
}
|
||||
|
||||
function reactImage(r, isComment) {
|
||||
var who = entities((r.author && r.author.name)
|
||||
? r.author.name
|
||||
: r.url.split('/')[2]);
|
||||
var response = reactTitle[r['wm-property']] || 'reacted';
|
||||
if (!isComment && r.content && r.content.text) {
|
||||
response += ": " + extractComment(r);
|
||||
}
|
||||
var html = '<a class="reaction" rel="nofollow ugc" title="' + who + ' ' +
|
||||
response + '" href="' + r[mentionSource] + '">';
|
||||
if (r.author && r.author.photo) {
|
||||
html += '<img src="' + entities(r.author.photo) +
|
||||
'" loading="lazy" decoding="async" alt="' + who + '">';
|
||||
}
|
||||
html += (reactEmoji[r['wm-property']] || '💥');
|
||||
if (r.rsvp && rsvpEmoji[r.rsvp]) {
|
||||
html += '<sub>' + rsvpEmoji[r.rsvp] + '</sub>';
|
||||
}
|
||||
html += '</a>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
// strip the protocol off a URL
|
||||
function stripurl(url) {
|
||||
return url.substr(url.indexOf('//'));
|
||||
}
|
||||
|
||||
// Deduplicate multiple mentions from the same source URL
|
||||
function dedupe(mentions) {
|
||||
var filtered = [];
|
||||
var seen = {};
|
||||
|
||||
mentions.forEach(function(r) {
|
||||
// Strip off the protocol (i.e. treat http and https the same)
|
||||
var source = stripurl(r.url);
|
||||
if (!seen[source]) {
|
||||
filtered.push(r);
|
||||
seen[source] = true;
|
||||
}
|
||||
});
|
||||
|
||||
return filtered;
|
||||
}
|
||||
|
||||
function extractComment(c) {
|
||||
var text = entities(c.content.text);
|
||||
|
||||
if (textMaxWords) {
|
||||
var words = text.replace(/\s+/g,' ')
|
||||
.split(' ', textMaxWords + 1);
|
||||
if (words.length > textMaxWords) {
|
||||
words[textMaxWords - 1] += '…';
|
||||
words = words.slice(0, textMaxWords);
|
||||
text = words.join(' ');
|
||||
}
|
||||
}
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
function formatComments(comments) {
|
||||
var html = '<h2>' + comments.length + ' Response' +
|
||||
(comments.length > 1 ? 's' : '') +
|
||||
'</h2><ul class="comments">';
|
||||
comments.forEach(function(c) {
|
||||
html += '<li>';
|
||||
|
||||
html += reactImage(c, true);
|
||||
|
||||
html += ' <a class="source" rel="nofollow ugc" href="' +
|
||||
c[mentionSource] + '">';
|
||||
if (c.author && c.author.name) {
|
||||
html += entities(c.author.name);
|
||||
} else {
|
||||
html += entities(c.url.split('/')[2]);
|
||||
}
|
||||
html += '</a>: ';
|
||||
|
||||
var linkclass;
|
||||
var linktext;
|
||||
if (c.name) {
|
||||
linkclass = "name";
|
||||
linktext = c.name;
|
||||
} else if (c.content && c.content.text) {
|
||||
linkclass = "text";
|
||||
linktext = extractComment(c);
|
||||
} else {
|
||||
linkclass = "name";
|
||||
linktext = "(mention)";
|
||||
}
|
||||
|
||||
html += '<span class="' + linkclass + '">' + linktext + '</span>';
|
||||
|
||||
html += '</li>';
|
||||
});
|
||||
html += '</ul>';
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function formatReactions(reacts) {
|
||||
var html = '<h2>' + reacts.length + ' Reaction' +
|
||||
(reacts.length > 1 ? 's' : '') +
|
||||
'</h2><ul class="reacts">';
|
||||
|
||||
reacts.forEach(function(r) {
|
||||
html += reactImage(r);
|
||||
});
|
||||
|
||||
return html;
|
||||
}
|
||||
|
||||
function getData(url, callback) {
|
||||
if (window.fetch) {
|
||||
window.fetch(url).then(function(response) {
|
||||
if (response.status >= 200 && response.status < 300) {
|
||||
return Promise.resolve(response);
|
||||
} else {
|
||||
return Promise.reject(new Error(response.statusText));
|
||||
}
|
||||
}).then(function(response) {
|
||||
return response.json();
|
||||
}).then(callback).catch(function(error) {
|
||||
console.error("Request failed", error);
|
||||
});
|
||||
} else {
|
||||
var oReq = new XMLHttpRequest();
|
||||
oReq.onload = function(data) {
|
||||
callback(JSON.parse(data));
|
||||
};
|
||||
oReq.onerror = function(error) {
|
||||
console.error("Request failed", error);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("load", function () {
|
||||
var container = document.getElementById(containerID);
|
||||
if (!container) {
|
||||
// no container, so do nothing
|
||||
return;
|
||||
}
|
||||
|
||||
var pages = [stripurl(refurl)];
|
||||
if (!!addurls) {
|
||||
addurls.split('|').forEach(function (url) {
|
||||
pages.push(stripurl(url));
|
||||
})
|
||||
}
|
||||
|
||||
var apiURL = 'https://webmention.io/api/mentions.jf2?per-page=' +
|
||||
maxWebmentions + '&sort-by=' + sortBy + '&sort-dir=' + sortDir;
|
||||
|
||||
pages.forEach(function (path) {
|
||||
apiURL += '&target[]=' + encodeURIComponent('http:' + path) +
|
||||
'&target[]=' + encodeURIComponent('https:' + path);
|
||||
});
|
||||
|
||||
getData(apiURL, function(json) {
|
||||
var html = '';
|
||||
|
||||
var comments = [];
|
||||
var collects = [];
|
||||
if (commentsAreReactions) {
|
||||
comments = collects;
|
||||
}
|
||||
|
||||
var mapping = {
|
||||
"in-reply-to": comments,
|
||||
"like-of": collects,
|
||||
"repost-of": collects,
|
||||
"bookmark-of": collects,
|
||||
"mention-of": comments,
|
||||
"rsvp": comments
|
||||
};
|
||||
|
||||
json.children.forEach(function(c) {
|
||||
var store = mapping[c['wm-property']];
|
||||
if (store) {
|
||||
store.push(c);
|
||||
}
|
||||
});
|
||||
|
||||
// format the comment-type things
|
||||
if (comments.length > 0 && comments !== collects) {
|
||||
html += formatComments(dedupe(comments));
|
||||
}
|
||||
|
||||
// format the other reactions
|
||||
if (collects.length > 0) {
|
||||
html += formatReactions(dedupe(collects));
|
||||
}
|
||||
|
||||
container.innerHTML = html;
|
||||
});
|
||||
});
|
||||
|
||||
}());
|
|
@ -0,0 +1,82 @@
|
|||
/* Background */ .chroma { color: #93a1a1; background-color: #002b36 }
|
||||
/* Other */ .chroma .x { color: #cb4b16 }
|
||||
/* Error */ .chroma .err { }
|
||||
/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; }
|
||||
/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; width: auto; overflow: auto; display: block; }
|
||||
/* LineHighlight */ .chroma .hl { display: block; width: 100%;background-color: #ffffcc }
|
||||
/* LineNumbersTable */ .chroma .lnt { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #495050 }
|
||||
/* LineNumbers */ .chroma .ln { margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #495050 }
|
||||
/* Keyword */ .chroma .k { color: #719e07 }
|
||||
/* KeywordConstant */ .chroma .kc { color: #cb4b16 }
|
||||
/* KeywordDeclaration */ .chroma .kd { color: #268bd2 }
|
||||
/* KeywordNamespace */ .chroma .kn { color: #719e07 }
|
||||
/* KeywordPseudo */ .chroma .kp { color: #719e07 }
|
||||
/* KeywordReserved */ .chroma .kr { color: #268bd2 }
|
||||
/* KeywordType */ .chroma .kt { color: #dc322f }
|
||||
/* Name */ .chroma .n { }
|
||||
/* NameAttribute */ .chroma .na { }
|
||||
/* NameBuiltin */ .chroma .nb { color: #b58900 }
|
||||
/* NameBuiltinPseudo */ .chroma .bp { color: #268bd2 }
|
||||
/* NameClass */ .chroma .nc { color: #268bd2 }
|
||||
/* NameConstant */ .chroma .no { color: #cb4b16 }
|
||||
/* NameDecorator */ .chroma .nd { color: #268bd2 }
|
||||
/* NameEntity */ .chroma .ni { color: #cb4b16 }
|
||||
/* NameException */ .chroma .ne { color: #cb4b16 }
|
||||
/* NameFunction */ .chroma .nf { color: #268bd2 }
|
||||
/* NameFunctionMagic */ .chroma .fm { }
|
||||
/* NameLabel */ .chroma .nl { }
|
||||
/* NameNamespace */ .chroma .nn { }
|
||||
/* NameOther */ .chroma .nx { }
|
||||
/* NameProperty */ .chroma .py { }
|
||||
/* NameTag */ .chroma .nt { color: #268bd2 }
|
||||
/* NameVariable */ .chroma .nv { color: #268bd2 }
|
||||
/* NameVariableClass */ .chroma .vc { }
|
||||
/* NameVariableGlobal */ .chroma .vg { }
|
||||
/* NameVariableInstance */ .chroma .vi { }
|
||||
/* NameVariableMagic */ .chroma .vm { }
|
||||
/* Literal */ .chroma .l { }
|
||||
/* LiteralDate */ .chroma .ld { }
|
||||
/* LiteralString */ .chroma .s { color: #2aa198 }
|
||||
/* LiteralStringAffix */ .chroma .sa { color: #2aa198 }
|
||||
/* LiteralStringBacktick */ .chroma .sb { color: #586e75 }
|
||||
/* LiteralStringChar */ .chroma .sc { color: #2aa198 }
|
||||
/* LiteralStringDelimiter */ .chroma .dl { color: #2aa198 }
|
||||
/* LiteralStringDoc */ .chroma .sd { }
|
||||
/* LiteralStringDouble */ .chroma .s2 { color: #2aa198 }
|
||||
/* LiteralStringEscape */ .chroma .se { color: #cb4b16 }
|
||||
/* LiteralStringHeredoc */ .chroma .sh { }
|
||||
/* LiteralStringInterpol */ .chroma .si { color: #2aa198 }
|
||||
/* LiteralStringOther */ .chroma .sx { color: #2aa198 }
|
||||
/* LiteralStringRegex */ .chroma .sr { color: #dc322f }
|
||||
/* LiteralStringSingle */ .chroma .s1 { color: #2aa198 }
|
||||
/* LiteralStringSymbol */ .chroma .ss { color: #2aa198 }
|
||||
/* LiteralNumber */ .chroma .m { color: #2aa198 }
|
||||
/* LiteralNumberBin */ .chroma .mb { color: #2aa198 }
|
||||
/* LiteralNumberFloat */ .chroma .mf { color: #2aa198 }
|
||||
/* LiteralNumberHex */ .chroma .mh { color: #2aa198 }
|
||||
/* LiteralNumberInteger */ .chroma .mi { color: #2aa198 }
|
||||
/* LiteralNumberIntegerLong */ .chroma .il { color: #2aa198 }
|
||||
/* LiteralNumberOct */ .chroma .mo { color: #2aa198 }
|
||||
/* Operator */ .chroma .o { color: #719e07 }
|
||||
/* OperatorWord */ .chroma .ow { color: #719e07 }
|
||||
/* Punctuation */ .chroma .p { }
|
||||
/* Comment */ .chroma .c { color: #586e75 }
|
||||
/* CommentHashbang */ .chroma .ch { color: #586e75 }
|
||||
/* CommentMultiline */ .chroma .cm { color: #586e75 }
|
||||
/* CommentSingle */ .chroma .c1 { color: #586e75 }
|
||||
/* CommentSpecial */ .chroma .cs { color: #719e07 }
|
||||
/* CommentPreproc */ .chroma .cp { color: #719e07 }
|
||||
/* CommentPreprocFile */ .chroma .cpf { color: #719e07 }
|
||||
/* Generic */ .chroma .g { }
|
||||
/* GenericDeleted */ .chroma .gd { color: #dc322f }
|
||||
/* GenericEmph */ .chroma .ge { font-style: italic }
|
||||
/* GenericError */ .chroma .gr { color: #dc322f; font-weight: bold }
|
||||
/* GenericHeading */ .chroma .gh { color: #cb4b16 }
|
||||
/* GenericInserted */ .chroma .gi { color: #719e07 }
|
||||
/* GenericOutput */ .chroma .go { }
|
||||
/* GenericPrompt */ .chroma .gp { }
|
||||
/* GenericStrong */ .chroma .gs { font-weight: bold }
|
||||
/* GenericSubheading */ .chroma .gu { color: #268bd2 }
|
||||
/* GenericTraceback */ .chroma .gt { }
|
||||
/* GenericUnderline */ .chroma .gl { }
|
||||
/* TextWhitespace */ .chroma .w { }
|
|
@ -0,0 +1,3 @@
|
|||
$main-font-family: 'Iosevka Etoile', sans-serif;
|
||||
|
||||
$header-font-family: 'Iosevka Aile', sans-serif;
|
|
@ -0,0 +1,195 @@
|
|||
@charset "utf-8"
|
||||
|
||||
@import url('../font/iosevka-aile.css')
|
||||
@import url('../font/iosevka-etoile.css')
|
||||
@import url('../font/iosevka.css')
|
||||
|
||||
@function make-light($c)
|
||||
@return scale-color($c, $lightness: 30%, $saturation: -25%)
|
||||
|
||||
@function make-lighter($c)
|
||||
@return scale-color($c, $lightness: 60%, $saturation: -50%)
|
||||
|
||||
$family-sans-serif: "Iosevka Aile Web", sans-serif
|
||||
$family-serif: "Iosevka Etoile Web", serif
|
||||
$family-monospace: "Iosevka Web", monospace
|
||||
|
||||
$turquoise: #236863
|
||||
$blue: #2D4471
|
||||
$brown: #552500
|
||||
$turquoise-light: make-light($turquoise)
|
||||
$turquoise-lighter: make-lighter($turquoise)
|
||||
$blue-light: make-light($blue)
|
||||
$blue-lighter: make-lighter($blue)
|
||||
$brown-light: make-light($brown)
|
||||
$brown-lighter: make-lighter($brown)
|
||||
|
||||
$family-primary: $family-serif
|
||||
|
||||
$link: $turquoise
|
||||
|
||||
|
||||
@import '../../node_modules/bulma/bulma.sass'
|
||||
|
||||
@import '_code.scss'
|
||||
|
||||
body
|
||||
font-size: 14px
|
||||
|
||||
h1, h2, h3, h4, h5, h6
|
||||
font-family: $family-sans-serif
|
||||
color: $brown
|
||||
|
||||
&:before
|
||||
color: $brown-lighter
|
||||
|
||||
a
|
||||
color: inherit
|
||||
|
||||
h1
|
||||
font-size: $size-large
|
||||
|
||||
&:before
|
||||
content: "# "
|
||||
|
||||
h2, .content h2
|
||||
font-size: $size-medium
|
||||
|
||||
&:before
|
||||
content: "## "
|
||||
|
||||
h3, .content h3
|
||||
&:before
|
||||
content: "### "
|
||||
|
||||
h3, h4, h5, h6, .content h3, .content h4, .content h5, .content h6
|
||||
font-size: $body-font-size
|
||||
|
||||
h5, h6, .content h5, .content h6
|
||||
font-style: italic
|
||||
|
||||
h6, .content h6
|
||||
font-weight: normal
|
||||
|
||||
.content
|
||||
strong:before, strong:after
|
||||
content: "*"
|
||||
|
||||
em:before, em:after
|
||||
content: "_"
|
||||
|
||||
a
|
||||
text-decoration: underline
|
||||
|
||||
ul
|
||||
*:marker
|
||||
font-weight: bold
|
||||
|
||||
list-style-type: "* "
|
||||
ul
|
||||
list-style-type: "+ "
|
||||
ul
|
||||
list-style-type: "- "
|
||||
|
||||
+mobile
|
||||
&.taxonomy-list.tags-list
|
||||
column-count: 2
|
||||
+tablet-only
|
||||
&.taxonomy-list.tags-list
|
||||
column-count: 3
|
||||
+desktop
|
||||
&.taxonomy-list.tags-list
|
||||
column-count: 4
|
||||
|
||||
.summary
|
||||
@extend .hero
|
||||
@extend .my-5
|
||||
@extend .px-3
|
||||
@extend .py-5
|
||||
|
||||
.link-summary
|
||||
@extend .has-background-link-light
|
||||
|
||||
.note-summary
|
||||
@extend .has-background-info-light
|
||||
|
||||
.single, .list
|
||||
@extend .my-5
|
||||
@extend .px-3
|
||||
@extend .py-5
|
||||
|
||||
.site-title
|
||||
@extend h1
|
||||
|
||||
padding-left: 0
|
||||
|
||||
&:before
|
||||
content: none
|
||||
|
||||
.site-description
|
||||
background-color: $white-ter
|
||||
|
||||
#webmentions
|
||||
.comments
|
||||
max-height: 20em
|
||||
overflow-x: hidden
|
||||
overflow-y: scroll
|
||||
font-size: 80%
|
||||
|
||||
li
|
||||
.text
|
||||
color: #555
|
||||
font-style: italic
|
||||
text-decoration: none
|
||||
|
||||
.name
|
||||
color: #111
|
||||
|
||||
h2
|
||||
font-size: medium
|
||||
margin: 0
|
||||
padding: 0.5em
|
||||
|
||||
&:first-child
|
||||
border-top-left-radius: 0.5em
|
||||
border-top-right-radius: 0.5em
|
||||
|
||||
.reacts img
|
||||
margin: 3px -1ex 1px 0
|
||||
vertical-align: baseline
|
||||
|
||||
ul
|
||||
list-style-type: none
|
||||
margin: 0
|
||||
padding: 4px
|
||||
|
||||
li
|
||||
text-indent: -3em
|
||||
padding-left: 3em
|
||||
padding-bottom: 0.5em
|
||||
|
||||
a.reaction
|
||||
position: relative
|
||||
|
||||
margin-right: 0
|
||||
margin-right: 1ex
|
||||
|
||||
text-decoration: none
|
||||
text-shadow: 0px 0px 3px white
|
||||
|
||||
img
|
||||
max-height: 2em
|
||||
margin-right: -1ex
|
||||
border-radius: 3px
|
||||
|
||||
sub
|
||||
font-size: 50%
|
||||
|
||||
.reacts a.reaction
|
||||
display: inline-block
|
||||
|
||||
ul
|
||||
@extend .menu-list
|
||||
|
||||
#current
|
||||
font-weight: bold
|
Binary file not shown.
After Width: | Height: | Size: 94 KiB |
Binary file not shown.
After Width: | Height: | Size: 136 KiB |
Binary file not shown.
After Width: | Height: | Size: 136 KiB |
|
@ -0,0 +1,174 @@
|
|||
[buildPlans.iosevka-mnemosyne]
|
||||
family = "Iosevka"
|
||||
spacing = "fixed"
|
||||
serifs = "sans"
|
||||
no-cv-ss = true
|
||||
|
||||
[buildPlans.iosevka-mnemosyne.weights.regular]
|
||||
shape = 400
|
||||
menu = 400
|
||||
css = 400
|
||||
|
||||
[buildPlans.iosevka-mnemosyne.weights.bold]
|
||||
shape = 700
|
||||
menu = 700
|
||||
css = 700
|
||||
|
||||
[buildPlans.iosevka-mnemosyne.slopes.upright]
|
||||
angle = 0
|
||||
shape = "upright"
|
||||
menu = "upright"
|
||||
css = "normal"
|
||||
|
||||
[buildPlans.iosevka-mnemosyne.slopes.italic]
|
||||
angle = 9.4
|
||||
shape = "italic"
|
||||
menu = "italic"
|
||||
css = "italic"
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne]
|
||||
family = "Iosevka Aile"
|
||||
desc = "Sans-serif"
|
||||
spacing = "quasi-proportional"
|
||||
snapshotFamily = 'iosevka-aile'
|
||||
snapshotFeature = '"NWID" off'
|
||||
export-glyph-names = true
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.variants.design]
|
||||
capital-i = "serifless"
|
||||
capital-j = "serifless"
|
||||
capital-k = "straight-serifless"
|
||||
capital-m = "flat-bottom"
|
||||
capital-w = "straight-flat-top"
|
||||
a = "double-storey-serifless"
|
||||
d = "toothed-serifless"
|
||||
e = "flat-crossbar"
|
||||
f = "flat-hook"
|
||||
g = "single-storey-serifless"
|
||||
i = "serifless"
|
||||
j = "flat-hook-serifless"
|
||||
k = "straight-serifless"
|
||||
l = "serifless"
|
||||
r = "compact"
|
||||
t = "flat-hook"
|
||||
u = "toothed"
|
||||
w = "straight-flat-top"
|
||||
y = "straight"
|
||||
long-s = "flat-hook"
|
||||
eszet = "longs-s-lig"
|
||||
lower-iota = "flat-tailed"
|
||||
lower-lambda = "straight-turn"
|
||||
cyrl-ef = "serifless"
|
||||
cyrl-capital-ka = "symmetric-connected-serifless"
|
||||
cyrl-ka = "symmetric-connected-serifless"
|
||||
cyrl-capital-u = "straight"
|
||||
at = "fourfold"
|
||||
percent = "rings-continuous-slash"
|
||||
|
||||
# Letterform control for U+1D670 ... U+1D6A3
|
||||
[buildPlans.iosevka-aile-mnemosyne.derivingVariants.mathtt.design]
|
||||
capital-i = "serifed"
|
||||
capital-j = "serifless"
|
||||
capital-k = "straight-serifless"
|
||||
capital-m = "flat-bottom"
|
||||
capital-w = "straight-flat-top"
|
||||
a = "double-storey-serifless"
|
||||
d = "toothed-serifless"
|
||||
e = "flat-crossbar"
|
||||
f = "flat-hook"
|
||||
g = "single-storey-serifless"
|
||||
i = "serifed"
|
||||
j = "flat-hook-serifed"
|
||||
k = "straight-serifless"
|
||||
l = "serifed"
|
||||
r = "compact"
|
||||
t = "flat-hook"
|
||||
u = "toothed"
|
||||
w = "straight-flat-top"
|
||||
y = "straight"
|
||||
long-s = "flat-hook"
|
||||
eszet = "longs-s-lig"
|
||||
lower-iota = "flat-tailed"
|
||||
lower-lambda = "straight-turn"
|
||||
cyrl-ef = "serifless"
|
||||
cyrl-capital-ka = "symmetric-connected-serifless"
|
||||
cyrl-ka = "symmetric-connected-serifless"
|
||||
cyrl-capital-u = "straight"
|
||||
at = "fourfold"
|
||||
percent = "rings-continuous-slash"
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.widths.normal]
|
||||
shape = 600
|
||||
menu = 5
|
||||
css = "normal"
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.weights.regular]
|
||||
shape = 400
|
||||
menu = 400
|
||||
css = 400
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.weights.bold]
|
||||
shape = 700
|
||||
menu = 700
|
||||
css = 700
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.slopes.upright]
|
||||
angle = 0
|
||||
shape = "upright"
|
||||
menu = "upright"
|
||||
css = "normal"
|
||||
|
||||
[buildPlans.iosevka-aile-mnemosyne.slopes.italic]
|
||||
angle = 9.4
|
||||
shape = "italic"
|
||||
menu = "italic"
|
||||
css = "italic"
|
||||
|
||||
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne]
|
||||
family = "Iosevka Etoile"
|
||||
desc = "Slab-serif"
|
||||
spacing = "quasi-proportional"
|
||||
serifs = 'slab'
|
||||
snapshotFamily = 'iosevka-etoile'
|
||||
snapshotFeature = '"NWID" off'
|
||||
export-glyph-names = true
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.variants.design]
|
||||
at = 'fourfold'
|
||||
capital-w = 'straight-flat-top'
|
||||
f = "flat-hook-serifed"
|
||||
j = 'flat-hook-serifed'
|
||||
t = "flat-hook"
|
||||
w = 'straight-flat-top'
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.variants.italic]
|
||||
f = "flat-hook-tailed"
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.widths.normal]
|
||||
shape = 600
|
||||
menu = 5
|
||||
css = "normal"
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.weights.regular]
|
||||
shape = 400
|
||||
menu = 400
|
||||
css = 400
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.weights.bold]
|
||||
shape = 700
|
||||
menu = 700
|
||||
css = 700
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.slopes.upright]
|
||||
angle = 0
|
||||
shape = "upright"
|
||||
menu = "upright"
|
||||
css = "normal"
|
||||
|
||||
[buildPlans.iosevka-etoile-mnemosyne.slopes.italic]
|
||||
angle = 9.4
|
||||
shape = "italic"
|
||||
menu = "italic"
|
||||
css = "italic"
|
|
@ -0,0 +1,26 @@
|
|||
{{ define "main" }}
|
||||
<section class="hero is-warning is-medium">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<main class="column is-8 is-offset-2">
|
||||
<p class="title">
|
||||
Page not found
|
||||
</p>
|
||||
<div class="content">
|
||||
<p>
|
||||
You could:
|
||||
</p>
|
||||
<ul>
|
||||
<li><a href="{{ "/" | relURL }}">Go back to the home page</a></li>
|
||||
<li><a href="{{ "/tags/" | relURL }}">Take a look at the list of tags</a></li>
|
||||
<li><a href="https://duckduckgo.com">Try searching for what you're looking for</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
{{ end }}
|
|
@ -0,0 +1,32 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{ .Site.LanguageCode | default "en-us" }}">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<title>{{ .Title }}</title>
|
||||
{{ .Scratch.Set "desc" slice }}
|
||||
{{ with .Site.Params.description }}{{ $.Scratch.Add "desc" (slice .) }}{{ end }}
|
||||
{{ with .Site.Params.topics }}{{ $.Scratch.Add "desc" (slice (delimit . " & ")) }}{{ end }}
|
||||
{{ if gt (len (.Scratch.Get "desc")) 0 }}
|
||||
<meta name="description" content="{{ delimit (.Scratch.Get "desc") " " }}">
|
||||
{{ end }}
|
||||
{{ with .Site.Params.author }}<meta name="author" content="{{ . }}">{{ end }}
|
||||
{{ $style := resources.Get "style/main.sass" | resources.ToCSS }}
|
||||
<link rel="stylesheet" href="{{ $style.RelPermalink }}">
|
||||
|
||||
{{ with .Site.Params.comments.webmention }}<link rel="webmention" href="{{ . }}" />{{ end }}
|
||||
{{ with .Site.Params.comments.pingback }}<link rel="pingback" href="{{ . }}" />{{ end }}
|
||||
|
||||
{{ if .Site.Params.comments.cactus }}<link rel="stylesheet" href="https://latest.cactus.chat/style.css" type="text/css">{{ end }}
|
||||
{{ with .OutputFormats.Get "RSS" -}}
|
||||
{{ printf `<link rel="%s" type="%s" href="%s" title="%s">` .Rel .MediaType.Type .RelPermalink $.Site.Title | safeHTML }}
|
||||
{{- end }}
|
||||
</head>
|
||||
<body>
|
||||
{{ partial "header" . }}
|
||||
{{ block "main" . }}{{ end }}
|
||||
{{ partial "footer" . }}
|
||||
{{ partial "scripts" . }}
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,7 @@
|
|||
{{ partial "status" . }}
|
||||
<div class="page-date">
|
||||
<strong>Date:</strong>
|
||||
<time>{{ .Date.Format .Site.Params.DateFormat }}</time>
|
||||
</div>
|
||||
{{ partial "series.html" .Params.series }}
|
||||
{{ partial "tags.html" .Params.tags }}
|
|
@ -0,0 +1,4 @@
|
|||
{{ .Summary }}
|
||||
{{ if .Truncated }}
|
||||
<a href="{{ .RelPermalink }}">Read more...</a>
|
||||
{{ end }}
|
|
@ -0,0 +1 @@
|
|||
[{{ .Type | upper }}] {{ .Title }}
|
|
@ -0,0 +1,6 @@
|
|||
<li>
|
||||
{{ .Date.Format .Site.Params.DateFormat }}:
|
||||
<a href="{{ .RelPermalink }}">
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</li>
|
|
@ -0,0 +1,25 @@
|
|||
{{ define "main" }}
|
||||
<main class="list">
|
||||
<div class="container">
|
||||
{{ if or .Title .Content }}
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
{{ with .Title }}<h1 class="mb-5">{{ . }}</h1>{{ end }}
|
||||
{{ with .Content }}<div class="content">{{ . }}<hr /></div>{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="columns mb-6">
|
||||
<div class="column is-8 is-offset-2 content">
|
||||
<ul class="list {{ .Kind }}-list{{ with .Data.Plural }} {{.}}-list{{ end }}">
|
||||
{{ $sort_field := "Date" }}
|
||||
{{ if eq .Kind "taxonomy" }}{{ $sort_field = "Title" }}{{ end }}
|
||||
{{ range sort .Pages $sort_field "asc" }}
|
||||
{{ .Render "li" }}
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
{{ end }}
|
|
@ -0,0 +1,24 @@
|
|||
{{ define "main" }}
|
||||
<main class="single">
|
||||
<article class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
<h1>{{ .Render "frag/title" }}</h1>
|
||||
</div>
|
||||
</div>
|
||||
<div class="columns">
|
||||
<div class="column is-2">
|
||||
{{ .Render "frag/metadata" }}
|
||||
</div>
|
||||
<div class="column is-8">
|
||||
{{ partial "series-items" . }}
|
||||
{{ partial "toc" . }}
|
||||
<div class="content">
|
||||
{{ .Content }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{ partial "comments" . }}
|
||||
</article>
|
||||
</main>
|
||||
{{ end }}
|
|
@ -0,0 +1,20 @@
|
|||
<article class="summary {{ .Type }}-summary">
|
||||
<div class="container">
|
||||
{{ if ne .Type "note" }}
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
<h2><a href="{{ with .Params.link }}{{.}}{{ else }}{{ .RelPermalink }}{{ end }}">
|
||||
{{ .Render "frag/title" }}</a></h2>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
<div class="columns">
|
||||
<div class="column is-2">
|
||||
{{ .Render "frag/metadata" }}
|
||||
</div>
|
||||
<div class="column is-8 content">
|
||||
{{ .Render "frag/summary-content" }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</article>
|
|
@ -0,0 +1,28 @@
|
|||
{{ define "main" }}
|
||||
<section class="hero px-3 site-description">
|
||||
<div class="hero-body">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
{{ with .Site.Params.Description }}{{.}}{{ end }}
|
||||
{{ with .Site.Params.Topics }}
|
||||
{{ $last := sub (len .) 1 }}
|
||||
{{ range $i, $x := . }}
|
||||
<a href="/tags/{{ $x | urlize }}/">{{ $x }}</a>
|
||||
{{ if lt $i $last }}<span class="ampersand">&</span>{{ end }}
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<main class="mt-6">
|
||||
{{ $paginator := .Paginate (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
|
||||
{{ range $paginator.Pages }}
|
||||
{{ .Render "summary" }}
|
||||
{{ end }}
|
||||
{{ partial "pagination" . }}
|
||||
</main>
|
||||
{{ end }}
|
|
@ -0,0 +1,4 @@
|
|||
{{ .Content }}
|
||||
<p>
|
||||
<a href="{{ .Params.link }}">>>></a>
|
||||
</p>
|
|
@ -0,0 +1 @@
|
|||
{{ .Content }}
|
|
@ -0,0 +1,2 @@
|
|||
{{ partial "status" . }}
|
||||
{{ partial "tags" .Params.tags }}
|
|
@ -0,0 +1 @@
|
|||
{{ .Title }}
|
|
@ -0,0 +1,13 @@
|
|||
<div class="container">
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
{{ partial "comments/webmention" . }}
|
||||
{{ partial "comments/cactus" . }}
|
||||
{{ with .Site.DisqusShortname }}
|
||||
<div>
|
||||
{{ template "_internal/disqus.html" . }}
|
||||
</div>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
{{ if .Site.Params.comments.cactus }}
|
||||
<hr />
|
||||
<div class="content">
|
||||
<h2>Comments</h2>
|
||||
</div>
|
||||
<div id="cactus-comments"></div>
|
||||
<p>
|
||||
<em>Powered by <a href="https://cactus.chat/">Cactus Comments 🌵</a></em>
|
||||
</p>
|
||||
{{ end }}
|
|
@ -0,0 +1,17 @@
|
|||
{{ if .Site.Params.comments.webmention }}
|
||||
<hr />
|
||||
<div class="content">
|
||||
<h2>Webmentions</h2>
|
||||
<p>
|
||||
You can respond to this post, <a href="{{ .Permalink }}">"{{ .Title }}"</a>, by:
|
||||
liking, boosting or replying to a tweet or <a href="https://joinmastodon.org/">toot</a> that mentions it; or
|
||||
sending a <a href="https://indieweb.org/Webmention">webmention</a> from your own site to <code>{{ .Permalink }}</code>
|
||||
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div id="webmentions">
|
||||
Comments & reactions haven't loaded yet. You might have JavaScript disabled but that's cool 😎.
|
||||
</div>
|
||||
|
||||
{{ end }}
|
|
@ -0,0 +1,26 @@
|
|||
<div class="footer">
|
||||
<div class="container">
|
||||
<div class="columns">
|
||||
<footer class="column is-8 is-offset-2 has-text-centered">
|
||||
{{ partial "social" . }}
|
||||
<p>
|
||||
© {{ now.Year }}
|
||||
<a href="{{ .Site.BaseURL }}">{{ .Site.Params.Author }}</a>
|
||||
| Built by: <a href="https://gohugo.com/">Hugo</a>
|
||||
| Theme: <a href="https://tildegit.org/petrichor/theme-mnemosyne-hugo">Mnemosyne</a>
|
||||
</p>
|
||||
{{ with .Site.Params.netlify }}
|
||||
<p class="mt-4">
|
||||
<a href="https://app.netlify.com/sites/{{.name}}/deploys">
|
||||
Build status: <img src="https://api.netlify.com/api/v1/badges/{{.id}}/deploy-status">
|
||||
</a>
|
||||
</p>
|
||||
{{ end }}
|
||||
{{ with .Site.Copyright | safeHTML }}
|
||||
<hr />
|
||||
<p>{{.}}</p>
|
||||
{{ end }}
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,29 @@
|
|||
<div class="container p-3">
|
||||
<div class="columns">
|
||||
<div class="column is-8 is-offset-2">
|
||||
<nav class="navbar" role="navigation" aria-label="main navigation">
|
||||
<div class="navbar-brand">
|
||||
{{- if .IsHome -}}<h1 class="site-title navbar-item">{{- else -}}<div class="site-title navbar-item">{{- end -}}
|
||||
<a href="{{ .Site.BaseURL }}">{{ .Site.Title }}</a>
|
||||
{{- if .IsHome -}}</h1>{{- else -}}</div>{{- end -}}
|
||||
|
||||
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false" data-target="nav-menu">
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
<span aria-hidden="true"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
{{ with .Site.Menus.main }}
|
||||
<div class="navbar-menu" id="nav-menu">
|
||||
<div class="navbar-end">
|
||||
{{ range . }}
|
||||
<a class="navbar-item" href="{{ .URL | relURL }}">{{ .Name }}</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,11 @@
|
|||
<footer class="columns mb-3">
|
||||
<div class="column is-8 is-offset-2 has-text-centered">
|
||||
{{ if .Paginator.HasPrev }}
|
||||
<a href="{{ .Paginator.Prev.URL }}">Previous Page</a>
|
||||
{{ end }}
|
||||
{{ .Paginator.PageNumber }} of {{ .Paginator.TotalPages }}
|
||||
{{ if .Paginator.HasNext }}
|
||||
<a href="{{ .Paginator.Next.URL }}">Next Page</a>
|
||||
{{ end }}
|
||||
</div>
|
||||
</footer>
|
|
@ -0,0 +1,19 @@
|
|||
<script type="text/javascript" src="/js/navbar.js"></script>
|
||||
|
||||
{{ if .File }}
|
||||
{{ $page_id := .File.BaseFileName }}
|
||||
{{ if .Site.Params.comments.webmention }}
|
||||
{{ $webmention_js := resources.Get "js/webmention.js" | minify }}
|
||||
<script src="{{ $webmention_js.RelPermalink }}"
|
||||
data-page-url="{{ .Permalink }}"
|
||||
async></script>
|
||||
{{ end }}
|
||||
{{ with .Site.Params.comments.cactus }}
|
||||
<script type="text/javascript" src="https://latest.cactus.chat/cactus.js"
|
||||
data-default-homeserver-url="https://matrix.cactus.chat:8448"
|
||||
data-server-name="cactus.chat"
|
||||
data-site-name="{{ . }}"
|
||||
data-node="#cactus-comments"
|
||||
data-comment-section-id="{{ $page_id }}"></script>
|
||||
{{ end }}
|
||||
{{ end }}
|
|
@ -0,0 +1,27 @@
|
|||
{{ $page := . }}
|
||||
{{ with .Params.series }}
|
||||
{{ $series := (site.GetPage "/series").GetPage . }}
|
||||
<div class="card mb-5">
|
||||
<header class="card-header has-background-primary has-text-white">
|
||||
<p class="card-header-title has-text-white">
|
||||
Series
|
||||
</p>
|
||||
</header>
|
||||
<div class="card-content content is-size-7">
|
||||
{{ with $series.Params.on }}
|
||||
<p>This post is part of <a href="{{ $series.RelPermalink }}">a series on {{.}}</a>.</p>
|
||||
{{ else }}
|
||||
<p>This post is part of the series <a href="{{ $series.RelPermalink }}" class="has-text-white">{{ $series.Title }}</a></p>
|
||||
{{ end }}
|
||||
<ul>
|
||||
{{ range $series.Pages }}
|
||||
<li>
|
||||
{{ if ne . $page }}<a href="{{ .RelPermalink }}">{{ else }}<span id="current">> {{ end }}
|
||||
{{ .Title }}
|
||||
{{ if ne . $page }}</a>{{ else }} <</span>{{ end }}
|
||||
</li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
|
@ -0,0 +1,7 @@
|
|||
{{ with . }}
|
||||
{{ $series := (site.GetPage "/series").GetPage . }}
|
||||
<div>
|
||||
<strong>Series:</strong>
|
||||
<a href="{{ $series.RelPermalink }}">{{ $series.Title }}</a>
|
||||
</div>
|
||||
{{ end }}
|
|
@ -0,0 +1,14 @@
|
|||
<aside>
|
||||
<div>
|
||||
<div>
|
||||
<h3>LATEST POSTS</h3>
|
||||
</div>
|
||||
<div>
|
||||
<ul>
|
||||
{{ range first 5 (where .Site.RegularPages "Type" "in" .Site.Params.mainSections) }}
|
||||
<li><a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
|
||||
{{ end }}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</aside>
|
|
@ -0,0 +1,34 @@
|
|||
{{ with .Site.Params.Social }}
|
||||
<p>
|
||||
me elsewhere ::
|
||||
{{ $last := sub (len .) 1 }}
|
||||
{{ range $i, $x := . }}
|
||||
{{ $url := $x.info }}
|
||||
{{ $text := $x.kind }}
|
||||
{{ if eq $x.kind "github" }}
|
||||
{{ $url = printf "https://github.com/%s" $x.info }}
|
||||
{{ else if eq $x.kind "gitlab" }}
|
||||
{{ $url = printf "https://gitlab.com/%s" $x.info }}
|
||||
{{ else if eq $x.kind "linkedin" }}
|
||||
{{ $url = printf "https://linkedin.com/in/%s" $x.info }}
|
||||
{{ else if eq $x.kind "twitter" }}
|
||||
{{ $url = printf "https://twitter.com/%s" $x.info }}
|
||||
{{ else if eq $x.kind "mastodon" }}
|
||||
{{ $url = printf "https://%s/@%s" (index $x.info 1) (index $x.info 0) }}
|
||||
{{ else if eq $x.kind "orcid" }}
|
||||
{{ $url = printf "https://orcid.org/%s" $x.info }}
|
||||
{{ else if eq $x.kind "keybase" }}
|
||||
{{ $url = printf "https://keybase.io/%s" $x.info }}
|
||||
{{ else if eq $x.kind "keyoxide" }}
|
||||
{{ $url = printf "https://keyoxide.org/%s" $x.info }}
|
||||
{{ else if eq $x.kind "matrix" }}
|
||||
{{ $url = printf "https://matrix.to/#/%s" $x.info }}
|
||||
{{ else if eq $x.kind "pypi" }}
|
||||
{{ $url = printf "https://pypi.org/user/%s" $x.info }}
|
||||
{{ end }}
|
||||
<a href="{{$url}}" rel="me">{{$text}}</a>
|
||||
{{ if ne $i $last }}|{{ end }}
|
||||
{{ end }}
|
||||
</p>
|
||||
<hr />
|
||||
{{ end }}
|
|
@ -0,0 +1 @@
|
|||
{{ if .Params.draft }}<div><strong>Status:</strong> DRAFT ✏️</div>{{ end }}
|
|
@ -0,0 +1,8 @@
|
|||
<div class="page-tags">
|
||||
<strong>Tags:</strong>
|
||||
{{ range . }}
|
||||
<a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}">[{{ . }}]</a>
|
||||
{{ else }}
|
||||
<em>None</em>
|
||||
{{ end }}
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
{{ if .Params.ShowTOC }}
|
||||
<div class="card mb-5">
|
||||
<div class="card-header has-background-light">
|
||||
<p class="card-header-title">Contents</p>
|
||||
</div>
|
||||
<div class="card-content content is-size-7">
|
||||
{{ .TableOfContents }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
|
@ -0,0 +1 @@
|
|||
{{ .Title }}
|
|
@ -0,0 +1,4 @@
|
|||
<li>
|
||||
<a href="{{ .RelPermalink }}">{{ .Title }} ({{ .Data.series | len }} posts)</a>
|
||||
{{- with .Params.summary }}: {{.}}{{ end }}
|
||||
</li>
|
|
@ -0,0 +1,10 @@
|
|||
<div class="card mb-5">
|
||||
<header class="card-header{{ with .Get 1 }} has-background-{{.}} has-text-white{{ end }}">
|
||||
<p class="card-header-title">
|
||||
{{ .Get 0 | title }}
|
||||
</p>
|
||||
</header>
|
||||
<div class="card-content content">
|
||||
{{ .Inner | markdownify }}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,5 @@
|
|||
<li>
|
||||
<a href="{{ .RelPermalink }}">
|
||||
{{ .Title }}
|
||||
</a>
|
||||
</li>
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"bulma": "^0.9.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Aile Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-aile-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Aile Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-aile-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-italic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Aile Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-aile-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Aile Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-aile-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-bolditalic.ttf') format('truetype');
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Etoile Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-etoile-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Etoile Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-etoile-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-italic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Etoile Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-etoile-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Etoile Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-etoile-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-bolditalic.ttf') format('truetype');
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: expanded;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-mnemosyne-extended.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extended.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-italic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 400;
|
||||
font-stretch: expanded;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-mnemosyne-extendeditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendeditalic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-bold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: expanded;
|
||||
font-style: normal;
|
||||
src: url('woff2/iosevka-mnemosyne-extendedbold.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendedbold.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: normal;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-bolditalic.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Iosevka Web';
|
||||
font-display: swap;
|
||||
font-weight: 700;
|
||||
font-stretch: expanded;
|
||||
font-style: italic;
|
||||
src: url('woff2/iosevka-mnemosyne-extendedbolditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendedbolditalic.ttf') format('truetype');
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,25 @@
|
|||
document.addEventListener('DOMContentLoaded', () => {
|
||||
|
||||
// Get all "navbar-burger" elements
|
||||
const $navbarBurgers = Array.prototype.slice.call(document.querySelectorAll('.navbar-burger'), 0);
|
||||
|
||||
// Check if there are any navbar burgers
|
||||
if ($navbarBurgers.length > 0) {
|
||||
|
||||
// Add a click event on each of them
|
||||
$navbarBurgers.forEach( el => {
|
||||
el.addEventListener('click', () => {
|
||||
|
||||
// Get the target from the "data-target" attribute
|
||||
const target = el.dataset.target;
|
||||
const $target = document.getElementById(target);
|
||||
|
||||
// Toggle the "is-active" class on both the "navbar-burger" and the "navbar-menu"
|
||||
el.classList.toggle('is-active');
|
||||
$target.classList.toggle('is-active');
|
||||
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
});
|
|
@ -0,0 +1,12 @@
|
|||
name = "Blank"
|
||||
license = "MIT"
|
||||
licenselink = "https://github.com/vimux/blank/blob/master/LICENSE"
|
||||
description = "Starter Hugo theme for developers."
|
||||
homepage = "https://github.com/vimux/blank/"
|
||||
tags = ["blog", "plain", "blank", "starter", "development"]
|
||||
features = ["blog"]
|
||||
min_version = "0.20"
|
||||
|
||||
[author]
|
||||
name = "Vimux"
|
||||
homepage = "https://github.com/vimux"
|
|
@ -0,0 +1,8 @@
|
|||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||
# yarn lockfile v1
|
||||
|
||||
|
||||
bulma@^0.9.2:
|
||||
version "0.9.2"
|
||||
resolved "https://registry.yarnpkg.com/bulma/-/bulma-0.9.2.tgz#340011e119c605f19b8ca886bfea595f1deaf23c"
|
||||
integrity sha512-e14EF+3VSZ488yL/lJH0tR8mFWiEQVCMi/BQUMi2TGMBOk+zrDg4wryuwm/+dRSHJw0gMawp2tsW7X1JYUCE3A==
|
Loading…
Reference in New Issue