Compare commits
7 Commits
12f273f54e
...
8d89c2d453
Author | SHA1 | Date |
---|---|---|
Robert McGovern | 8d89c2d453 | |
Robert McGovern | 148fa78c0c | |
Robert McGovern | 3d3b18411f | |
Robert McGovern | 5b16d8f1bd | |
Robert McGovern | 93f13cc249 | |
Robert McGovern | 77e9103b8e | |
Robert McGovern | db259fd59b |
|
@ -0,0 +1,504 @@
|
|||
const siteURL = "https://tarasis.net";
|
||||
|
||||
const fs = require("fs-extra");
|
||||
const sass = require("sass");
|
||||
const { promisify } = require("util");
|
||||
const sassRender = promisify(sass.render);
|
||||
const postcss = require("postcss");
|
||||
const autoprefixer = require("autoprefixer");
|
||||
const markdownIt = require("markdown-it");
|
||||
const markdownItRenderer = new markdownIt();
|
||||
const markdownItAnchor = require("markdown-it-anchor");
|
||||
// const relativeUrl = require("eleventy-filter-relative-url");
|
||||
const pluginTOC = require("eleventy-plugin-toc");
|
||||
const moment = require("moment");
|
||||
const description = require("eleventy-plugin-description");
|
||||
const pluginRss = require("@11ty/eleventy-plugin-rss");
|
||||
const UpgradeHelper = require("@11ty/eleventy-upgrade-help");
|
||||
const xmlFiltersPlugin = require("eleventy-xml-plugin");
|
||||
const yaml = require("js-yaml");
|
||||
const syntaxHighlight = require("@11ty/eleventy-plugin-syntaxhighlight");
|
||||
|
||||
|
||||
const inspect = require("node:util").inspect;
|
||||
|
||||
// relativeURL
|
||||
const path = require("path");
|
||||
const urlFilter = require("@11ty/eleventy/src/Filters/Url");
|
||||
const indexify = (url) => url.replace(/(\/[^.]*)$/, "$1index.html");
|
||||
|
||||
module.exports = function (eleventyConfig) {
|
||||
let pathPrefix = "/";
|
||||
|
||||
eleventyConfig.addDataExtension("yaml", contents => yaml.load(contents));
|
||||
eleventyConfig.addDataExtension("yml", contents => yaml.load(contents));
|
||||
|
||||
eleventyConfig.addPlugin(pluginRss);
|
||||
//Blog excerpts
|
||||
eleventyConfig.addPlugin(description);
|
||||
// Eleventy Navigation (https://www.11ty.dev/docs/plugins/navigation/)
|
||||
eleventyConfig.addPlugin(require("@11ty/eleventy-navigation"));
|
||||
// Eleventy RSS Feed (https://www.11ty.dev/docs/plugins/rss/)
|
||||
eleventyConfig.addPlugin(require("@11ty/eleventy-plugin-rss"));
|
||||
// Filter to generate a Table of Contents from page content
|
||||
eleventyConfig.addPlugin(pluginTOC, {
|
||||
tags: ["h2", "h3"],
|
||||
wrapper: "div",
|
||||
});
|
||||
// TODO https://www.npmjs.com/package/eleventy-plugin-meta-generator
|
||||
// Eleventy Syntax Highlighting (https://www.11ty.dev/docs/plugins/syntaxhighlight/)
|
||||
// eleventyConfig.addPlugin(require("@11ty/eleventy-plugin-syntaxhighlight"));
|
||||
eleventyConfig.addPlugin(syntaxHighlight, {
|
||||
|
||||
alwaysWrapLineHighlights: true,
|
||||
// Change which Eleventy template formats use syntax highlighters
|
||||
// templateFormats: ["*"], // default
|
||||
|
||||
// Use only a subset of template types (11ty.js added in v4.0.0)
|
||||
// templateFormats: ["liquid", "njk", "md", "11ty.js"],
|
||||
|
||||
// init callback lets you customize Prism
|
||||
// init: function({ Prism }) {
|
||||
// Prism.languages.myCustomLanguage = /* */;
|
||||
// },
|
||||
|
||||
// Added in 3.1.1, add HTML attributes to the <pre> or <code> tags
|
||||
preAttributes: {
|
||||
tabindex: 0,
|
||||
|
||||
// Added in 4.1.0 you can use callback functions too
|
||||
"data-language": function({ language, content, options }) {
|
||||
return language;
|
||||
}
|
||||
},
|
||||
codeAttributes: {},
|
||||
});
|
||||
|
||||
eleventyConfig.addPlugin(xmlFiltersPlugin);
|
||||
|
||||
// Custom Collections
|
||||
eleventyConfig.addCollection("pages", (collection) =>
|
||||
collection.getFilteredByGlob("./src/_pages/**/*")
|
||||
);
|
||||
|
||||
eleventyConfig.addCollection("posts", (collection) =>
|
||||
collection
|
||||
.getFilteredByGlob("./src/_posts/**/*")
|
||||
.filter(
|
||||
(item) => item.data.draft !== true && item.date <= new Date()
|
||||
)
|
||||
.reverse()
|
||||
.map((cur, i, all) => {
|
||||
cur.data["siblings"] = {
|
||||
next: all[i - 1],
|
||||
prev: all[i + 1],
|
||||
};
|
||||
return cur;
|
||||
})
|
||||
);
|
||||
|
||||
eleventyConfig.addCollection("projects", (collection) =>
|
||||
collection
|
||||
.getFilteredByGlob("./src/projects/**/*")
|
||||
.sort((a, b) => a.data.weight - b.data.weight)
|
||||
);
|
||||
|
||||
// eleventyConfig.addCollection("posts", function (collectionApi) {
|
||||
// return collectionApi.getFilteredByGlob("./src/_posts/**/*.md");
|
||||
// });
|
||||
|
||||
eleventyConfig.addCollection("drafts", (collection) =>
|
||||
collection
|
||||
.getFilteredByGlob("./src/_drafts/**/*")
|
||||
.sort((a, b) => a.data.weight - b.data.weight)
|
||||
) ;
|
||||
|
||||
|
||||
eleventyConfig.addCollection("tags", (collection) => {
|
||||
let tags = new Set();
|
||||
|
||||
collection.getAll().forEach((item) => {
|
||||
if ("tags" in item.data) {
|
||||
if (item.data.tags != undefined) {
|
||||
for (const tag of item.data.tags) {
|
||||
tags.add(tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return [...tags];
|
||||
});
|
||||
|
||||
eleventyConfig.addCollection("categories", (collection) => {
|
||||
let categories = new Set();
|
||||
|
||||
collection.getAll().forEach((item) => {
|
||||
if ("category" in item.data) {
|
||||
if (item.data.category != undefined) {
|
||||
for (const category of item.data.category) {
|
||||
categories.add(category);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return [...categories];
|
||||
});
|
||||
|
||||
// Filters
|
||||
|
||||
// eleventyConfig.addFilter("markdownify", (str) => {
|
||||
// return markdownItRenderer.renderInline(str);
|
||||
// });
|
||||
|
||||
eleventyConfig.addFilter("markdownify", (string) => {
|
||||
return md.renderInline(string);
|
||||
});
|
||||
|
||||
eleventyConfig.addNunjucksFilter("markdownify", (str) => md.render(str));
|
||||
|
||||
eleventyConfig.addFilter("jsonify", (variable) => JSON.stringify(variable));
|
||||
|
||||
eleventyConfig.addFilter("slugify", (str) =>
|
||||
require("slugify")(str, {
|
||||
lower: true,
|
||||
replacement: "-",
|
||||
remove: /[*+~.·,()''`´%!?¿:@]/g,
|
||||
})
|
||||
);
|
||||
|
||||
eleventyConfig.addFilter("where", (array, key, value) =>
|
||||
array.filter((item) => {
|
||||
const keys = key.split(".");
|
||||
const reducedKey = keys.reduce((object, key) => object[key], item);
|
||||
|
||||
return reducedKey === value ? item : false;
|
||||
})
|
||||
);
|
||||
|
||||
eleventyConfig.addFilter("date", (date, format = "") =>
|
||||
require("moment")(date).format(format)
|
||||
);
|
||||
|
||||
eleventyConfig.addLiquidFilter("toUTCString", (date) => {
|
||||
const utc = date.toUTCString();
|
||||
return moment.utc(utc).format("MMMM Do YYYY");
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter("number_of_words", numberOfWords);
|
||||
|
||||
// eleventyConfig.addShortcode("where_exp", function (item, exp) {
|
||||
// console.log(exp);
|
||||
// return eval(exp);
|
||||
// });
|
||||
eleventyConfig.addFilter("where_exp", function (value) {
|
||||
// where_exp function
|
||||
return value.hidden != true;
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter("inspect", function (obj = {}) {
|
||||
return inspect(obj, {sorted: true});
|
||||
});
|
||||
|
||||
eleventyConfig.addFilter('group_by', groupBy)
|
||||
|
||||
eleventyConfig.addLayoutAlias(
|
||||
"archive-taxonomy",
|
||||
"layouts/archive-taxonomy.html"
|
||||
);
|
||||
eleventyConfig.addLayoutAlias("archive", "layouts/archive.html");
|
||||
eleventyConfig.addLayoutAlias("categories", "layouts/categories.html");
|
||||
eleventyConfig.addLayoutAlias("category", "layouts/category.html");
|
||||
eleventyConfig.addLayoutAlias("collection", "layouts/collection.html");
|
||||
eleventyConfig.addLayoutAlias("compress", "layouts/compress.html");
|
||||
eleventyConfig.addLayoutAlias("default", "layouts/default.html");
|
||||
eleventyConfig.addLayoutAlias("home", "layouts/home.html");
|
||||
eleventyConfig.addLayoutAlias("posts", "layouts/posts.html");
|
||||
eleventyConfig.addLayoutAlias("search", "layouts/search.html");
|
||||
eleventyConfig.addLayoutAlias("single", "layouts/single.html");
|
||||
eleventyConfig.addLayoutAlias("splash", "layouts/splash.html");
|
||||
eleventyConfig.addLayoutAlias("tag", "layouts/tag.html");
|
||||
eleventyConfig.addLayoutAlias("tags", "layouts/tags.html");
|
||||
eleventyConfig.addLayoutAlias("gallery", "layouts/gallery");
|
||||
eleventyConfig.addLayoutAlias("drafts", "layouts/drafts");
|
||||
|
||||
// Passthrough copy
|
||||
// don't use .gitignore (allows compiling sass to css into a monitored folder WITHOUT committing it to repo)
|
||||
eleventyConfig.setUseGitIgnore(false);
|
||||
|
||||
//Copy CNAME
|
||||
eleventyConfig.addPassthroughCopy("src/CNAME");
|
||||
|
||||
// Processing configuration
|
||||
eleventyConfig.addPassthroughCopy("src/favicon.ico");
|
||||
eleventyConfig.addPassthroughCopy("src/admin");
|
||||
eleventyConfig.addPassthroughCopy("src/assets");
|
||||
// eleventyConfig.addPassthroughCopy({ "src/_sass": "assets/css" });
|
||||
|
||||
eleventyConfig.addShortcode("post_url", (collection, slug) => {
|
||||
try {
|
||||
if (collection.length < 1) {
|
||||
throw "Collection appears to be empty";
|
||||
}
|
||||
if (!Array.isArray(collection)) {
|
||||
throw "Collection is an invalid type - it must be an array!";
|
||||
}
|
||||
if (typeof slug !== "string") {
|
||||
throw "Slug is an invalid type - it must be a string!";
|
||||
}
|
||||
|
||||
const found = collection.find((p) => p.fileSlug == slug);
|
||||
if (found === 0 || found === undefined) {
|
||||
throw `${slug} not found in specified collection.`;
|
||||
} else {
|
||||
return found.url;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error(
|
||||
`RMCG:An error occured while searching for the url to ${slug}. Details:`,
|
||||
e
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
// Set section
|
||||
|
||||
// Configure BrowserSync to serve the 404 page for missing files
|
||||
eleventyConfig.setBrowserSyncConfig({
|
||||
callbacks: {
|
||||
ready: (_err, browserSync) => {
|
||||
const content_404 = fs.readFileSync("dist/404.html");
|
||||
|
||||
browserSync.addMiddleware("*", (_req, res) => {
|
||||
// render the 404 content instead of redirecting
|
||||
res.write(content_404);
|
||||
res.end();
|
||||
});
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
eleventyConfig.setBrowserSyncConfig({
|
||||
files: "./dist/assets/styles/**/*.css",
|
||||
});
|
||||
|
||||
// Merge Data (https://www.11ty.dev/docs/data-deep-merge/)
|
||||
eleventyConfig.setDataDeepMerge(true);
|
||||
|
||||
eleventyConfig.setFrontMatterParsingOptions({
|
||||
excerpt: true,
|
||||
});
|
||||
|
||||
eleventyConfig.setLibrary("md", markdownIt().use(markdownItAnchor));
|
||||
|
||||
eleventyConfig.setLiquidOptions({
|
||||
// dynamicPartials: false,
|
||||
// strictVariables: false,
|
||||
// strictFilters: false,
|
||||
jekyllInclude: true,
|
||||
});
|
||||
|
||||
// Markdown Configuration
|
||||
const md = require("markdown-it")({
|
||||
html: true,
|
||||
breaks: true,
|
||||
linkify: true,
|
||||
});
|
||||
|
||||
eleventyConfig.setLibrary(
|
||||
"md",
|
||||
md
|
||||
.use(require("markdown-it-attrs"))
|
||||
.use(require("markdown-it-container"), "", {
|
||||
validate: () => true,
|
||||
render: (tokens, idx) => {
|
||||
if (tokens[idx].nesting === 1) {
|
||||
const classList = tokens[idx].info.trim();
|
||||
return `<div ${classList && `class="${classList}"`}>`;
|
||||
} else {
|
||||
return `</div>`;
|
||||
}
|
||||
},
|
||||
})
|
||||
.use(require("markdown-it-fontawesome"))
|
||||
.use(require("markdown-it-footnote"))
|
||||
);
|
||||
|
||||
// override markdown-it-footnote anchor template to use a different unicode character
|
||||
md.renderer.rules.footnote_anchor = (tokens, idx, options, env, slf) => {
|
||||
var id = slf.rules.footnote_anchor_name(tokens, idx, options, env, slf);
|
||||
|
||||
if (tokens[idx].meta.subId > 0) {
|
||||
id += ":" + tokens[idx].meta.subId;
|
||||
}
|
||||
|
||||
/* ⇑ with escape code to prevent display as Apple Emoji on iOS */
|
||||
return (
|
||||
' <a href="#fnref' +
|
||||
id +
|
||||
'" class="footnote-backref">\u21d1\uFE0E</a>'
|
||||
);
|
||||
};
|
||||
|
||||
//for upgrade sanity
|
||||
//eleventyConfig.addPlugin(UpgradeHelper);
|
||||
|
||||
// eleventyConfig.addWatchTarget("./assets/css/");
|
||||
// eleventyConfig.addTransform(
|
||||
// "sass",
|
||||
// async function sassTransform(content, outputPath) {
|
||||
// if (outputPath?.endsWith(".css")) {
|
||||
// const { css } = await sassRender({
|
||||
// data: content,
|
||||
// outputStyle: "compressed",
|
||||
// precision: 3,
|
||||
// });
|
||||
// return css;
|
||||
// }
|
||||
// return content;
|
||||
// }
|
||||
// );
|
||||
|
||||
eleventyConfig.addFilter("relative_url", relativeURLALT);
|
||||
eleventyConfig.addFilter("absolute_url", absoluteUrl);
|
||||
|
||||
return {
|
||||
templateFormats: ["html", "liquid", "md", "njk"],
|
||||
|
||||
pathPrefix,
|
||||
|
||||
environment: "production",
|
||||
|
||||
// absolute_url: "https://tarasis.net/",
|
||||
passthroughFileCopy: true,
|
||||
|
||||
dir: {
|
||||
input: "src",
|
||||
includes: "_includes",
|
||||
data: "_data",
|
||||
output: "dist",
|
||||
// input: "./", // Equivalent to Jekyll's source property
|
||||
// output: "./_site", // Equivalent to Jekyll's destination property
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
function numberOfWords(content) {
|
||||
return content.split(/\s+/g).length;
|
||||
}
|
||||
|
||||
function relativeURL(url, pathPrefix = undefined) {
|
||||
if (pathPrefix !== undefined) {
|
||||
// Fall back on original url filter if pathPrefix is set.
|
||||
return urlFilter(url, pathPrefix);
|
||||
}
|
||||
|
||||
if (pathPrefix == undefined && this.page == undefined) {
|
||||
return urlFilter(url, "");
|
||||
}
|
||||
|
||||
// Look up the url of the current rendering page, which is accessible via
|
||||
// `this`.
|
||||
//console.log(this); // rmcg
|
||||
|
||||
// rmcg - removed ctx from this.ctx.page.url
|
||||
const currentDir = this.page.url;
|
||||
const filteredUrl = urlFilter(url, "/");
|
||||
|
||||
// Make sure the index.html is expressed.
|
||||
const indexUrl = indexify(filteredUrl);
|
||||
|
||||
// Check that the url doesn't specify a protocol.
|
||||
const u = new URL(indexUrl, "make-relative://");
|
||||
if (u.protocol !== "make-relative:") {
|
||||
// It has a protocol, so just return the filtered URL output.
|
||||
return filteredUrl;
|
||||
}
|
||||
|
||||
// Return the relative path, or `index.html` if it's the same as the current
|
||||
// page's directory.
|
||||
const relativePath = `${
|
||||
path.relative(currentDir, u.pathname) || "index.html"
|
||||
}`;
|
||||
return relativePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Just `{{ '/something' | url }}` will return the relative path to
|
||||
* `/something/index.html`.
|
||||
*
|
||||
* `{{ '/something.with.dots' | url }}` will return the relative path to
|
||||
* `/something.with.dots`.
|
||||
*
|
||||
* @param {string} url the URL to transform
|
||||
* @param {string} [pathPrefix] optional path prefix to force an absolute URL
|
||||
* @returns {string} resulting URL
|
||||
*/
|
||||
function relativeURLALT(url, pathPrefix = undefined) {
|
||||
pathPrefix = "/";
|
||||
// console.log(url);
|
||||
// console.log(pathPrefix);
|
||||
// console.log(this.page);
|
||||
if (pathPrefix !== undefined) {
|
||||
// Fall back on original url filter if pathPrefix is set.
|
||||
return urlFilter(url, pathPrefix);
|
||||
}
|
||||
|
||||
if (pathPrefix == undefined && this.page == undefined) {
|
||||
// console.log("dropping out");
|
||||
return urlFilter(url, "");
|
||||
}
|
||||
|
||||
// Look up the url of the current rendering page, which is accessible via
|
||||
// `this`.
|
||||
console.log(this);
|
||||
const currentDir = this.page.url;
|
||||
const filteredUrl = urlFilter(url, "/");
|
||||
|
||||
// Make sure the index.html is expressed.
|
||||
const indexUrl = indexify(filteredUrl);
|
||||
|
||||
// Check that the url doesn't specify a protocol.
|
||||
const u = new URL(indexUrl, "make-relative://");
|
||||
if (u.protocol !== "make-relative:") {
|
||||
// It has a protocol, so just return the filtered URL output.
|
||||
return filteredUrl;
|
||||
}
|
||||
|
||||
// Return the relative path, or `index.html` if it's the same as the current
|
||||
// page's directory.
|
||||
const relativePath = `${
|
||||
path.relative(currentDir, u.pathname) || "index.html"
|
||||
}`;
|
||||
return relativePath;
|
||||
}
|
||||
|
||||
function absoluteUrl(url) {
|
||||
if (url !== undefined) {
|
||||
return siteURL + url
|
||||
} else {
|
||||
return siteURL
|
||||
}
|
||||
}
|
||||
|
||||
function groupBy(array, key) {
|
||||
const get = entry => key.split('.').reduce((acc, key) => acc[key], entry)
|
||||
|
||||
const map = array.reduce((acc, entry) => {
|
||||
const value = get(entry)
|
||||
|
||||
if (typeof acc[value] === 'undefined') {
|
||||
acc[value] = []
|
||||
}
|
||||
|
||||
acc[value].push(entry)
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
return Object.keys(map).reduce(
|
||||
(acc, key) => [...acc, { name: key, items: map[key] }],
|
||||
[]
|
||||
)
|
||||
}
|
||||
|
|
@ -9,3 +9,81 @@ _site
|
|||
.jekyll-metadata
|
||||
|
||||
**/*/premdesigns
|
||||
|
||||
# ---> Eleventy
|
||||
|
||||
#_site
|
||||
|
||||
#package-lock.json
|
||||
css/main.css.map
|
||||
|
||||
# dependency directories
|
||||
node_modules/
|
||||
|
||||
# config
|
||||
.env*
|
||||
|
||||
# caches
|
||||
.cache
|
||||
.sass-cache/
|
||||
|
||||
# eleventy gulp build
|
||||
/dist
|
||||
|
||||
*.log
|
||||
npm-debug.*
|
||||
*.scssc
|
||||
*.swp
|
||||
Thumbs.db
|
||||
|
||||
dist
|
||||
src/_includes/css
|
||||
|
||||
# my chosen output directory.
|
||||
www
|
||||
|
||||
#### From FrontEnd Mentor gitignore. Just to avoid accidentally uploading design files
|
||||
#
|
||||
# Avoid accidental upload of the Sketch and Figma design files
|
||||
#####################################################
|
||||
## Please do not remove lines 5 and 6 - thanks! 🙂 ##
|
||||
#####################################################
|
||||
*.sketch
|
||||
*.fig
|
||||
|
||||
# Avoid accidental XD upload if you convert the design file
|
||||
###############################################
|
||||
## Please do not remove line 12 - thanks! 🙂 ##
|
||||
###############################################
|
||||
*.xd
|
||||
.prettierignore
|
||||
|
||||
# ---> macOS
|
||||
# General
|
||||
.DS_Store
|
||||
.AppleDouble
|
||||
.LSOverride
|
||||
|
||||
# Icon must end with two \r
|
||||
Icon
|
||||
|
||||
|
||||
# Thumbnails
|
||||
._*
|
||||
|
||||
# Files that might appear in the root of a volume
|
||||
.DocumentRevisions-V100
|
||||
.fseventsd
|
||||
.Spotlight-V100
|
||||
.TemporaryItems
|
||||
.Trashes
|
||||
.VolumeIcon.icns
|
||||
.com.apple.timemachine.donotpresent
|
||||
|
||||
# Directories potentially created on remote AFP share
|
||||
.AppleDB
|
||||
.AppleDesktop
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
|
|
|
@ -1,58 +0,0 @@
|
|||
---
|
||||
title: A short look back on my Camino de Santiago journey
|
||||
|
||||
tags:
|
||||
- life
|
||||
- camino
|
||||
- caminodesantiago
|
||||
category: camino
|
||||
---
|
||||
|
||||
A year ago tomorrow I began the most gruelling, yet immensely satisfying, journey of my life. I set off from my home in Buchholz in der Nordheide Germany, to fly to France to walk the Camino de Santiago.
|
||||
|
||||
Ostensibly the point of the walk was to find myself, to seek out something that had been missing in me for a long time. But it was also about trying to make a decision about what I was doing and my relationship with my wife.
|
||||
|
||||
I kinda failed at the latter point. I found while walking that often my brain zoned out and I wasn't thinking about what I should have been. I did however find something that (mostly) made me feel good.
|
||||
|
||||
My original intention was to take time along the way to stop for an extra day here and there to see places that I was walking through, but it never really happened. I kind of regret that, although the point of the walk was not to be a tourist.
|
||||
|
||||
I had fully intended to go back on the Camino this year (2020), but the unthinkable happened and the world entered a state of lock down that for now has no end in sight. The intention was to walk (mostly) different routes this time, because there are a heck of a lot of them.
|
||||
|
||||
I didn't want to end when I did, I wasn't ready to back and quite honestly, I'm still not ready to.
|
||||
|
||||
## Some Stats, Dates, and Figures
|
||||
|
||||
- I walked 2 camino's. The Camino Frances & Camino Portuguese (Porto; More Costal Route + Espiritual Variente)
|
||||
- I flew from Hamburg to France on the 28th of May 2019
|
||||
- I started the Camino de Santiago, leaving Saint-Jean-Pied-de-Port on the 31st of May 2019
|
||||
- I finished the Camino on the 8th July 2019, when I arrived in Santiago de Compostela
|
||||
- I left the next day for Finisterre
|
||||
- I arrived in Finisterre on the 11th of July 2019
|
||||
- I start the Camino Portuguese on the 18th July 2019
|
||||
- I arrived in Santiago de Compostela on the 31st of July 2019
|
||||
- I flew back to Hamburg from Porto on the 6th of August 2019 (walking 14km to the airport from Porto)
|
||||
|
||||
- I took 3 rest days (3rd, 8th and 23rd of June). The first 2 where not because I actually needed to rest, but because I had the wrong shoes and they where messing my feet up. (which gave me a couple of nasty blisters)
|
||||
- I bought a new pair of shoes on the evening of the 7th of June, which I then used the rest of the way.
|
||||
- I sent roughly 2kg of stuff home on the 8th of June, stuff I thought I needed but didn't
|
||||
|
||||
Originally I was track my steps / distances using a Fitbit HR and my iPhone 6S. However because of issues charging the HR (connector area broke), I gave up using it on July 6th.
|
||||
|
||||
In total I walked at least 1643km. This was a combination of the daily Camino walks, plus any extra after I arrived at my destination.
|
||||
|
||||
| Section | Stage Distance Walked | Total walked that stage |
|
||||
| ------- | -------- | ------- |
|
||||
| Camino Frances | 793.04km | 972.3km |
|
||||
| Santiago to Finisterre | 96.16km | 105.9km |
|
||||
| Camino Portuguese | 299.14km | 402.9km |
|
||||
| **Totals:** | **1,188.34km** | **1,481.1km** |
|
||||
|
||||
The remaining 160km was days walking around Finisterre, Muxia, Santiago and Porto.
|
||||
|
||||
## Photos
|
||||
|
||||
Over the next little while I am going to post photos from my journey, more than I did at the time on Instagram (which had a limit of 10 per post).
|
||||
|
||||
I'll try and add context to them, and a bit about where they where taken.
|
||||
|
||||
Anyway, enough for now. I intend, body willing, to locally repeat the Camino distances over the next 2 months.
|
|
@ -1,4 +0,0 @@
|
|||
---
|
||||
layout: post
|
||||
title: pretty-terminal-configs
|
||||
---
|
|
@ -0,0 +1,742 @@
|
|||
0a1
|
||||
>
|
||||
13d13
|
||||
<
|
||||
19a20,21
|
||||
> <meta property="article:author" content="Robert McGovern">
|
||||
>
|
||||
22c24
|
||||
< <meta property="og:type" content="website">
|
||||
---
|
||||
> <meta property="og:type" content="article">
|
||||
26c28
|
||||
< <meta property="og:url" content="http://localhost:4000/">
|
||||
---
|
||||
> <meta property="og:url" content="index.html">
|
||||
33c35
|
||||
< <meta property="og:image" content="http://localhost:4000/assets/images/bio-photo.jpg">
|
||||
---
|
||||
> <meta property="og:image" content="index.html">
|
||||
40c42
|
||||
< <meta name="twitter:url" content="http://localhost:4000/">
|
||||
---
|
||||
> <meta name="twitter:url" content="index.html">
|
||||
43,46c45,46
|
||||
< <meta name="twitter:card" content="summary">
|
||||
<
|
||||
< <meta name="twitter:image" content="http://localhost:4000/assets/images/bio-photo.jpg">
|
||||
<
|
||||
---
|
||||
> <meta name="twitter:card" content="summary_large_image">
|
||||
> <meta name="twitter:image" content="index.html">
|
||||
52a53
|
||||
> <meta property="article:published_time" content="2020-03-05T11:10:24+00:00">
|
||||
56a58
|
||||
>
|
||||
62c64
|
||||
< <link rel="canonical" href="http://localhost:4000/">
|
||||
---
|
||||
> <link rel="canonical" href="index.html">
|
||||
66d67
|
||||
< <link rel="next" href="http://localhost:4000/page2/">
|
||||
68d68
|
||||
<
|
||||
75c75
|
||||
< "url": "http://localhost:4000/"
|
||||
---
|
||||
> "url": "index.html"
|
||||
90c90
|
||||
< <link href="/feed.xml" type="application/atom+xml" rel="alternate" title="TDN: RMCG Feed">
|
||||
---
|
||||
> <link href="feed.xml" type="application/atom+xml" rel="alternate" title="TDN: RMCG Feed">
|
||||
101c101
|
||||
< <link rel="stylesheet" href="/assets/css/main.css">
|
||||
---
|
||||
> <link rel="stylesheet" href="assets/css/main.css">
|
||||
107c107
|
||||
< <script src="/assets/js/progress.js"></script>
|
||||
---
|
||||
> <script src="assets/js/progress.js"></script>
|
||||
109c109
|
||||
< <script src="/assets/js/scroll-to-top.js"></script>
|
||||
---
|
||||
> <script src="assets/js/scroll-to-top.js"></script>
|
||||
118c118
|
||||
< <body class="layout--home">
|
||||
---
|
||||
> <body class="layout--">
|
||||
138c138
|
||||
< <a class="site-logo" href="/"><img src="/assets/images/apple-touch-icon.png" alt="TDN: RMCG"></a>
|
||||
---
|
||||
> <a class="site-logo" href="index.html"><img src="assets/images/apple-touch-icon.png" alt="TDN: RMCG"></a>
|
||||
140c140
|
||||
< <a class="site-title" href="/">
|
||||
---
|
||||
> <a class="site-title" href="index.html">
|
||||
144,152c144
|
||||
< <ul class="visible-links"><li class="masthead__menu-item">
|
||||
< <a href="/year-archive/">Posts</a>
|
||||
< </li><li class="masthead__menu-item">
|
||||
< <a href="/tags/">Tags</a>
|
||||
< </li><li class="masthead__menu-item">
|
||||
< <a href="/categories/">Categories</a>
|
||||
< </li><li class="masthead__menu-item">
|
||||
< <a href="/about/">About</a>
|
||||
< </li></ul>
|
||||
---
|
||||
> <ul class="visible-links"></ul>
|
||||
174a167
|
||||
>
|
||||
177,178d169
|
||||
< <div class="sidebar sticky">
|
||||
<
|
||||
181,331d171
|
||||
< <div itemscope itemtype="https://schema.org/Person">
|
||||
<
|
||||
<
|
||||
< <div class="author__avatar">
|
||||
<
|
||||
< <img src="/assets/images/bio-photo.jpg" alt="Robert McGovern" itemprop="image">
|
||||
<
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
< <div class="author__content">
|
||||
<
|
||||
< <h3 class="author__name" itemprop="name">Robert McGovern</h3>
|
||||
<
|
||||
<
|
||||
< <div class="author__bio" itemprop="description">
|
||||
< <p>Wannabe field researcher for the Hitchhikers Guide to the Galaxy</p>
|
||||
<
|
||||
< </div>
|
||||
<
|
||||
< </div>
|
||||
<
|
||||
< <div class="author__urls-wrapper">
|
||||
< <button class="btn btn--inverse">Follow</button>
|
||||
< <ul class="author__urls social-icons">
|
||||
<
|
||||
< <li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
|
||||
< <i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">ZZ9 Plural Z Alpha</span>
|
||||
< </li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://tarasis.net" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">Website</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="mailto:rob@tarasis.net" rel="nofollow noopener noreferrer"><i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">Email</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.linkedin.com/in/robertmcgovern/" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">Linkedin</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://github.com/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">Github</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://twitter.com/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">Twitter</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.facebook.com/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span class="label">Facebook</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://instagram.com/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-instagram" aria-hidden="true"></i><span class="label">Instagram</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.flickr.com/photos/tarasis/" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-flickr" aria-hidden="true"></i><span class="label">Flickr</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.youtube.com/user/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">Youtube</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://soundcloud.com/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i><span class="label">Soundcloud</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.last.fm/user/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-lastfm" aria-hidden="true"></i><span class="label">Last.FM</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.reddit.com/user/tarasis" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-reddit" aria-hidden="true"></i><span class="label">Reddit</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="https://www.pinterest.com/tarasis/" rel="nofollow noopener noreferrer"><i class="fab fa-fw fa-pinterest" aria-hidden="true"></i><span class="label">Pinterest</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <!--
|
||||
< <li>
|
||||
< <a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
< <i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
|
||||
< </a>
|
||||
< </li>
|
||||
< -->
|
||||
< </ul>
|
||||
< </div>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
338d177
|
||||
< <h3 class="archive__subtitle">Recent posts</h3>
|
||||
340a180
|
||||
> <h3 class="archive__subtitle">Recent Posts</h3>
|
||||
343d182
|
||||
< <div class="entries-list">
|
||||
345d183
|
||||
<
|
||||
349,384c187
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2022/10/15/frontend-mentor-challenge-deployment/" rel="permalink">What happens when I finish a Frontend Mentor Challenge (or how I build and deploy an 11ty site)
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 4 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">I’ve been doing challenges from Frontend Mentor as a means to practice frontend web development. Specifically working with plain HTML, CSS and JavaScript.
|
||||
<
|
||||
< R...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
---
|
||||
> <div class="entries-list">
|
||||
386,421d188
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2020/05/27/camino-de-santiago/" rel="permalink">A short look back on my Camino de Santiago journey
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 3 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">A year ago tomorrow I began the most gruelling, yet immensely satisfying, journey of my life. I set off from my home in Buchholz in der Nordheide Germany, to...</p>
|
||||
< </article>
|
||||
424,425d190
|
||||
<
|
||||
<
|
||||
429,812d193
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2020/04/21/learning-web-development/" rel="permalink">Learning Web Development
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 2 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">I mentioned in the goals post, one of the things I am aiming to do is to start learning web development.
|
||||
<
|
||||
< I was well aware that what falls under the banner o...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2020/04/20/swift-coding-challenge-2/" rel="permalink">Swift Coding Challenges: Challenge 2
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 1 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Second one within 13 hours, good lord, that would never do.
|
||||
<
|
||||
< So this challenge was to test if a string matched against the reverse of itself. Basically a pal...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2020/04/20/swift-coding-challenges/" rel="permalink">Swift Coding Challenges: Challenge 1
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< less than 1 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">As an effort to improve and challenge myself I got a copy of Paul Hudson’s Swift Coding Challenges book and I’m going to work through it and post my thoughts...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2020/04/17/goals/" rel="permalink">Goals
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 6 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Long time, no write.
|
||||
<
|
||||
< A lot has changed in my life, not least of which is that I am no longer a stay at home dad or living in Germany. For now I am back home...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2019/06/17/Day21/" rel="permalink">Day 21
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 2 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Day 21 of trip
|
||||
<
|
||||
< Day Frómista to Carrión de los Condes. 18.88km according to app. 19.18km with Phone GPS (minor detour). Was walking quickly. Which Fitbit doe...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2019/06/15/Day19/" rel="permalink">Day 19
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 3 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Day 19 of trip
|
||||
<
|
||||
< Day 16 of walk.
|
||||
<
|
||||
< Today was Hornillos del Camino to Castrojeriz (19.47km)
|
||||
<
|
||||
< Weather: cool, grey and minimal sun (nice to walk in)
|
||||
<
|
||||
< Terrain: lig...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2019/06/14/Day-2018/" rel="permalink">Day 18 - drawn to stop
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 4 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Day 18
|
||||
<
|
||||
< Burgos to Hornillos del Camino ~22km
|
||||
<
|
||||
< Weather was pleasant but cool
|
||||
<
|
||||
< Terrain most flat, gravel & roads
|
||||
<
|
||||
< Woke up at 3am freezing and no blanket to...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <div class="list__item">
|
||||
< <article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<
|
||||
< <h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
<
|
||||
< <a href="/2019/06/13/Day-2017/" rel="permalink">Day 17
|
||||
< </a>
|
||||
<
|
||||
< </h2>
|
||||
<
|
||||
<
|
||||
< <p class="page__meta">
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <span class="page__meta-readtime">
|
||||
< <i class="far fa-clock" aria-hidden="true"></i>
|
||||
<
|
||||
< 3 minute read
|
||||
<
|
||||
< </span>
|
||||
<
|
||||
< </p>
|
||||
<
|
||||
<
|
||||
< <p class="archive__item-excerpt" itemprop="description">Day 17
|
||||
<
|
||||
< So it’s day 17 of the trip and day 14 of the Camino (day 12 if you take out 2 rest days)
|
||||
<
|
||||
< Woke at 6 pretty impressed that I didn’t hear the 2 women i...</p>
|
||||
< </article>
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
< </div>
|
||||
<
|
||||
<
|
||||
< <nav class="pagination">
|
||||
<
|
||||
< <ul>
|
||||
<
|
||||
<
|
||||
< <li><a href="#" class="disabled"><span aria-hidden="true">Previous</span></a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="#" class="disabled current">1</a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="/page2/">2</a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="/page3/">3</a></li>
|
||||
<
|
||||
<
|
||||
<
|
||||
<
|
||||
< <li><a href="/page2/">Next</a></li>
|
||||
<
|
||||
< </ul>
|
||||
< </nav>
|
||||
<
|
||||
<
|
||||
<
|
||||
841,842d221
|
||||
< <li><strong>Follow:</strong></li>
|
||||
<
|
||||
869c248
|
||||
< <li><a href="/feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
|
||||
---
|
||||
> <li><a href="feed.xml"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> Feed</a></li>
|
||||
874c253
|
||||
< <div class="page__footer-copyright">© 2023 Robert McGovern. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
|
||||
---
|
||||
> <div class="page__footer-copyright">© %2023 Robert McGovern. Powered by <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
|
||||
880c259
|
||||
< <script src="/assets/js/main.min.js"></script>
|
||||
---
|
||||
> <script src="assets/js/main.min.js"></script>
|
||||
884a264
|
||||
>
|
||||
886,889c266,268
|
||||
< <script src="/assets/js/lunr/lunr.min.js"></script>
|
||||
< <script src="/assets/js/lunr/lunr-store.js"></script>
|
||||
< <script src="/assets/js/lunr/lunr-en.js"></script>
|
||||
<
|
||||
---
|
||||
> <script src="assets/js/lunr/lunr.min.js"></script>
|
||||
> <script src="assets/js/lunr/lunr-store.js"></script>
|
||||
> <script src="assets/js/lunr/lunr-en.js"></script>
|
|
@ -0,0 +1,60 @@
|
|||
// Credits 🙇 for original ideas to:
|
||||
// Fork of https://github.com/vimtor/eleventy-plugin-external-links
|
||||
// css.gg SVG icon https://github.com/astrit/css.gg/blob/master/icons/svg/external.svg
|
||||
|
||||
const { parse, HTMLElement } = require("node-html-parser");
|
||||
const { extname } = require("path");
|
||||
|
||||
module.exports = eleventyConfig => {
|
||||
const options = {
|
||||
name: "external-links",
|
||||
regex: new RegExp("^(([a-z]+:)|(//))", "i"),
|
||||
target: "_blank",
|
||||
rel: "noopener noreferrer nofollow",
|
||||
extensions: [".html"],
|
||||
};
|
||||
|
||||
eleventyConfig.addTransform(options.name, (content, outputPath) => {
|
||||
if (outputPath && options.extensions.includes(extname(outputPath))) {
|
||||
const root = parse(content);
|
||||
const links = root.querySelectorAll("a");
|
||||
links
|
||||
.filter(link => {
|
||||
const href = link.getAttribute("href");
|
||||
return (
|
||||
href &&
|
||||
options.regex.test(href) &&
|
||||
!link.getAttribute("rel") &&
|
||||
!link.getAttribute("target")
|
||||
);
|
||||
})
|
||||
.forEach(link => {
|
||||
link.setAttribute("target", options.target);
|
||||
link.setAttribute("rel", options.rel);
|
||||
|
||||
const srText = new HTMLElement("span", { class: "sr-only" });
|
||||
srText.textContent = "(opens in a new window)";
|
||||
|
||||
const icon = new HTMLElement(
|
||||
"svg",
|
||||
{},
|
||||
`viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true"`
|
||||
);
|
||||
icon.set_content(`
|
||||
<path
|
||||
d="M15.6396 7.02527H12.0181V5.02527H19.0181V12.0253H17.0181V8.47528L12.1042 13.3892L10.6899 11.975L15.6396 7.02527Z"
|
||||
fill="currentColor"
|
||||
/>
|
||||
<path
|
||||
d="M10.9819 6.97473H4.98193V18.9747H16.9819V12.9747H14.9819V16.9747H6.98193V8.97473H10.9819V6.97473Z"
|
||||
fill="currentColor"
|
||||
/>`);
|
||||
link.appendChild(srText);
|
||||
link.appendChild(icon);
|
||||
});
|
||||
|
||||
return root.toString();
|
||||
}
|
||||
return content;
|
||||
});
|
||||
};
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,17 @@
|
|||
Notes from transitioning blog from Jekyll to 11ty, but still using Jekyll theme Minimal Mistakes.
|
||||
|
||||
Just to see if it reduces that cpu usage. Nope.
|
||||
|
||||
Removed from site.json
|
||||
|
||||
```
|
||||
"post_template": "post",
|
||||
"page_template": "page",
|
||||
"draft_template": "draft"
|
||||
```
|
||||
|
||||
hacked pathPrefix into relativeURLAlt function because for some reason it isn't being picked up from the above return.
|
||||
|
||||
author_profile.html for adding mastodon
|
||||
|
||||
invalid date format https://github.com/11ty/eleventy/issues/413
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,62 @@
|
|||
{
|
||||
"name": "tarasis.net",
|
||||
"version": "2.0.0",
|
||||
"description": "Second generation of site using 11ty for building but using Jekyll theme Minimal Mistakes (with mods to make it work)",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"build:sass": "sass --load-path=src/_sass --style=compressed dist/assets/css/tocompile.scss dist/assets/css/main.css",
|
||||
"watch:eleventy": "eleventy --serve",
|
||||
"build:eleventy": "eleventy",
|
||||
"clean": "rm -rf dist",
|
||||
"postbuild": "",
|
||||
"start": "npm-run-all clean build:eleventy build:sass --parallel watch:*",
|
||||
"build": "npm-run-all clean build:eleventy build:sass",
|
||||
"debug": "DEBUG=Eleventy:* eleventy"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "forgejo@git.tarasis.net:tarasis/tarasis.net.git"
|
||||
},
|
||||
"keywords": [
|
||||
"website",
|
||||
"blog",
|
||||
"11ty",
|
||||
"jekyll"
|
||||
],
|
||||
"author": "Robert McGovern et all",
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"@11ty/eleventy": "^2.0.0-beta.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@11ty/eleventy-navigation": "^0.3.5",
|
||||
"@11ty/eleventy-plugin-rss": "^1.2.0",
|
||||
"@11ty/eleventy-plugin-syntaxhighlight": "^4.2.0",
|
||||
"@11ty/eleventy-upgrade-help": "^2.0.5",
|
||||
"autoprefixer": "^10.4.13",
|
||||
"const": "^1.0.0",
|
||||
"eleventy-load": "^0.3.1",
|
||||
"eleventy-load-css": "^0.3.0",
|
||||
"eleventy-load-file": "^0.1.0",
|
||||
"eleventy-load-html": "^0.1.1",
|
||||
"eleventy-load-sass": "^0.1.2",
|
||||
"eleventy-plugin-description": "^0.1.5",
|
||||
"eleventy-plugin-toc": "^1.1.5",
|
||||
"eleventy-xml-plugin": "^0.1.0",
|
||||
"fs-extra": "^11.1.0",
|
||||
"js-yaml": "^4.1.0",
|
||||
"lightningcss-cli": "^1.18.0",
|
||||
"markdown-it": "^13.0.1",
|
||||
"markdown-it-anchor": "^8.6.6",
|
||||
"markdown-it-attrs": "^4.1.6",
|
||||
"markdown-it-container": "^3.0.0",
|
||||
"markdown-it-fontawesome": "^0.3.0",
|
||||
"markdown-it-footnote": "^3.0.3",
|
||||
"markdownify": "^0.1.0",
|
||||
"moment": "^2.29.4",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"postcss": "^8.4.21",
|
||||
"sass": "^1.57.1",
|
||||
"slugify": "^1.6.5"
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
*.sublime-project
|
||||
*.sublime-workspace
|
||||
vendor
|
||||
.asset-cache
|
||||
.bundle
|
||||
.jekyll-assets-cache
|
||||
.sass-cache
|
||||
assets/js/plugins
|
||||
assets/js/_main.js
|
||||
assets/js/vendor
|
||||
Capfile
|
||||
CHANGELOG
|
||||
CHANGELOG.md
|
||||
config
|
||||
Gemfile
|
||||
Gruntfile.js
|
||||
gulpfile.js
|
||||
LICENSE
|
||||
log
|
||||
node_modules
|
||||
package.json
|
||||
package-lock.json
|
||||
Rakefile
|
||||
README
|
||||
README.md
|
||||
tmp
|
||||
test
|
||||
docs
|
||||
_site
|
||||
#index.html
|
||||
#/docs # ignore Minimal Mistakes /docs
|
||||
#test # ignore Minimal Mistakes /test
|
||||
|
|
@ -1,9 +1,7 @@
|
|||
# main links
|
||||
main:
|
||||
# - title: ""
|
||||
# url: /docs/quick-start-guide/
|
||||
- title: "Posts"
|
||||
url: /year-archive/
|
||||
# - title: "Posts"
|
||||
# url: /year-archive/
|
||||
- title: "Tags"
|
||||
url: /tags/
|
||||
- title: "Categories"
|
|
@ -0,0 +1,364 @@
|
|||
{
|
||||
"theme": "minimal-mistakes-jekyll",
|
||||
"minimal_mistakes_skin": "neon",
|
||||
"locale": "en-US",
|
||||
"title": "TDN: RMCG",
|
||||
"title_separator": "-",
|
||||
"name": "Robert McGovern",
|
||||
"description": "Random Things",
|
||||
"url": "https://tarasis.net",
|
||||
"baseurl": "",
|
||||
"repository": null,
|
||||
"teaser": null,
|
||||
"logo": "/assets/images/apple-touch-icon.png",
|
||||
"masthead_title": "",
|
||||
"subtitle": "👨💻 🚶♂️ 💭 🤯",
|
||||
"breadcrumbs": false,
|
||||
"breadcrumb_home_label": "Home",
|
||||
"breadcrumb_separator": ">",
|
||||
"words_per_minute": 200,
|
||||
"head_scripts": [
|
||||
"/assets/js/progress.js",
|
||||
"/assets/js/scroll-to-top.js"
|
||||
],
|
||||
"comments": {
|
||||
"provider": "disqus",
|
||||
"disqus": {
|
||||
"shortname": "tarasis"
|
||||
},
|
||||
"discourse": {
|
||||
"server": null
|
||||
},
|
||||
"facebook": {
|
||||
"appid": null,
|
||||
"num_posts": null,
|
||||
"colorscheme": null
|
||||
},
|
||||
"utterances": {
|
||||
"theme": null,
|
||||
"issue_term": null
|
||||
}
|
||||
},
|
||||
"staticman": {
|
||||
"allowedFields": [
|
||||
"name",
|
||||
"email",
|
||||
"url",
|
||||
"message"
|
||||
],
|
||||
"branch": null,
|
||||
"commitMessage": "New comment by {fields.name}",
|
||||
"filename": "comment-{@timestamp}",
|
||||
"format": "yml",
|
||||
"moderation": true,
|
||||
"path": "_data/comments/{options.slug}",
|
||||
"requiredFields": [
|
||||
"name",
|
||||
"email",
|
||||
"message"
|
||||
],
|
||||
"transforms": {
|
||||
"email": "md5"
|
||||
},
|
||||
"generatedFields": {
|
||||
"date": {
|
||||
"type": "date",
|
||||
"options": {
|
||||
"format": "iso8601"
|
||||
}
|
||||
}
|
||||
},
|
||||
"endpoint": null
|
||||
},
|
||||
"atom_feed": {
|
||||
"path": null
|
||||
},
|
||||
"search": true,
|
||||
"search_full_content": true,
|
||||
"search_provider": "lunr",
|
||||
"algolia": {
|
||||
"application_id": "F5FF4IDLYX",
|
||||
"index_name": "tarasis-blog",
|
||||
"search_only_api_key": "ed656902b5bdd356f885bf9d99635fc1",
|
||||
"powered_by": true
|
||||
},
|
||||
"google_site_verification": null,
|
||||
"bing_site_verification": null,
|
||||
"yandex_site_verification": null,
|
||||
"twitter": {
|
||||
"username": "tarasis"
|
||||
},
|
||||
"facebook": {
|
||||
"username": "tarasis",
|
||||
"app_id": null,
|
||||
"publisher": null
|
||||
},
|
||||
"og_image": "/assets/images/bio-photo.jpg",
|
||||
"social": {
|
||||
"type": null,
|
||||
"name": null,
|
||||
"links": null
|
||||
},
|
||||
"analytics": {
|
||||
"provider": false,
|
||||
"google": {
|
||||
"tracking_id": null
|
||||
}
|
||||
},
|
||||
"author": {
|
||||
"name": "Robert McGovern",
|
||||
"avatar": "/assets/images/bio-photo.jpg",
|
||||
"bio": "Wannabe field researcher for the Hitchhikers Guide to the Galaxy",
|
||||
"location": "ZZ9 Plural Z Alpha",
|
||||
"links": [
|
||||
{
|
||||
"label": "Website",
|
||||
"icon": "fas fa-fw fa-link",
|
||||
"url": "https://tarasis.net"
|
||||
},
|
||||
{
|
||||
"label": "Email",
|
||||
"icon": "fas fa-fw fa-envelope-square",
|
||||
"url": "mailto:rob@tarasis.net"
|
||||
},
|
||||
{
|
||||
"label": "Linkedin",
|
||||
"icon": "fab fa-fw fa-linkedin",
|
||||
"url": "https://www.linkedin.com/in/robertmcgovern/"
|
||||
},
|
||||
{
|
||||
"label": "Github",
|
||||
"icon": "fab fa-fw fa-github",
|
||||
"url": "https://github.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Twitter",
|
||||
"icon": "fab fa-fw fa-twitter-square",
|
||||
"url": "https://twitter.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Mastodon",
|
||||
"icon": "fab fa-fw fa-mastodon",
|
||||
"url": "https://social.tarasis.net/@tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Facebook",
|
||||
"icon": "fab fa-fw fa-facebook",
|
||||
"url": "https://www.facebook.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Instagram",
|
||||
"icon": "fab fa-fw fa-instagram",
|
||||
"url": "https://instagram.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Flickr",
|
||||
"icon": "fab fa-fw fa-flickr",
|
||||
"url": "https://www.flickr.com/photos/tarasis/"
|
||||
},
|
||||
{
|
||||
"label": "Youtube",
|
||||
"icon": "fab fa-fw fa-youtube",
|
||||
"url": "https://www.youtube.com/user/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Soundcloud",
|
||||
"icon": "fab fa-fw fa-soundcloud",
|
||||
"url": "https://soundcloud.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Last.FM",
|
||||
"icon": "fab fa-fw fa-lastfm",
|
||||
"url": "https://www.last.fm/user/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Reddit",
|
||||
"icon": "fab fa-fw fa-reddit",
|
||||
"url": "https://www.reddit.com/user/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Pinterest",
|
||||
"icon": "fab fa-fw fa-pinterest",
|
||||
"url": "https://www.pinterest.com/tarasis/"
|
||||
}
|
||||
]
|
||||
},
|
||||
"footer": {
|
||||
"links": [
|
||||
{
|
||||
"label": "Email",
|
||||
"icon": "fas fa-fw fa-envelope-square",
|
||||
"url": "mailto:rob@tarasis.net"
|
||||
},
|
||||
{
|
||||
"label": "Twitter",
|
||||
"icon": "fab fa-fw fa-twitter-square",
|
||||
"url": "https://twitter.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Mastodon",
|
||||
"icon": "fab fa-fw fa-mastodon",
|
||||
"url": "https://social.tarasis.net/@tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Facebook",
|
||||
"icon": "fab fa-fw fa-facebook",
|
||||
"url": "https://www.facebook.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "GitHub",
|
||||
"icon": "fab fa-fw fa-github",
|
||||
"url": "https://github.com/tarasis"
|
||||
},
|
||||
{
|
||||
"label": "Instagram",
|
||||
"icon": "fab fa-fw fa-instagram",
|
||||
"url": "https://instagram.com/tarasis"
|
||||
}
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
".htaccess",
|
||||
"_pages"
|
||||
],
|
||||
"exclude": [
|
||||
"*.sublime-project",
|
||||
"*.sublime-workspace",
|
||||
"vendor",
|
||||
".asset-cache",
|
||||
".bundle",
|
||||
".jekyll-assets-cache",
|
||||
".jekyll-cache",
|
||||
".sass-cache",
|
||||
"assets/js/plugins",
|
||||
"assets/js/_main.js",
|
||||
"assets/js/vendor",
|
||||
"Capfile",
|
||||
"CHANGELOG",
|
||||
"config",
|
||||
"Gemfile",
|
||||
"Gruntfile.js",
|
||||
"gulpfile.js",
|
||||
"LICENSE",
|
||||
"log",
|
||||
"node_modules",
|
||||
"package.json",
|
||||
"Rakefile",
|
||||
"README",
|
||||
"tmp"
|
||||
],
|
||||
"keep_files": [
|
||||
".git",
|
||||
".svn"
|
||||
],
|
||||
"encoding": "utf-8",
|
||||
"markdown_ext": "markdown,mkdown,mkdn,mkd,md",
|
||||
"strict_front_matter": true,
|
||||
"liquid": {
|
||||
"error_mode": "strict"
|
||||
},
|
||||
"markdown": "kramdown",
|
||||
"highlighter": "rouge",
|
||||
"lsi": false,
|
||||
"excerpt_separator": "<!--more-->",
|
||||
"incremental": false,
|
||||
"kramdown": {
|
||||
"input": "GFM",
|
||||
"hard_wrap": false,
|
||||
"auto_ids": true,
|
||||
"footnote_nr": 1,
|
||||
"entity_output": "as_char",
|
||||
"toc_levels": "1..6",
|
||||
"smart_quotes": "lsquo,rsquo,ldquo,rdquo",
|
||||
"enable_coderay": false
|
||||
},
|
||||
"sass": {
|
||||
"sass_dir": "_sass",
|
||||
"style": "compressed"
|
||||
},
|
||||
"permalink": "/:year/:month/:day/:title/",
|
||||
"paginate": 10,
|
||||
"paginate_path": "/page:num/",
|
||||
"timezone": null,
|
||||
"plugins": [
|
||||
"jekyll-archives",
|
||||
"jekyll-paginate",
|
||||
"jekyll-sitemap",
|
||||
"jekyll-gist",
|
||||
"jekyll-feed",
|
||||
"jemoji",
|
||||
"jekyll-include-cache",
|
||||
"jekyll-gist"
|
||||
],
|
||||
"whitelist": [
|
||||
"jekyll-archives",
|
||||
"jekyll-paginate",
|
||||
"jekyll-sitemap",
|
||||
"jekyll-gist",
|
||||
"jekyll-feed",
|
||||
"jemoji",
|
||||
"jekyll-include-cache",
|
||||
"jekyll-gist"
|
||||
],
|
||||
"category_archive": {
|
||||
"type": "liquid",
|
||||
"path": "/categories/"
|
||||
},
|
||||
"tag_archive": {
|
||||
"type": "liquid",
|
||||
"path": "/tags/"
|
||||
},
|
||||
"compress_html": {
|
||||
"clippings": "all",
|
||||
"ignore": {
|
||||
"envs": "development"
|
||||
}
|
||||
},
|
||||
"collections": {
|
||||
"recipes": {
|
||||
"output": true,
|
||||
"permalink": "/:collection/:path/"
|
||||
},
|
||||
"pets": {
|
||||
"output": true,
|
||||
"permalink": "/:collection/:path/"
|
||||
},
|
||||
"portfolio": {
|
||||
"output": true,
|
||||
"permalink": "/:collection/:path/"
|
||||
}
|
||||
},
|
||||
"defaults": {
|
||||
"posts": {
|
||||
"path": "_posts",
|
||||
"type": "posts",
|
||||
"layout": "single",
|
||||
"classes": "wide",
|
||||
"author_profile": true,
|
||||
"read_time": true,
|
||||
"share": true,
|
||||
"related": true,
|
||||
"comments": true,
|
||||
"sidebar":true,
|
||||
"show_date": true
|
||||
},
|
||||
"pages": {
|
||||
"path": "_pages",
|
||||
"type": "pages",
|
||||
"layout": "single",
|
||||
"author_profile": true
|
||||
},
|
||||
"recipies": {
|
||||
"path": "",
|
||||
"type": "recipes",
|
||||
"layout": "single",
|
||||
"author_profile": true,
|
||||
"share": true
|
||||
}
|
||||
},
|
||||
"post_ext": "markdown",
|
||||
"page_ext": "html",
|
||||
"post_layout": "single",
|
||||
"page_layout": "page",
|
||||
"titlecase": true
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -6,6 +6,7 @@ share: true
|
|||
related: true
|
||||
title: 'An End of Sorts'
|
||||
tag: [Life, Work]
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
Lets be clear up front: ITS MY **FAULT**.
|
|
@ -2,6 +2,8 @@
|
|||
title: Cash Register Challenge on freeCodeCamp
|
||||
tags: [webdev, javascript, freecodecamp]
|
||||
category: programming
|
||||
eleventyExcludeFromCollections: true
|
||||
layout: single
|
||||
---
|
||||
|
||||
I've been (slowly) working through the JavaScript module on [freeCodeCamp](https://freecodecamp.org) for a while now, and have recently been doing the certificate challenges. The last of which is the "Cash Register" challenge where you are to write a function that takes a price, a payment amount and an array that contains the cash in the drawer.
|
|
@ -2,6 +2,7 @@
|
|||
title: CSS Properties, or I have a problem.
|
||||
tags: [webdev, css]
|
||||
category: programming
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
title: What happens when I finish a Frontend Mentor Challenge
|
||||
tags: [webdev, site, frontendmentor]
|
||||
category: [programming, webdev]
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
I've been doing challenges from [Frontend Mentor](https://frontendmentor.io) as a means to practice frontend web development. Specifically working with plain HTML, CSS and JavaScript.
|
|
@ -2,6 +2,8 @@
|
|||
title: Filtering
|
||||
tags: [webdev, javascript]
|
||||
category: programming
|
||||
eleventyExcludeFromCollections: true
|
||||
|
||||
---
|
||||
|
||||
I was watching the video [How To Create A Search Bar In JavaScript](https://www.youtube.com/watch?v=TlP5WIxVirU) by [Web Dev Simplified](https://www.youtube.com/channel/UCFbNIlppjAuEX4znoulh0Cw) to learn how to do a search bar in JavaScript.
|
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
layout: single
|
||||
title: pretty-terminal-configs
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
|
@ -6,6 +6,7 @@ share: true
|
|||
related: true
|
||||
title: 'Superheroes'
|
||||
tag: [Movies, TV, Comics]
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
Test
|
|
@ -6,6 +6,7 @@ tags:
|
|||
- swift
|
||||
- coding-challenges
|
||||
category: coding-challenges
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
# Challenge 3
|
|
@ -7,6 +7,7 @@ related: true
|
|||
title: SwiftUI
|
||||
tags: [swiftui,programming,ios, swift]
|
||||
category: Programming
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
|
||||
Its been a long while since I sat and did programming, but between a life situation and the new technology from Apple for creating user interfaces (SwiftUI), I've been inspired to pickup again an idea I've been kicking around for 10 years.
|
|
@ -4,6 +4,8 @@ title: terminal-colors
|
|||
tags:
|
||||
- programming
|
||||
category: programming
|
||||
eleventyExcludeFromCollections: true
|
||||
|
||||
|
||||
---
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
title: Writeup
|
||||
tags: [camino,caminodesantiago,jakobsweg,life]
|
||||
category: personal
|
||||
eleventyExcludeFromCollections: true
|
||||
---
|
||||
Its been a long while since I posted. I fell behind on my Camino posts, although I continued to take notes for a while, before I ended up giving up on those too.
|
||||
|
|
@ -0,0 +1,3 @@
|
|||
<!-- start custom analytics snippet -->
|
||||
|
||||
<!-- end custom analytics snippet -->
|
|
@ -0,0 +1,9 @@
|
|||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.tracking_id }}"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', '{{ site.analytics.google.tracking_id }}', { 'anonymize_ip': {{ site.analytics.google.anonymize_ip | default: false }}});
|
||||
</script>
|
|
@ -0,0 +1,7 @@
|
|||
<script>
|
||||
window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;
|
||||
ga('create','{{ site.analytics.google.tracking_id }}','auto');
|
||||
ga('set', 'anonymizeIp', {{ site.analytics.google.anonymize_ip | default: false }});
|
||||
ga('send','pageview')
|
||||
</script>
|
||||
<script src="https://www.google-analytics.com/analytics.js" async></script>
|
|
@ -0,0 +1,14 @@
|
|||
<script>
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', '{{ site.analytics.google.tracking_id }}']);
|
||||
{% if site.analytics.google.anonymize_ip == true %}
|
||||
_gaq.push(['_gat._anonymizeIp']);
|
||||
{% endif %}
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
|
@ -0,0 +1,14 @@
|
|||
{% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %}
|
||||
|
||||
{% case site.analytics.provider %}
|
||||
{% when "google" %}
|
||||
{% include /analytics-providers/google.html %}
|
||||
{% when "google-universal" %}
|
||||
{% include /analytics-providers/google-universal.html %}
|
||||
{% when "google-gtag" %}
|
||||
{% include /analytics-providers/google-gtag.html %}
|
||||
{% when "custom" %}
|
||||
{% include /analytics-providers/custom.html %}
|
||||
{% endcase %}
|
||||
|
||||
{% endif %}
|
|
@ -0,0 +1,39 @@
|
|||
{% if include.aPost.data.title.header.teaser %}
|
||||
{% capture teaser %}{{ include.aPost.data.title.header.teaser }}{% endcapture %}
|
||||
{% else %}
|
||||
{% assign teaser = site.teaser %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.aPost.data.id %}
|
||||
{% assign title = include.aPost.data.title | markdownify | remove: "<p>" | remove: "</p>" %}
|
||||
{% else %}
|
||||
{% assign title = include.aPost.data.title %}
|
||||
{% endif %}
|
||||
|
||||
<div class="{{ include.type | default: 'list' }}__item">
|
||||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
{% if include.type == "grid" and teaser %}
|
||||
<div class="archive__item-teaser">
|
||||
<img src="{{ teaser | relative_url }}" alt="">
|
||||
</div>
|
||||
{% endif %}
|
||||
<h2 class="archive__item-title no_toc" itemprop="headline">
|
||||
{% if include.aPost.data.link %}
|
||||
<a href="{{ include.aPost.data.link }}">{{ title }}</a> <a href="{{ include.aPost.data.page.url | relative_url }}" rel="permalink"><i class="fas fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
|
||||
{% else %}
|
||||
<a href="{{ include.aPost.data.page.url | relative_url }}" rel="permalink">{{ title }}</a>
|
||||
{% endif %}
|
||||
</h2>
|
||||
<!-- RMCG consider removing truncate from first 2 where we've explicitly provided a excerpt -->
|
||||
{% include page__meta.html type=include.type content=include.aPost.data.content %}
|
||||
{% if include.aPost.data.page.excerpt %}
|
||||
<p class="archive__item-excerpt" itemprop="description">{{ include.aPost.data.page.excerpt | markdownify | strip_html | truncate: 160 }}</p>
|
||||
{% elsif include.aPost.data.excerpt %}
|
||||
<p class="archive__item-excerpt" itemprop="description">{{ include.aPost.data.excerpt | markdownify | strip_html | truncate: 160 }}</p>
|
||||
{% else %}
|
||||
<!-- RMCG - Result of this isn't perfect but it works, so now all posts show an excerpt of sorts -->
|
||||
<p class="archive__item-excerpt" itemprop="description">{{ include.aPost.template._frontMatter.content strip_html | markdownify | truncate: 160 }}</p>
|
||||
{% endif %}
|
||||
|
||||
</article>
|
||||
</div>
|
|
@ -0,0 +1,7 @@
|
|||
<!--
|
||||
<li>
|
||||
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
|
||||
</a>
|
||||
</li>
|
||||
-->
|
|
@ -0,0 +1,252 @@
|
|||
{% assign author = page.author | default: page.authors[0] | default: site.author %}
|
||||
{% assign author = authors[author] | default: author %}
|
||||
|
||||
<div itemscope itemtype="https://schema.org/Person">
|
||||
|
||||
{% if author.avatar %}
|
||||
<div class="author__avatar">
|
||||
{% if author.home %}
|
||||
<a href="{{ author.home | relative_url }}">
|
||||
<img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image">
|
||||
</a>
|
||||
{% else %}
|
||||
<img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image">
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="author__content">
|
||||
{% if author.home %}
|
||||
<a href="{{ author.home | relative_url }}"><h3 class="author__name" itemprop="name">{{ author.name }}</h3></a>
|
||||
{% else %}
|
||||
<h3 class="author__name" itemprop="name">{{ author.name }}</h3>
|
||||
{% endif %}
|
||||
{% if author.bio %}
|
||||
<div class="author__bio" itemprop="description">
|
||||
{{ author.bio | markdownify }}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<div class="author__urls-wrapper">
|
||||
<button class="btn btn--inverse">{{ ui-text[site.locale].follow_label | remove: ":" | default: "Follow" }}</button>
|
||||
<ul class="author__urls social-icons">
|
||||
{% if author.location %}
|
||||
<li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
|
||||
<i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name">{{ author.location }}</span>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.links %}
|
||||
{% for link in author.links %}
|
||||
{% if link.label and link.url %}
|
||||
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% if author.uri %}
|
||||
<li>
|
||||
<a href="{{ author.uri }}" itemprop="url">
|
||||
<i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">{{ ui-text[site.locale].website_label | default: "Website" }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.email %}
|
||||
<li>
|
||||
<a href="mailto:{{ author.email }}">
|
||||
<meta itemprop="email" content="{{ author.email }}" />
|
||||
<i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">{{ ui-text[site.locale].email_label | default: "Email" }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.keybase %}
|
||||
<li>
|
||||
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fas fa-fw fa-key" aria-hidden="true"></i><span class="label">Keybase</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.twitter %}
|
||||
<li>
|
||||
<a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">Twitter</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.facebook %}
|
||||
<li>
|
||||
<a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i><span class="label">Facebook</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.linkedin %}
|
||||
<li>
|
||||
<a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">LinkedIn</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.xing %}
|
||||
<li>
|
||||
<a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-xing-square" aria-hidden="true"></i><span class="label">XING</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.instagram %}
|
||||
<li>
|
||||
<a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-instagram" aria-hidden="true"></i><span class="label">Instagram</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.tumblr %}
|
||||
<li>
|
||||
<a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i><span class="label">Tumblr</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.bitbucket %}
|
||||
<li>
|
||||
<a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i><span class="label">Bitbucket</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.github %}
|
||||
<li>
|
||||
<a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.gitlab %}
|
||||
<li>
|
||||
<a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-gitlab" aria-hidden="true"></i><span class="label">GitLab</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.stackoverflow %}
|
||||
<li>
|
||||
<a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i><span class="label">Stack Overflow</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.lastfm %}
|
||||
<li>
|
||||
<a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i><span class="label">Last.fm</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.dribbble %}
|
||||
<li>
|
||||
<a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-dribbble" aria-hidden="true"></i><span class="label">Dribbble</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.pinterest %}
|
||||
<li>
|
||||
<a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-pinterest" aria-hidden="true"></i><span class="label">Pinterest</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.foursquare %}
|
||||
<li>
|
||||
<a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-foursquare" aria-hidden="true"></i><span class="label">Foursquare</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.steam %}
|
||||
<li>
|
||||
<a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-steam" aria-hidden="true"></i><span class="label">Steam</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.youtube %}
|
||||
{% if author.youtube contains "://" %}
|
||||
<li>
|
||||
<a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
|
||||
</a>
|
||||
</li>
|
||||
{% elsif author.youtube %}
|
||||
<li>
|
||||
<a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if author.soundcloud %}
|
||||
<li>
|
||||
<a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i><span class="label">SoundCloud</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.weibo %}
|
||||
<li>
|
||||
<a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-weibo" aria-hidden="true"></i><span class="label">Weibo</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.flickr %}
|
||||
<li>
|
||||
<a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-flickr" aria-hidden="true"></i><span class="label">Flickr</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.codepen %}
|
||||
<li>
|
||||
<a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-codepen" aria-hidden="true"></i><span class="label">CodePen</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% if author.vine %}
|
||||
<li>
|
||||
<a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer">
|
||||
<i class="fab fa-fw fa-vine" aria-hidden="true"></i><span class="label">{{ ui-text[site.locale].email_label | default: "Email" }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
|
||||
{% include author-profile-custom-links.html %}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,39 @@
|
|||
{% case site.category_archive.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if page.collection != 'posts' %}
|
||||
{% assign path_type = nil %}
|
||||
{% assign crumb_path = '/' %}
|
||||
{% else %}
|
||||
{% assign crumb_path = site.category_archive.path %}
|
||||
{% endif %}
|
||||
|
||||
<nav class="breadcrumbs">
|
||||
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
{% assign crumbs = page.url | split: '/' %}
|
||||
{% assign i = 1 %}
|
||||
{% for crumb in crumbs offset: 1 %}
|
||||
{% if forloop.first %}
|
||||
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="{{ site.url }}{{ site.baseurl }}/" itemprop="item"><span itemprop="name">{{ ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
|
||||
<meta itemprop="position" content="{{ i }}" />
|
||||
</li>
|
||||
<span class="sep">{{ ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
|
||||
{% endif %}
|
||||
{% if forloop.last %}
|
||||
<li class="current">{{ page.title }}</li>
|
||||
{% else %}
|
||||
{% assign i = i | plus: 1 %}
|
||||
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | replace: '-', ' ' | replace: '%20', ' ' | capitalize }}</span></a>
|
||||
<meta itemprop="position" content="{{ i }}" />
|
||||
</li>
|
||||
<span class="sep">{{ ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</ol>
|
||||
</nav>
|
|
@ -0,0 +1,3 @@
|
|||
<!--[if lt IE 9]>
|
||||
<div class="notice--danger align-center" style="margin: 0;">You are using an <strong>outdated</strong> browser. Please <a href="https://browsehappy.com/">upgrade your browser</a> to improve your experience.</div>
|
||||
<![endif]-->
|
|
@ -0,0 +1,19 @@
|
|||
{% case site.category_archive.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if site.category_archive.path %}
|
||||
{% assign categories_sorted = page.categories | sort_natural %}
|
||||
|
||||
<p class="page__taxonomy">
|
||||
<strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> {{ ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
|
||||
<span itemprop="keywords">
|
||||
{% for category_word in categories_sorted %}
|
||||
<a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
|
||||
{% endfor %}
|
||||
</span>
|
||||
</p>
|
||||
{% endif %}
|
|
@ -0,0 +1,3 @@
|
|||
<!-- start custom comments snippet -->
|
||||
|
||||
<!-- end custom comments snippet -->
|
|
@ -0,0 +1,3 @@
|
|||
<!-- start custom comments scripts -->
|
||||
|
||||
<!-- end custom comments scripts -->
|
|
@ -0,0 +1,13 @@
|
|||
{% if site.comments.discourse.server %}
|
||||
{% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
|
||||
<script type="text/javascript">
|
||||
DiscourseEmbed = { discourseUrl: '//{{ site.comments.discourse.server }}/',
|
||||
discourseEmbedUrl: '{{ canonical }}' };
|
||||
(function () {
|
||||
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
|
||||
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
|
||||
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the comments powered by <a href="https://www.discourse.org/">Discourse.</a></noscript>
|
||||
{% endif %}
|
|
@ -0,0 +1,15 @@
|
|||
{% if site.comments.disqus.shortname %}
|
||||
<script>
|
||||
var disqus_config = function () {
|
||||
this.page.url = "{{ page.url | absolute_url }}"; /* Replace PAGE_URL with your page's canonical URL variable */
|
||||
this.page.identifier = "{{ page.id }}"; /* Replace PAGE_IDENTIFIER with your page's unique identifier variable */
|
||||
};
|
||||
(function() { /* DON'T EDIT BELOW THIS LINE */
|
||||
var d = document, s = d.createElement('script');
|
||||
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
|
||||
s.setAttribute('data-timestamp', +new Date());
|
||||
(d.head || d.body).appendChild(s);
|
||||
})();
|
||||
</script>
|
||||
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
|
||||
{% endif %}
|
|
@ -0,0 +1,8 @@
|
|||
<div id="fb-root"></div>
|
||||
<script>(function(d, s, id) {
|
||||
var js, fjs = d.getElementsByTagName(s)[0];
|
||||
if (d.getElementById(id)) return;
|
||||
js = d.createElement(s); js.id = id;
|
||||
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5{% if site.comments.facebook.appid %}&appId={{ site.comments.facebook.appid }}{% endif %}";
|
||||
fjs.parentNode.insertBefore(js, fjs);
|
||||
}(document, 'script', 'facebook-jssdk'));</script>
|
|
@ -0,0 +1,24 @@
|
|||
<script>
|
||||
'use strict';
|
||||
|
||||
(function () {
|
||||
var commentContainer = document.querySelector('#giscus-comments');
|
||||
|
||||
if (!commentContainer) {
|
||||
return;
|
||||
}
|
||||
|
||||
var script = document.createElement('script');
|
||||
script.setAttribute('src', 'https://giscus.app/client.js');
|
||||
script.setAttribute('data-repo', '{{ site.repository | downcase }}');
|
||||
script.setAttribute('data-repo-id', '{{ site.comments.giscus.repo_id }}');
|
||||
script.setAttribute('data-category', '{{ site.comments.giscus.category_name }}');
|
||||
script.setAttribute('data-category-id', '{{ site.comments.giscus.category_id }}');
|
||||
script.setAttribute('data-mapping', '{{ site.comments.giscus.discussion_term | default: "pathname" }}');
|
||||
script.setAttribute('data-reactions-enabled', '{{ site.comments.giscus.reactions_enabled | default: 1 }}');
|
||||
script.setAttribute('data-theme', '{{ site.comments.giscus.theme | default: "light" }}');
|
||||
script.setAttribute('crossorigin', 'anonymous');
|
||||
|
||||
commentContainer.appendChild(script);
|
||||
})();
|
||||
</script>
|
|
@ -0,0 +1,20 @@
|
|||
{% if site.comments.provider and page.comments %}
|
||||
{% case site.comments.provider %}
|
||||
{% when "disqus" %}
|
||||
{% include /comments-providers/disqus.html %}
|
||||
{% when "discourse" %}
|
||||
{% include /comments-providers/discourse.html %}
|
||||
{% when "facebook" %}
|
||||
{% include /comments-providers/facebook.html %}
|
||||
{% when "staticman" %}
|
||||
{% include /comments-providers/staticman.html %}
|
||||
{% when "staticman_v2" %}
|
||||
{% include /comments-providers/staticman_v2.html %}
|
||||
{% when "utterances" %}
|
||||
{% include /comments-providers/utterances.html %}
|
||||
{% when "giscus" %}
|
||||
{% include /comments-providers/giscus.html %}
|
||||
{% when "custom" %}
|
||||
{% include /comments-providers/custom_scripts.html %}
|
||||
{% endcase %}
|
||||
{% endif %}
|
|
@ -0,0 +1,40 @@
|
|||
{% if site.repository and site.staticman.branch %}
|
||||
<script>
|
||||
(function ($) {
|
||||
$('#new_comment').submit(function () {
|
||||
var form = this;
|
||||
|
||||
$(form).addClass('disabled');
|
||||
$('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ ui-text[site.locale].loading_label | default: "Loading..." }}');
|
||||
|
||||
$.ajax({
|
||||
type: $(this).attr('method'),
|
||||
url: $(this).attr('action'),
|
||||
data: $(this).serialize(),
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
success: function (data) {
|
||||
$('#comment-form-submit').html('{{ ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--danger');
|
||||
$('.page__comments-form .js-notice').addClass('notice--success');
|
||||
showAlert('{{ ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err);
|
||||
$('#comment-form-submit').html('{{ ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--success');
|
||||
$('.page__comments-form .js-notice').addClass('notice--danger');
|
||||
showAlert('{{ ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
|
||||
$(form).removeClass('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function showAlert(message) {
|
||||
$('.page__comments-form .js-notice').removeClass('hidden');
|
||||
$('.page__comments-form .js-notice-text').html(message);
|
||||
}
|
||||
})(jQuery);
|
||||
</script>
|
||||
{% endif %}
|
|
@ -0,0 +1,40 @@
|
|||
{% if site.repository and site.comments.staticman.branch %}
|
||||
<script>
|
||||
(function ($) {
|
||||
$('#new_comment').submit(function () {
|
||||
var form = this;
|
||||
|
||||
$(form).addClass('disabled');
|
||||
$('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ ui-text[site.locale].loading_label | default: "Loading..." }}');
|
||||
|
||||
$.ajax({
|
||||
type: $(this).attr('method'),
|
||||
url: $(this).attr('action'),
|
||||
data: $(this).serialize(),
|
||||
contentType: 'application/x-www-form-urlencoded',
|
||||
success: function (data) {
|
||||
$('#comment-form-submit').html('{{ ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--danger');
|
||||
$('.page__comments-form .js-notice').addClass('notice--success');
|
||||
showAlert('{{ ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
|
||||
},
|
||||
error: function (err) {
|
||||
console.log(err);
|
||||
$('#comment-form-submit').html('{{ ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
|
||||
$('.page__comments-form .js-notice').removeClass('notice--success');
|
||||
$('.page__comments-form .js-notice').addClass('notice--danger');
|
||||
showAlert('{{ ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
|
||||
$(form).removeClass('disabled');
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
function showAlert(message) {
|
||||
$('.page__comments-form .js-notice').removeClass('hidden');
|
||||
$('.page__comments-form .js-notice-text').html(message);
|
||||
}
|
||||
})(jQuery);
|
||||
</script>
|
||||
{% endif %}
|
|
@ -0,0 +1,20 @@
|
|||
<script>
|
||||
'use strict';
|
||||
|
||||
(function() {
|
||||
var commentContainer = document.querySelector('#utterances-comments');
|
||||
|
||||
if (!commentContainer) {
|
||||
return;
|
||||
}
|
||||
|
||||
var script = document.createElement('script');
|
||||
script.setAttribute('src', 'https://utteranc.es/client.js');
|
||||
script.setAttribute('repo', '{{ site.repository }}');
|
||||
script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term | default: "pathname" }}');
|
||||
script.setAttribute('theme', '{{ site.comments.utterances.theme | default: "github-light" }}');
|
||||
script.setAttribute('crossorigin', 'anonymous');
|
||||
|
||||
commentContainer.appendChild(script);
|
||||
})();
|
||||
</script>
|
|
@ -0,0 +1,162 @@
|
|||
<div class="page__comments">
|
||||
{% capture comments_label %}{{ ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %}
|
||||
{% case site.comments.provider %}
|
||||
{% when "discourse" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section id="discourse-comments"></section>
|
||||
{% when "disqus" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section id="disqus_thread"></section>
|
||||
{% when "facebook" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section class="fb-comments" data-href="{{ page.url | absolute_url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
|
||||
{% when "staticman_v2" %}
|
||||
<section id="static-comments">
|
||||
{% if site.repository and site.comments.staticman.branch %}
|
||||
<!-- Start static comments -->
|
||||
<div class="js-comments">
|
||||
{% if site.data.comments[page.slug] %}
|
||||
<h4 class="page__comments-title">{{ ui-text[site.locale].comments_title | default: "Comments" }}</h4>
|
||||
{% assign comments = site.data.comments[page.slug] | sort %}
|
||||
|
||||
{% for comment in comments %}
|
||||
{% assign email = comment[1].email %}
|
||||
{% assign name = comment[1].name %}
|
||||
{% assign url = comment[1].url %}
|
||||
{% assign date = comment[1].date %}
|
||||
{% assign message = comment[1].message %}
|
||||
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- End static comments -->
|
||||
|
||||
<!-- Start new comment form -->
|
||||
<div class="page__comments-form">
|
||||
<h4 class="page__comments-title">{{ ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
|
||||
<p class="small">{{ ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
|
||||
<form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.comments.staticman.endpoint }}{{ site.repository }}/{{ site.comments.staticman.branch }}/comments">
|
||||
<div class="form__spinner">
|
||||
<i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||
<span class="sr-only">{{ ui-text[site.locale].loading_label | default: "Loading..." }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="comment-form-message">{{ ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
|
||||
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
|
||||
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-name">{{ ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
|
||||
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-email">{{ ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
|
||||
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-url">{{ ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
|
||||
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
|
||||
</div>
|
||||
<div class="form-group hidden" style="display: none;">
|
||||
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
|
||||
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
|
||||
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
|
||||
{% if site.reCaptcha.siteKey %}<input type="hidden" name="options[reCaptcha][siteKey]" value="{{ site.reCaptcha.siteKey }}">{% endif %}
|
||||
{% if site.reCaptcha.secret %}<input type="hidden" name="options[reCaptcha][secret]" value="{{ site.reCaptcha.secret }}">{% endif %}
|
||||
</div>
|
||||
<!-- Start comment form alert messaging -->
|
||||
<p class="hidden js-notice">
|
||||
<strong class="js-notice-text"></strong>
|
||||
</p>
|
||||
<!-- End comment form alert messaging -->
|
||||
{% if site.reCaptcha.siteKey %}
|
||||
<div class="form-group">
|
||||
<div class="g-recaptcha" data-sitekey="{{ site.reCaptcha.siteKey }}"></div>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="form-group">
|
||||
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- End new comment form -->
|
||||
{% if site.reCaptcha.siteKey %}<script async src="https://www.google.com/recaptcha/api.js"></script>{% endif %}
|
||||
{% endif %}
|
||||
</section>
|
||||
{% when "staticman" %}
|
||||
<section id="static-comments">
|
||||
{% if site.repository and site.staticman.branch %}
|
||||
<!-- Start static comments -->
|
||||
<div class="js-comments">
|
||||
{% if site.data.comments[page.slug] %}
|
||||
<h4 class="page__comments-title">{{ ui-text[site.locale].comments_title | default: "Comments" }}</h4>
|
||||
{% assign comments = site.data.comments[page.slug] | sort %}
|
||||
|
||||
{% for comment in comments %}
|
||||
{% assign email = comment[1].email %}
|
||||
{% assign name = comment[1].name %}
|
||||
{% assign url = comment[1].url %}
|
||||
{% assign date = comment[1].date %}
|
||||
{% assign message = comment[1].message %}
|
||||
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
<!-- End static comments -->
|
||||
|
||||
<!-- Start new comment form -->
|
||||
<div class="page__comments-form">
|
||||
<h4 class="page__comments-title">{{ ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
|
||||
<p class="small">{{ ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
|
||||
<form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/{{ site.repository }}/{{ site.staticman.branch }}">
|
||||
<div class="form__spinner">
|
||||
<i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
|
||||
<span class="sr-only">{{ ui-text[site.locale].loading_label | default: "Loading..." }}</span>
|
||||
</div>
|
||||
|
||||
<div class="form-group">
|
||||
<label for="comment-form-message">{{ ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
|
||||
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
|
||||
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-name">{{ ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
|
||||
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-email">{{ ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
|
||||
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="comment-form-url">{{ ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
|
||||
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
|
||||
</div>
|
||||
<div class="form-group hidden" style="display: none;">
|
||||
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
|
||||
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
|
||||
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
|
||||
</div>
|
||||
<!-- Start comment form alert messaging -->
|
||||
<p class="hidden js-notice">
|
||||
<strong class="js-notice-text"></strong>
|
||||
</p>
|
||||
<!-- End comment form alert messaging -->
|
||||
<div class="form-group">
|
||||
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<!-- End new comment form -->
|
||||
{% endif %}
|
||||
</section>
|
||||
{% when "utterances" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section id="utterances-comments"></section>
|
||||
{% when "giscus" %}
|
||||
<h4 class="page__comments-title">{{ comments_label }}</h4>
|
||||
<section id="giscus-comments"></section>
|
||||
{% when "custom" %}
|
||||
{% include /comments-providers/custom.html %}
|
||||
{% endcase %}
|
||||
</div>
|
|
@ -0,0 +1,15 @@
|
|||
{% assign entries = site[include.collection] %}
|
||||
|
||||
{% if include.sort_by %}
|
||||
{% assign entries = entries | sort: include.sort_by %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.sort_order == 'reverse' %}
|
||||
{% assign entries = entries | reverse %}
|
||||
{% endif %}
|
||||
|
||||
{%- for post in entries -%}
|
||||
{%- unless post.hidden -%}
|
||||
{% include archive-single.html %}
|
||||
{%- endunless -%}
|
||||
{%- endfor -%}
|
|
@ -0,0 +1,41 @@
|
|||
{% if include.id %}
|
||||
{% assign feature_row = page[include.id] %}
|
||||
{% else %}
|
||||
{% assign feature_row = page.feature_row %}
|
||||
{% endif %}
|
||||
|
||||
<div class="feature__wrapper">
|
||||
|
||||
{% for f in feature_row %}
|
||||
<div class="feature__item{% if include.type %}--{{ include.type }}{% endif %}">
|
||||
<div class="archive__item">
|
||||
{% if f.image_path %}
|
||||
<div class="archive__item-teaser">
|
||||
<img src="{{ f.image_path | relative_url }}"
|
||||
alt="{% if f.alt %}{{ f.alt }}{% endif %}">
|
||||
{% if f.image_caption %}
|
||||
<span class="archive__item-caption">{{ f.image_caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="archive__item-body">
|
||||
{% if f.title %}
|
||||
<h2 class="archive__item-title">{{ f.title }}</h2>
|
||||
{% endif %}
|
||||
|
||||
{% if f.excerpt %}
|
||||
<div class="archive__item-excerpt">
|
||||
{{ f.excerpt | markdownify }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if f.url %}
|
||||
<p><a href="{{ f.url | relative_url }}" class="btn {{ f.btn_class }}">{{ f.btn_label | default: ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
|
||||
</div>
|
|
@ -0,0 +1,9 @@
|
|||
<figure class="{{ include.class }}">
|
||||
<img src="{{ include.image_path | relative_url }}"
|
||||
alt="{% if include.alt %}{{ include.alt }}{% endif %}">
|
||||
{%- if include.caption -%}
|
||||
<figcaption>
|
||||
{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}
|
||||
</figcaption>
|
||||
{%- endif -%}
|
||||
</figure>
|
|
@ -0,0 +1,21 @@
|
|||
<div class="page__footer-follow">
|
||||
<ul class="social-icons">
|
||||
{% if ui-text[site.locale].follow_label %}
|
||||
<li><strong>{{ ui-text[site.locale].follow_label }}</strong></li>
|
||||
{% endif %}
|
||||
|
||||
{% if site.footer.links %}
|
||||
{% for link in site.footer.links %}
|
||||
{% if link.label and link.url %}
|
||||
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer"><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i> {{ link.label }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
{% unless site.atom_feed.hide %}
|
||||
<li><a href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}"><i class="fas fa-fw fa-rss-square" aria-hidden="true"></i> {{ ui-text[site.locale].feed_label | default: "Feed" }}</a></li>
|
||||
{% endunless %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="page__footer-copyright">© {{ site.time | date: '%Y' }} {{ site.name | default: site.title }}. {{ ui-text[site.locale].powered_by | default: "Powered by" }} <a href="https://jekyllrb.com" rel="nofollow">Jekyll</a> & <a href="https://mademistakes.com/work/minimal-mistakes-jekyll-theme/" rel="nofollow">Minimal Mistakes</a>.</div>
|
|
@ -0,0 +1,35 @@
|
|||
{% if include.id %}
|
||||
{% assign gallery = page[include.id] %}
|
||||
{% else %}
|
||||
{% assign gallery = page.gallery %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.layout %}
|
||||
{% assign gallery_layout = include.layout %}
|
||||
{% else %}
|
||||
{% if gallery.size == 2 %}
|
||||
{% assign gallery_layout = 'half' %}
|
||||
{% elsif gallery.size >= 3 %}
|
||||
{% assign gallery_layout = 'third' %}
|
||||
{% else %}
|
||||
{% assign gallery_layout = '' %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<figure class="{{ gallery_layout }} {{ include.class }}">
|
||||
{% for img in gallery %}
|
||||
{% if img.url %}
|
||||
<a href="{{ img.url | relative_url }}"
|
||||
{% if img.title %}title="{{ img.title }}"{% endif %}>
|
||||
<img src="{{ img.image_path | relative_url }}"
|
||||
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
|
||||
</a>
|
||||
{% else %}
|
||||
<img src="{{ img.image_path | relative_url }}"
|
||||
alt="{% if img.alt %}{{ img.alt }}{% endif %}">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% if include.caption %}
|
||||
<figcaption>{{ include.caption | markdownify | remove: "<p>" | remove: "</p>" }}</figcaption>
|
||||
{% endif %}
|
||||
</figure>
|
|
@ -0,0 +1,47 @@
|
|||
<!--
|
||||
# Jekyll Group-By-Array 0.1.0
|
||||
# https://github.com/mushishi78/jekyll-group-by-array
|
||||
# © 2015 Max White <mushishi78@gmail.com>
|
||||
# MIT License
|
||||
-->
|
||||
|
||||
<!-- Initialize -->
|
||||
{% assign __empty_array = '' | split: ',' %}
|
||||
{% assign group_names = __empty_array %}
|
||||
{% assign group_items = __empty_array %}
|
||||
|
||||
<!-- Map -->
|
||||
{% assign __names = include.collection | map: include.field %}
|
||||
|
||||
<!-- Flatten -->
|
||||
{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
|
||||
|
||||
<!-- Uniq -->
|
||||
{% assign __names = __names | sort %}
|
||||
{% for name in __names %}
|
||||
|
||||
<!-- If not equal to previous then it must be unique as sorted -->
|
||||
{% unless name == previous %}
|
||||
|
||||
<!-- Push to group_names -->
|
||||
{% assign group_names = group_names | push: name %}
|
||||
{% endunless %}
|
||||
|
||||
{% assign previous = name %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<!-- group_items -->
|
||||
{% for name in group_names %}
|
||||
|
||||
<!-- Collect if contains -->
|
||||
{% assign __item = __empty_array %}
|
||||
{% for __element in include.collection %}
|
||||
{% if __element[include.field] contains name %}
|
||||
{% assign __item = __item | push: __element %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<!-- Push to group_items -->
|
||||
{% assign group_items = group_items | push: __item %}
|
||||
{% endfor %}
|
|
@ -0,0 +1,28 @@
|
|||
<meta charset="utf-8">
|
||||
|
||||
{% include seo.html %}
|
||||
|
||||
{% unless site.atom_feed.hide %}
|
||||
<link href="{% if site.atom_feed.path %}{{ site.atom_feed.path }}{% else %}{{ '/feed.xml' | relative_url }}{% endif %}" type="application/atom+xml" rel="alternate" title="{{ site.title }} Feed">
|
||||
{% endunless %}
|
||||
|
||||
<!-- https://t.co/dKP3o1e -->
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<script>
|
||||
document.documentElement.className = document.documentElement.className.replace(/\bno-js\b/g, '') + ' js ';
|
||||
</script>
|
||||
|
||||
<!-- For all browsers -->
|
||||
<link rel="stylesheet" href="{{ '/assets/css/main.css' | relative_url }}">
|
||||
<!-- <link href="https://unpkg.com/prismjs@1.20.0/themes/prism-okaidia.css" rel="stylesheet"> -->
|
||||
<link rel="stylesheet" href="/assets/css/colddark-theme.css">
|
||||
|
||||
<link rel="preload" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css" as="style" onload="this.onload=null;this.rel='stylesheet'">
|
||||
<noscript><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5/css/all.min.css"></noscript>
|
||||
|
||||
{% if site.head_scripts %}
|
||||
{% for script in site.head_scripts %}
|
||||
<script src="{{ script | relative_url }}"></script>
|
||||
{% endfor %}
|
||||
{% endif %}
|
|
@ -0,0 +1,29 @@
|
|||
---
|
||||
layout: default
|
||||
author_profile: false
|
||||
---
|
||||
|
||||
{% if header.overlay_color or header.overlay_image or header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% elsif header.video.id and header.video.provider %}
|
||||
{% include page__hero_video.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<div class="archive">
|
||||
{% unless header.overlay_color or header.overlay_image %}
|
||||
<h1 id="page-title" class="page__title">{{ title }}</h1>
|
||||
{% endunless %}
|
||||
{% for post in posts %}
|
||||
{% include archive-single.html %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if header.overlay_color or header.overlay_image or header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% elsif header.video.id and header.video.provider %}
|
||||
{% include page__hero_video.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<div class="archive">
|
||||
{% unless header.overlay_color or header.overlay_image %}
|
||||
<h1 id="page-title" class="page__title">{{ title }}</h1>
|
||||
{% endunless %}
|
||||
{{ content }}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,41 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{% assign categories_max = 0 %}
|
||||
{% for category in collections.categories %}
|
||||
{% if collections[category].size > categories_max %}
|
||||
{% assign categories_max = collections[category].size %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
<ul class="taxonomy__index">
|
||||
{% for i in (1..categories_max) reversed %}
|
||||
{% for category in collections.categories %}
|
||||
{% if collections[category].size == i %}
|
||||
<li>
|
||||
<a href="#{{ category | slugify }}">
|
||||
<strong>{{ category }}</strong> <span class="taxonomy__count">{{ i }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% assign entries_layout = entries_layout | default: 'list' %}
|
||||
{% for i in (1..categories_max) reversed %}
|
||||
{% for category in collections.categories %}
|
||||
{% if collections[category].size == i %}
|
||||
<section id="{{ category | slugify | downcase }}" class="taxonomy__section">
|
||||
<h2 class="archive__subtitle">{{ category }}</h2>
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% for post in collections[category] %}
|
||||
{% include archive-single.html type=entries_layout aPost=post%}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a href="#page-title" class="back-to-top">{{ ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑</a>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% include posts-category.html taxonomy=page.taxonomy type=entries_layout %}
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% include documents-collection.html collection=page.collection sort_by=page.sort_by sort_order=page.sort_order type=entries_layout %}
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
# Jekyll layout that compresses HTML
|
||||
# v3.1.0
|
||||
# http://jch.penibelst.de/
|
||||
# © 2014–2015 Anatol Broder
|
||||
# MIT License
|
||||
---
|
||||
|
||||
{% capture _LINE_FEED %}
|
||||
{% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment or site.compress_html.ignore.envs == "all" %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}</{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "<!-- -->" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "<pre" %}{% assign _content = "" %}{% for _pre_before in _pre_befores %}{% assign _pres = _pre_before | split: "</pre>" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "</pre>" %}<pre{{ _pres.first }}</pre>{% endif %}{% unless _pre_before contains "</pre>" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " <e;<e; </e>;</e>;</e> ;</e>" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %} <table id="compress_html_profile_{{ site.time | date: "%Y%m%d" }}" class="compress_html_profile"> <thead> <tr> <td>Step <td>Bytes <tbody> <tr> <td>raw <td>{{ content | size }}{% if _profile_endings %} <tr> <td>endings <td>{{ _profile_endings }}{% endif %}{% if _profile_startings %} <tr> <td>startings <td>{{ _profile_startings }}{% endif %}{% if _profile_comments %} <tr> <td>comments <td>{{ _profile_comments }}{% endif %}{% if _profile_collapse %} <tr> <td>collapse <td>{{ _profile_collapse }}{% endif %}{% if _profile_clippings %} <tr> <td>clippings <td>{{ _profile_clippings }}{% endif %} </table>{% endif %}{% endif %}
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
---
|
||||
|
||||
<!doctype html>
|
||||
<!--
|
||||
Minimal Mistakes Jekyll Theme 4.24.0 by Michael Rose
|
||||
Copyright 2013-2020 Michael Rose - mademistakes.com | @mmistakes
|
||||
Free for personal and commercial use under the MIT license
|
||||
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
|
||||
-->
|
||||
<html lang="{{ site.locale | slice: 0,2 | default: "en" }}" class="no-js">
|
||||
<head>
|
||||
{% include head.html %}
|
||||
{% include head/custom.html %}
|
||||
</head>
|
||||
|
||||
<body class="layout--{{ layout | default: site.defaults.posts.layout }}{% if classes or site.defaults.posts.classes %}{{ classes | default: site.defaults.posts.classes | join: ' ' | prepend: ' ' }}{% endif %}">
|
||||
{% include skip-links.html %}
|
||||
{% include browser-upgrade.html %}
|
||||
{% include masthead.html %}
|
||||
|
||||
<div class="initial-content">
|
||||
{{ content }}
|
||||
</div>
|
||||
|
||||
{% if site.search == true %}
|
||||
<div class="search-content">
|
||||
{% include search/search_form.html %}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div id="footer" class="page__footer">
|
||||
<footer>
|
||||
{% include footer/custom.html %}
|
||||
{% include footer.html %}
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
{% include scripts.html %}
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
TEST
|
||||
|
||||
{{collections.drafts.size}}
|
||||
|
||||
{% for post in collections.drafts %}
|
||||
{% include archive-single.html type=entries_layout, aPost=post %}
|
||||
{% endfor %}
|
|
@ -0,0 +1,25 @@
|
|||
---
|
||||
layout: archive
|
||||
|
||||
paginator:
|
||||
data: collections.posts
|
||||
size: 2
|
||||
|
||||
---
|
||||
|
||||
<h3 class="archive__subtitle">{{ ui-text[site.locale].recent_posts | default: "Recent Posts" }}</h3>
|
||||
|
||||
{% if paginator %}
|
||||
{% assign posts = collections.posts %}
|
||||
{% else %}
|
||||
{% assign posts = site.posts %}
|
||||
{% endif %}
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% for post in posts %}
|
||||
{% include archive-single.html type=entries_layout aPost=post %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
{% include paginator.html %}
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% assign sortedPosts = collections.posts | group_by: "date" %}
|
||||
|
||||
{{ sortedPosts | inspect }}
|
||||
|
||||
{% comment %}
|
||||
<ul class="taxonomy__index">
|
||||
{% assign postsInYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
|
||||
{% for year in postsInYear %}
|
||||
<li>
|
||||
<a href="#{{ year.name }}">
|
||||
<strong>{{ year.name }}</strong> <span class="taxonomy__count">{{ year.items | size }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
{% assign postsByYear = site.posts | where_exp: "item", "item.hidden != true" | group_by_exp: 'post', 'post.date | date: "%Y"' %}
|
||||
{% for year in postsByYear %}
|
||||
<section id="{{ year.name }}" class="taxonomy__section">
|
||||
<h2 class="archive__subtitle">{{ year.name }}</h2>
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% for post in year.items %}
|
||||
{% include archive-single.html type=entries_layout %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a href="#page-title" class="back-to-top">{{ ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑</a>
|
||||
</section>
|
||||
{% endfor %}
|
||||
{% endcomment %}
|
|
@ -0,0 +1,42 @@
|
|||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if page.header.overlay_color or page.header.overlay_image or page.header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<div class="archive">
|
||||
{% unless page.header.overlay_color or page.header.overlay_image %}
|
||||
<h1 id="page-title" class="page__title">{{ page.title }}</h1>
|
||||
{% endunless %}
|
||||
|
||||
{{ content }}
|
||||
|
||||
{%- assign search_provider = site.search_provider | default: "lunr" -%}
|
||||
{%- case search_provider -%}
|
||||
{%- when "lunr" -%}
|
||||
<input type="text" id="search" class="search-input" placeholder="{{ ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
|
||||
<div id="results" class="results"></div>
|
||||
{%- when "google" -%}
|
||||
<form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
|
||||
<input type="text" id="cse-search-input-box-id" class="search-input" placeholder="{{ ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
|
||||
</form>
|
||||
<div id="results" class="results">
|
||||
<gcse:searchresults-only></gcse:searchresults-only>
|
||||
</div>
|
||||
{%- when "algolia" -%}
|
||||
<div class="search-searchbar"></div>
|
||||
<div class="search-hits"></div>
|
||||
{%- endcase -%}
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,91 @@
|
|||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if header.overlay_color or header.overlay_image or header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% elsif header.video.id and header.video.provider %}
|
||||
{% include page__hero_video.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if page.url != "/" and site.breadcrumbs %}
|
||||
{% unless paginator %}
|
||||
{% include breadcrumbs.html %}
|
||||
{% endunless %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
{% include sidebar.html %}
|
||||
|
||||
<article class="page" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
{% if title %}<meta itemprop="headline" content="{{ title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if excerpt %}<meta itemprop="description" content="{{ excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if date %}<meta itemprop="datePublished" content="{{ date | date_to_xmlschema }}">{% endif %}
|
||||
{% if last_modified_at %}<meta itemprop="dateModified" content="{{ last_modified_at | date_to_xmlschema }}">{% endif %}
|
||||
|
||||
<div class="page__inner-wrap">
|
||||
{% unless header.overlay_color or header.overlay_image %}
|
||||
<header>
|
||||
{% if title %}<h1 id="page-title" class="page__title" itemprop="headline">{{ title | markdownify | remove: "<p>" | remove: "</p>" }}</h1>{% endif %}
|
||||
{% include page__meta.html %}
|
||||
</header>
|
||||
{% endunless %}
|
||||
|
||||
<section class="page__content" itemprop="text">
|
||||
{% if toc %}
|
||||
<aside class="sidebar__right {% if toc_sticky %}sticky{% endif %}">
|
||||
<nav class="toc">
|
||||
<header><h4 class="nav__title"><i class="fas fa-{{ page.toc_icon | default: 'file-alt' }}"></i> {{ toc_label | default: ui-text[site.locale].toc_label | default: "On this page" }}</h4></header>
|
||||
{% include toc.html sanitize=true html=content h_min=1 h_max=6 class="toc__menu" %}
|
||||
</nav>
|
||||
</aside>
|
||||
{% endif %}
|
||||
{{ content }}
|
||||
{% if page.link %}<div><a href="{{ page.link }}" class="btn btn--primary">{{ ui-text[site.locale].ext_link_label | default: "Direct Link" }}</a></div>{% endif %}
|
||||
</section>
|
||||
|
||||
<footer class="page__meta">
|
||||
{% if ui-text[site.locale].meta_label %}
|
||||
<h4 class="page__meta-title">{{ ui-text[site.locale].meta_label }}</h4>
|
||||
{% endif %}
|
||||
{% include page__taxonomy.html %}
|
||||
{% include page__date.html %}
|
||||
</footer>
|
||||
|
||||
{% if share or site.defaults.posts.share %}{% include social-share.html %}{% endif %}
|
||||
{% include post_pagination.html siblings=siblings %}
|
||||
</div>
|
||||
|
||||
{% comment %}
|
||||
{% if environment == 'production' and site.comments.provider and comments or site.defaults.post.comments %}
|
||||
{% endcomment %}
|
||||
{% if site.comments.provider and comments or site.defaults.posts.comments %}
|
||||
{% include comments.html %}
|
||||
{% endif %}
|
||||
</article>
|
||||
|
||||
{% comment %}<!-- only show related on a post page when `related: true` -->{% endcomment %}
|
||||
{% if id and related and site.related_posts.size > 0 %}
|
||||
<div class="page__related">
|
||||
<h4 class="page__related-title">{{ ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
|
||||
<div class="grid__wrapper">
|
||||
{% for post in site.related_posts limit:4 %}
|
||||
{% include archive-single.html type="grid" %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% comment %}<!-- otherwise show recent posts if no related when `related: true` -->{% endcomment %}
|
||||
{% elsif id and related %}
|
||||
<div class="page__related">
|
||||
<h4 class="page__related-title">{{ ui-text[site.locale].related_label | default: "You May Also Enjoy" }}</h4>
|
||||
<div class="grid__wrapper">
|
||||
{% for post in collections.posts limit:4 %}
|
||||
{% if post.id == page.id %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
{% include archive-single.html type="grid" %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
|
@ -0,0 +1,22 @@
|
|||
---
|
||||
layout: default
|
||||
---
|
||||
|
||||
{% if header.overlay_color or header.overlay_image or header.image %}
|
||||
{% include page__hero.html %}
|
||||
{% elsif header.video.id and header.video.provider %}
|
||||
{% include page__hero_video.html %}
|
||||
{% endif %}
|
||||
|
||||
<div id="main" role="main">
|
||||
<article class="splash" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
{% if title %}<meta itemprop="headline" content="{{ title | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.excerpt %}<meta itemprop="description" content="{{ page.excerpt | markdownify | strip_html | strip_newlines | escape_once }}">{% endif %}
|
||||
{% if page.date %}<meta itemprop="datePublished" content="{{ page.date | date_to_xmlschema }}">{% endif %}
|
||||
{% if page.last_modified_at %}<meta itemprop="dateModified" content="{{ page.last_modified_at | date_to_xmlschema }}">{% endif %}
|
||||
|
||||
<section class="page__content" itemprop="text">
|
||||
{{ content }}
|
||||
</section>
|
||||
</article>
|
||||
</div>
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% include posts-tag.html taxonomy=page.taxonomy type=entries_layout %}
|
||||
</div>
|
|
@ -0,0 +1,45 @@
|
|||
---
|
||||
layout: archive
|
||||
---
|
||||
|
||||
{{ content }}
|
||||
|
||||
{% assign tags_max = 0 %}
|
||||
{% for tag in collections.tags %}
|
||||
{% if collections[tag].size > tags_max %}
|
||||
{% assign tags_max = collections[tag].size %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
|
||||
|
||||
<ul class="taxonomy__index">
|
||||
{% for i in (1..tags_max) reversed %}
|
||||
{% for tag in collections.tags %}
|
||||
{% if collections[tag].size == i %}
|
||||
<li>
|
||||
<a href="#{{ tag | slugify }}">
|
||||
<strong>{{ tag }}</strong> <span class="taxonomy__count">{{ i }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
{% assign entries_layout = page.entries_layout | default: 'list' %}
|
||||
{% for i in (1..tags_max) reversed %}
|
||||
{% for tag in collections.tags %}
|
||||
{% if collections[tag].size == i %}
|
||||
<section id="{{ tag | slugify | downcase }}" class="taxonomy__section">
|
||||
<h2 class="archive__subtitle">{{ tag }}</h2>
|
||||
<div class="entries-{{ entries_layout }}">
|
||||
{% for post in collections[tag] %}
|
||||
{% include archive-single.html type=entries_layout, aPost=post %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
<a href="#page-title" class="back-to-top">{{ ui-text[site.locale].back_to_top | default: 'Back to Top' }} ↑</a>
|
||||
</section>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfor %}
|
|
@ -0,0 +1,35 @@
|
|||
{% capture logo_path %}{{ site.logo }}{% endcapture %}
|
||||
|
||||
<div class="masthead">
|
||||
<div class="masthead__inner-wrap">
|
||||
<div class="masthead__menu">
|
||||
<nav id="site-nav" class="greedy-nav">
|
||||
{% unless logo_path == empty %}
|
||||
<a class="site-logo" href="{{ '/' | relative_url }}"><img src="{{ logo_path | relative_url }}" alt="{{ site.masthead_title | default: site.title }}"></a>
|
||||
{% endunless %}
|
||||
<a class="site-title" href="{{ '/' | relative_url }}">
|
||||
{{ site.masthead_title | default: site.title }}
|
||||
{% if site.subtitle %}<span class="site-subtitle">{{ site.subtitle }}</span>{% endif %}
|
||||
</a>
|
||||
<ul class="visible-links">
|
||||
{%- for link in navigation.main -%}
|
||||
<li class="masthead__menu-item">
|
||||
<a href="{{ link.url | relative_url }}"{% if link.description %} title="{{ link.description }}"{% endif %}>{{ link.title }}</a>
|
||||
</li>
|
||||
{%- endfor -%}
|
||||
</ul>
|
||||
{% if site.search == true %}
|
||||
<button class="search__toggle" type="button">
|
||||
<span class="visually-hidden">{{ ui-text[site.locale].search_label | default: "Toggle search" }}</span>
|
||||
<i class="fas fa-search"></i>
|
||||
</button>
|
||||
{% endif %}
|
||||
<button class="greedy-nav__toggle hidden" type="button">
|
||||
<span class="visually-hidden">{{ ui-text[site.locale].menu_label | default: "Toggle menu" }}</span>
|
||||
<div class="navicon"></div>
|
||||
</button>
|
||||
<ul class="hidden-links hidden"></ul>
|
||||
</nav>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,26 @@
|
|||
{% assign navigation = site.data.navigation[include.nav] %}
|
||||
|
||||
<nav class="nav__list">
|
||||
{% if page.sidebar.title %}<h3 class="nav__title" style="padding-left: 0;">{{ page.sidebar.title }}</h3>{% endif %}
|
||||
<input id="ac-toc" name="accordion-toc" type="checkbox" />
|
||||
<label for="ac-toc">{{ ui-text[site.locale].menu_label | default: "Toggle Menu" }}</label>
|
||||
<ul class="nav__items">
|
||||
{% for nav in navigation %}
|
||||
<li>
|
||||
{% if nav.url %}
|
||||
<a href="{{ nav.url | relative_url }}"><span class="nav__sub-title">{{ nav.title }}</span></a>
|
||||
{% else %}
|
||||
<span class="nav__sub-title">{{ nav.title }}</span>
|
||||
{% endif %}
|
||||
|
||||
{% if nav.children != null %}
|
||||
<ul>
|
||||
{% for child in nav.children %}
|
||||
<li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} class="active"{% endif %}>{{ child.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</nav>
|
|
@ -0,0 +1,7 @@
|
|||
{% assign date_format = site.date_format | default: "dddd, LL" %}
|
||||
{% if date %}
|
||||
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ ui-text[site.locale].date_posted | default: "Posted:" }}</strong> <time datetime="{{ date | date_to_xmlschema }}">{{ date | date: date_format }}</time></p>
|
||||
{% endif %}
|
||||
{% if last_modified %}
|
||||
<p class="page__date"><strong><i class="fas fa-fw fa-calendar-alt" aria-hidden="true"></i> {{ ui-text[site.locale].date_label | default: "Updated:" }}</strong> <time datetime="{{ page.last_modified_at | date: "Y-M-D" }}">{{ last_modified | date: date_format }}</time></p>
|
||||
{% endif %}
|
|
@ -0,0 +1,55 @@
|
|||
{% capture overlay_img_path %}{{ header.overlay_image | relative_url }}{% endcapture %}
|
||||
|
||||
{% if header.overlay_filter contains "gradient" %}
|
||||
{% capture overlay_filter %}{{ header.overlay_filter }}{% endcapture %}
|
||||
{% elsif header.overlay_filter contains "rgba" %}
|
||||
{% capture overlay_filter %}{{ header.overlay_filter }}{% endcapture %}
|
||||
{% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
|
||||
{% elsif header.overlay_filter %}
|
||||
{% capture overlay_filter %}rgba(0, 0, 0, {{ header.overlay_filter }}){% endcapture %}
|
||||
{% capture overlay_filter %}linear-gradient({{ overlay_filter }}, {{ overlay_filter }}){% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if header.image_description %}
|
||||
{% assign image_description = header.image_description %}
|
||||
{% else %}
|
||||
{% assign image_description = title %}
|
||||
{% endif %}
|
||||
|
||||
{% assign image_description = image_description | markdownify | strip_html | strip_newlines | escape_once %}
|
||||
|
||||
<div class="page__hero{% if header.overlay_color or header.overlay_image %}--overlay{% endif %}"
|
||||
style="{% if header.overlay_color %}background-color: {{ header.overlay_color | default: 'transparent' }};{% endif %} {% if overlay_img_path %}background-image: {% if overlay_filter %}{{ overlay_filter }}, {% endif %}url('{{ overlay_img_path }}');{% endif %}"
|
||||
>
|
||||
{% if header.overlay_color or header.overlay_image %}
|
||||
<div class="wrapper">
|
||||
<h1 id="page-title" class="page__title" itemprop="headline">
|
||||
{% if paginator and site.paginate_show_page_num %}
|
||||
{{ site.title }}{% unless paginator.page == 1 %} {{ ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}
|
||||
{% else %}
|
||||
{{ title | default: site.title | markdownify | remove: "<p>" | remove: "</p>" }}
|
||||
{% endif %}
|
||||
</h1>
|
||||
{% if tagline %}
|
||||
<p class="page__lead">{{ tagline | markdownify | remove: "<p>" | remove: "</p>" }}</p>
|
||||
{% elsif header.show_overlay_excerpt != false and page.excerpt %}
|
||||
<p class="page__lead">{{ excerpt | markdownify | remove: "<p>" | remove: "</p>" }}</p>
|
||||
{% endif %}
|
||||
{% include page__meta.html %}
|
||||
{% if header.cta_url %}
|
||||
<p><a href="{{ header.cta_url | relative_url }}" class="btn btn--light-outline btn--large">{{ header.cta_label | default: ui-text[site.locale].more_label | default: "Learn More" }}</a></p>
|
||||
{% endif %}
|
||||
{% if header.actions %}
|
||||
<p>
|
||||
{% for action in header.actions %}
|
||||
<a href="{{ action.url | relative_url }}" class="btn btn--light-outline btn--large">{{ action.label | default: ui-text[site.locale].more_label | default: "Learn More" }}</a>
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% else %}
|
||||
<img src="{{ header.image | relative_url }}" alt="{{ image_description }}" class="page__hero-image">
|
||||
{% endif %}
|
||||
{% if header.caption %}
|
||||
<span class="page__hero-caption">{{ header.caption | markdownify | remove: "<p>" | remove: "</p>" }}</span>
|
||||
{% endif %}
|
||||
</div>
|
|
@ -0,0 +1,2 @@
|
|||
{% assign video = header.video %}
|
||||
{% include video id=video.id provider=video.provider danmaku=video.danmaku %}
|
|
@ -0,0 +1,37 @@
|
|||
{% assign document = post | default: page %}
|
||||
{% assign document = document.data.page %}
|
||||
|
||||
{% if document.read_time or document.show_date or site.defaults.posts.show_date %}
|
||||
|
||||
<p class="page__meta">
|
||||
{% if document.show_date or site.defaults.posts.show_date and document.date %}
|
||||
{% assign date = document.date %}
|
||||
<span class="page__meta-date">
|
||||
<i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-calendar-alt" aria-hidden="true"></i>
|
||||
{% assign date_format = site.date_format | default: "LLLL" %}
|
||||
<time datetime="{{ date | date_to_xmlschema }}">{{ date | date: date_format }}</time>
|
||||
</span>
|
||||
{% endif %}
|
||||
{% if document and document.read_time or site.defaults.posts.read_time and document.show_date or site.defaults.posts.show_date %}<span class="page__meta-sep"></span>{% endif %}
|
||||
|
||||
{% if document.read_time or site.defaults.posts.read_time %}
|
||||
{% assign words_per_minute = document.words_per_minute | default: site.words_per_minute | default: 200 %}
|
||||
|
||||
{% assign con = include.content | default: content %}
|
||||
{% assign words = con | strip_html | number_of_words %}
|
||||
|
||||
<!-- There is a minute difference between the time to read on the list pages, and on the article itself. So 5 minutes to read in the list, 4 minutes to read on article itself -->
|
||||
|
||||
<span class="page__meta-readtime">
|
||||
<i class="far {% if include.type == 'grid' and document.read_time and document.show_date %}fa-fw {% endif %}fa-clock" aria-hidden="true"></i>
|
||||
{% if words < words_per_minute %}
|
||||
{{ ui-text[site.locale].less_than | default: "less than" }} 1 {{ ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% elsif words == words_per_minute %}
|
||||
1 {{ ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% else %}
|
||||
{{ words | divided_by: words_per_minute | round }} {{ ui-text[site.locale].minute_read | default: "minute read" }}
|
||||
{% endif %}
|
||||
</span>
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
|
@ -0,0 +1,7 @@
|
|||
{% if site.tag_archive.type and tags[0] %}
|
||||
{% include tag-list.html %}
|
||||
{% endif %}
|
||||
|
||||
{% if site.category_archive.type and categories[0] %}
|
||||
{% include category-list.html %}
|
||||
{% endif %}
|
|
@ -0,0 +1,69 @@
|
|||
{% if paginator.total_pages > 1 %}
|
||||
<nav class="pagination">
|
||||
{% assign first_page_path = paginator.first_page_path | default: site.paginate_path | replace: 'page:num', '' | replace: '//', '/' | relative_url %}
|
||||
<ul>
|
||||
{% comment %} Link for previous page {% endcomment %}
|
||||
{% if paginator.previous_page %}
|
||||
{% if paginator.previous_page == 1 %}
|
||||
<li><a href="{{ first_page_path }}">{{ ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ site.paginate_path | replace: ':num', paginator.previous_page | replace: '//', '/' | relative_url }}">{{ ui-text[site.locale].pagination_previous | default: "Previous" }}</a></li>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<li><a href="#" class="disabled"><span aria-hidden="true">{{ ui-text[site.locale].pagination_previous | default: "Previous" }}</span></a></li>
|
||||
{% endif %}
|
||||
|
||||
{% comment %} First page {% endcomment %}
|
||||
{% if paginator.page == 1 %}
|
||||
<li><a href="#" class="disabled current">1</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ first_page_path }}">1</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% assign page_start = 2 %}
|
||||
{% if paginator.page > 4 %}
|
||||
{% assign page_start = paginator.page | minus: 2 %}
|
||||
{% comment %} Ellipsis for truncated links {% endcomment %}
|
||||
<li><a href="#" class="disabled">…</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% assign page_end = paginator.total_pages | minus: 1 %}
|
||||
{% assign pages_to_end = paginator.total_pages | minus: paginator.page %}
|
||||
{% if pages_to_end > 4 %}
|
||||
{% assign page_end = paginator.page | plus: 2 %}
|
||||
{% endif %}
|
||||
|
||||
{% for index in (page_start..page_end) %}
|
||||
{% if index == paginator.page %}
|
||||
<li><a href="{{ site.paginate_path | replace: ':num', index | replace: '//', '/' | relative_url }}" class="disabled current">{{ index }}</a></li>
|
||||
{% else %}
|
||||
{% comment %} Distance from current page and this link {% endcomment %}
|
||||
{% assign dist = paginator.page | minus: index %}
|
||||
{% if dist < 0 %}
|
||||
{% comment %} Distance must be a positive value {% endcomment %}
|
||||
{% assign dist = 0 | minus: dist %}
|
||||
{% endif %}
|
||||
<li><a href="{{ site.paginate_path | replace: ':num', index | relative_url }}">{{ index }}</a></li>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% comment %} Ellipsis for truncated links {% endcomment %}
|
||||
{% if pages_to_end > 3 %}
|
||||
<li><a href="#" class="disabled">…</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% if paginator.page == paginator.total_pages %}
|
||||
<li><a href="#" class="disabled current">{{ paginator.page }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="{{ site.paginate_path | replace: ':num', paginator.total_pages | replace: '//', '/' | relative_url }}">{{ paginator.total_pages }}</a></li>
|
||||
{% endif %}
|
||||
|
||||
{% comment %} Link next page {% endcomment %}
|
||||
{% if paginator.next_page %}
|
||||
<li><a href="{{ site.paginate_path | replace: ':num', paginator.next_page | replace: '//', '/' | relative_url }}">{{ ui-text[site.locale].pagination_next | default: "Next" }}</a></li>
|
||||
{% else %}
|
||||
<li><a href="#" class="disabled"><span aria-hidden="true">{{ ui-text[site.locale].pagination_next | default: "Next" }}</span></a></li>
|
||||
{% endif %}
|
||||
</ul>
|
||||
</nav>
|
||||
{% endif %}
|
|
@ -0,0 +1,15 @@
|
|||
|
||||
{% if include.siblings.prev or include.siblings.next %}
|
||||
<nav class="pagination">
|
||||
{% if include.siblings.prev %}
|
||||
<a href="{{ include.siblings.prev.url | relative_url }}" class="pagination--pager" title="{{ include.siblings.prev.data.title | markdownify | strip_html }}">{{ ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
|
||||
{% else %}
|
||||
<a href="#" class="pagination--pager disabled">{{ ui-text[site.locale].pagination_previous | default: "Previous" }}</a>
|
||||
{% endif %}
|
||||
{% if include.siblings.next %}
|
||||
<a href="{{ include.siblings.next.url | relative_url }}" class="pagination--pager" title="{{ include.siblings.next.data.title | markdownify | strip_html }}">{{ ui-text[site.locale].pagination_next | default: "Next" }}</a>
|
||||
{% else %}
|
||||
<a href="#" class="pagination--pager disabled">{{ ui-text[site.locale].pagination_next | default: "Next" }}</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
{% endif %}
|
|
@ -0,0 +1,5 @@
|
|||
{%- for post in site.categories[include.taxonomy] -%}
|
||||
{%- unless post.hidden -%}
|
||||
{% include archive-single.html %}
|
||||
{%- endunless -%}
|
||||
{%- endfor -%}
|
|
@ -0,0 +1,5 @@
|
|||
{%- for post in site.tags[include.taxonomy] -%}
|
||||
{%- unless post.hidden -%}
|
||||
{% include archive-single.html %}
|
||||
{%- endunless -%}
|
||||
{%- endfor -%}
|
|
@ -0,0 +1,28 @@
|
|||
{% if site.footer_scripts %}
|
||||
{% for script in site.footer_scripts %}
|
||||
<script src="{{ script | relative_url }}"></script>
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<script src="{{ '/assets/js/main.min.js' | relative_url }}"></script>
|
||||
{% endif %}
|
||||
|
||||
{% if site.search == true or page.layout == "search" %}
|
||||
{%- assign search_provider = site.search_provider | default: "lunr" -%}
|
||||
{%- case search_provider -%}
|
||||
{%- when "lunr" -%}
|
||||
{% include search/lunr-search-scripts.html %}
|
||||
{%- when "google" -%}
|
||||
{% include search/google-search-scripts.html %}
|
||||
{%- when "algolia" -%}
|
||||
{% include search/algolia-search-scripts.html %}
|
||||
{%- endcase -%}
|
||||
{% endif %}
|
||||
|
||||
{% include analytics.html %}
|
||||
{% include comments-providers/scripts.html %}
|
||||
|
||||
{% if site.after_footer_scripts %}
|
||||
{% for script in site.after_footer_scripts %}
|
||||
<script src="{{ script | relative_url }}"></script>
|
||||
{% endfor %}
|
||||
{% endif %}
|
|
@ -0,0 +1,61 @@
|
|||
<!-- Including InstantSearch.js library and styling -->
|
||||
<script src="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.js"></script>
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch.min.css">
|
||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.js@2.3.3/dist/instantsearch-theme-algolia.min.css">
|
||||
|
||||
<script>
|
||||
// Instanciating InstantSearch.js with Algolia credentials
|
||||
const search = instantsearch({
|
||||
appId: '{{ site.algolia.application_id }}',
|
||||
apiKey: '{{ site.algolia.search_only_api_key }}',
|
||||
indexName: '{{ site.algolia.index_name }}',
|
||||
searchParameters: {
|
||||
restrictSearchableAttributes: [
|
||||
'title',
|
||||
'content'
|
||||
]
|
||||
}
|
||||
});
|
||||
|
||||
const hitTemplate = function(hit) {
|
||||
const url = hit.url;
|
||||
const title = hit._highlightResult.title.value;
|
||||
const content = hit._highlightResult.html.value;
|
||||
|
||||
return `
|
||||
<div class="list__item">
|
||||
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork">
|
||||
<h2 class="archive__item-title" itemprop="headline"><a href="{{ site.baseurl }}${url}">${title}</a></h2>
|
||||
<div class="archive__item-excerpt" itemprop="description">${content}</div>
|
||||
</article>
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
// Adding searchbar and results widgets
|
||||
search.addWidget(
|
||||
instantsearch.widgets.searchBox({
|
||||
container: '.search-searchbar',
|
||||
{% unless site.algolia.powered_by == false %}poweredBy: true,{% endunless %}
|
||||
placeholder: '{{ ui-text[site.locale].search_placeholder_text | default: "Enter your search term..." }}'
|
||||
})
|
||||
);
|
||||
search.addWidget(
|
||||
instantsearch.widgets.hits({
|
||||
container: '.search-hits',
|
||||
templates: {
|
||||
item: hitTemplate,
|
||||
empty: '{{ ui-text[site.locale].search_algolia_no_results | default: "No results" }}',
|
||||
}
|
||||
})
|
||||
);
|
||||
|
||||
// Starting the search only when toggle is clicked
|
||||
$(document).ready(function () {
|
||||
$(".search__toggle").on("click", function() {
|
||||
if(!search.started) {
|
||||
search.start();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
|
@ -0,0 +1,30 @@
|
|||
<script>
|
||||
(function () {
|
||||
var cx = '{{ site.google.search_engine_id }}';
|
||||
var gcse = document.createElement('script');
|
||||
gcse.type = 'text/javascript';
|
||||
gcse.async = true;
|
||||
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
|
||||
var s = document.getElementsByTagName('script')[0];
|
||||
s.parentNode.insertBefore(gcse, s);
|
||||
})();
|
||||
|
||||
function googleCustomSearchExecute() {
|
||||
var input = document.getElementById('cse-search-input-box-id');
|
||||
var element = google.search.cse.element.getElement('searchresults-only0');
|
||||
if (input.value == '') {
|
||||
element.clearAllResults();
|
||||
} else {
|
||||
element.execute(input.value);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
{% if site.google.instant_search %}
|
||||
$(document).ready(function () {
|
||||
$('input#cse-search-input-box-id').on('keyup', function () {
|
||||
googleCustomSearchExecute();
|
||||
});
|
||||
});
|
||||
{% endif %}
|
||||
</script>
|
|
@ -0,0 +1,10 @@
|
|||
{% assign lang = site.locale | slice: 0,2 | default: "en" %}
|
||||
{% case lang %}
|
||||
{% when "gr" %}
|
||||
{% assign lang = "gr" %}
|
||||
{% else %}
|
||||
{% assign lang = "en" %}
|
||||
{% endcase %}
|
||||
<script src="{{ '/assets/js/lunr/lunr.min.js' | relative_url }}"></script>
|
||||
<script src="{{ '/assets/js/lunr/lunr-store.js' | relative_url }}"></script>
|
||||
<script src="{{ '/assets/js/lunr/lunr-' | append: lang | append: '.js' | relative_url }}"></script>
|
|
@ -0,0 +1,26 @@
|
|||
<div class="search-content__inner-wrap">
|
||||
{%- assign search_provider = site.search_provider | default: "lunr" -%}
|
||||
{%- case search_provider -%}
|
||||
{%- when "lunr" -%}
|
||||
<form class="search-content__form" onkeydown="return event.key != 'Enter';">
|
||||
<label class="sr-only" for="search">
|
||||
{{ ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
|
||||
</label>
|
||||
<input type="search" id="search" class="search-input" tabindex="-1" placeholder="{{ ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
|
||||
</form>
|
||||
<div id="results" class="results"></div>
|
||||
{%- when "google" -%}
|
||||
<form onsubmit="return googleCustomSearchExecute();" id="cse-search-box-form-id">
|
||||
<label class="sr-only" for="cse-search-input-box-id">
|
||||
{{ ui-text[site.locale].search_label_text | default: 'Enter your search term...' }}
|
||||
</label>
|
||||
<input type="search" id="cse-search-input-box-id" class="search-input" tabindex="-1" placeholder="{{ ui-text[site.locale].search_placeholder_text | default: 'Enter your search term...' }}" />
|
||||
</form>
|
||||
<div id="results" class="results">
|
||||
<gcse:searchresults-only></gcse:searchresults-only>
|
||||
</div>
|
||||
{%- when "algolia" -%}
|
||||
<div class="search-searchbar"></div>
|
||||
<div class="search-hits"></div>
|
||||
{%- endcase -%}
|
||||
</div>
|
|
@ -0,0 +1,158 @@
|
|||
<!-- begin _includes/seo.html -->
|
||||
{%- if site.url -%}
|
||||
{%- assign seo_url = site.url | append: site.baseurl -%}
|
||||
{%- endif -%}
|
||||
{%- assign seo_url = seo_url | default: site.github.url -%}
|
||||
|
||||
{% assign title_separator = site.title_separator | default: '-' | replace: '|', '|' %}
|
||||
|
||||
{%- if title -%}
|
||||
{%- assign seo_title = title | append: " " | append: title_separator | append: " " | append: site.title -%}
|
||||
{%- endif -%}
|
||||
|
||||
{%- if seo_title -%}
|
||||
{%- assign seo_title = seo_title | markdownify | strip_html | strip_newlines | escape_once -%}
|
||||
{%- endif -%}
|
||||
|
||||
{% if page.canonical_url %}
|
||||
{%- assign canonical_url = page.canonical_url %}
|
||||
{% else %}
|
||||
{%- assign canonical_url = page.url | replace: "index.html", "" | absolute_url %}
|
||||
{% endif %}
|
||||
|
||||
{%- assign seo_description = description | default: excerpt | default: site.description -%}
|
||||
{%- if seo_description -%}
|
||||
{%- assign seo_description = seo_description | markdownify | strip_html | newline_to_br | strip_newlines | replace: '<br />', ' ' | escape_once | strip -%}
|
||||
{%- endif -%}
|
||||
|
||||
{%- assign author = author | default: authors[0] | default: site.author -%}
|
||||
{%- assign author = authors[author] | default: author -%}
|
||||
|
||||
{%- if author.twitter -%}
|
||||
{%- assign author_twitter = author.twitter | replace: "@", "" -%}
|
||||
{%- endif -%}
|
||||
|
||||
{%- assign page_large_image = header.og_image | default: header.overlay_image | default: header.image | absolute_url -%}
|
||||
{%- assign page_large_image = page_large_image | escape -%}
|
||||
|
||||
{%- assign page_teaser_image = header.teaser | default: site.og_image | absolute_url -%}
|
||||
{%- assign page_teaser_image = page_teaser_image | escape -%}
|
||||
|
||||
{%- assign site_og_image = site.og_image | absolute_url -%}
|
||||
{%- assign site_og_image = site_og_image | escape -%}
|
||||
|
||||
{%- if date -%}
|
||||
{%- assign og_type = "article" -%}
|
||||
{%- else -%}
|
||||
{%- assign og_type = "website" -%}
|
||||
{%- endif -%}
|
||||
|
||||
<title>{{ seo_title | default: site.title }}{% if paginator %}{% unless paginator.page == 1 %} {{ title_separator }} {{ ui-text[site.locale].page | default: "Page" }} {{ paginator.page }}{% endunless %}{% endif %}</title>
|
||||
<meta name="description" content="{{ seo_description }}">
|
||||
|
||||
{% if author.name %}
|
||||
<meta name="author" content="{{ author.name | default: author }}">
|
||||
{% if og_type == "article" %}
|
||||
<meta property="article:author" content="{{ author.name | default: author }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<meta property="og:type" content="{{ og_type }}">
|
||||
<meta property="og:locale" content="{{ site.locale | replace: "-", "_" | default: "en_US" }}">
|
||||
<meta property="og:site_name" content="{{ site.title }}">
|
||||
<meta property="og:title" content="{{ title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
|
||||
<meta property="og:url" content="{{ canonical_url }}">
|
||||
|
||||
{% if seo_description %}
|
||||
<meta property="og:description" content="{{ seo_description }}">
|
||||
{% endif %}
|
||||
|
||||
{% if page_large_image %}
|
||||
<meta property="og:image" content="{{ page_large_image }}">
|
||||
{% elsif page_teaser_image %}
|
||||
<meta property="og:image" content="{{ page_teaser_image }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.twitter.username %}
|
||||
<meta name="twitter:site" content="@{{ site.twitter.username | replace: "@", "" }}">
|
||||
<meta name="twitter:title" content="{{ title | default: site.title | markdownify | strip_html | strip_newlines | escape_once }}">
|
||||
<meta name="twitter:description" content="{{ seo_description }}">
|
||||
<meta name="twitter:url" content="{{ canonical_url }}">
|
||||
|
||||
{% if page_large_image %}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="{{ page_large_image }}">
|
||||
{% else %}
|
||||
<meta name="twitter:card" content="summary">
|
||||
{% if page_teaser_image %}
|
||||
<meta name="twitter:image" content="{{ page_teaser_image }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if author_twitter %}
|
||||
<meta name="twitter:creator" content="@{{ author_twitter }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
{% if date %}
|
||||
<meta property="article:published_time" content="{{ date | date_to_xmlschema }}">
|
||||
{% endif %}
|
||||
|
||||
{% if og_type == "article" and page.last_modified_at %}
|
||||
<meta property="article:modified_time" content="{{ last_modified_at | date_to_xmlschema }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.facebook %}
|
||||
{% if site.facebook.publisher %}
|
||||
<meta property="article:publisher" content="{{ site.facebook.publisher }}">
|
||||
{% endif %}
|
||||
|
||||
{% if site.facebook.app_id %}
|
||||
<meta property="fb:app_id" content="{{ site.facebook.app_id }}">
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<link rel="canonical" href="{{ canonical_url }}">
|
||||
|
||||
{% if paginator.previous_page %}
|
||||
<link rel="prev" href="{{ paginator.previous_page_path | absolute_url }}">
|
||||
{% endif %}
|
||||
{% if paginator.next_page %}
|
||||
<link rel="next" href="{{ paginator.next_page_path | absolute_url }}">
|
||||
{% endif %}
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
{% if site.social.type == "Organization" %}
|
||||
"@type": "Organization",
|
||||
"url": {{ '/' | absolute_url | jsonify }}{% if site.og_image %},
|
||||
"logo": {{ site_og_image | jsonify }}{% endif %}
|
||||
{% else %}
|
||||
"@type": "Person",
|
||||
"name": {{ site.social.name | default: site.name | jsonify }},
|
||||
"url": {{ '/' | absolute_url |jsonify }}{% if site.social.links %},
|
||||
"sameAs": {{ site.social.links | jsonify }}{% endif %}
|
||||
{% endif %}
|
||||
}
|
||||
</script>
|
||||
|
||||
{% if site.google_site_verification %}
|
||||
<meta name="google-site-verification" content="{{ site.google_site_verification }}" />
|
||||
{% endif %}
|
||||
{% if site.bing_site_verification %}
|
||||
<meta name="msvalidate.01" content="{{ site.bing_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.alexa_site_verification %}
|
||||
<meta name="alexaVerifyID" content="{{ site.alexa_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.yandex_site_verification %}
|
||||
<meta name="yandex-verification" content="{{ site.yandex_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.naver_site_verification %}
|
||||
<meta name="naver-site-verification" content="{{ site.naver_site_verification }}">
|
||||
{% endif %}
|
||||
{% if site.baidu_site_verification %}
|
||||
<meta name="baidu-site-verification" content="{{ site.baidu_site_verification }}">
|
||||
{% endif %}
|
||||
<!-- end _includes/seo.html -->
|
|
@ -0,0 +1,22 @@
|
|||
{% if author_profile or layout.author_profile or site.defaults.posts.author_profile or site.defaults.pages.author_profile or sidebar or site.defaults.posts.sidebar %}
|
||||
|
||||
{% assign sidebar = sidebar | default: site.defaults.posts.sidebar | default: false %}
|
||||
|
||||
<div class="sidebar sticky">
|
||||
{% if page.author_profile or layout.author_profile or site.defaults.posts.author_profile or site.defaults.pages.author_profile %}{% include author-profile.html %}{% endif %}
|
||||
{% if sidebar %}
|
||||
{% for s in sidebar %}
|
||||
{% if s.image %}
|
||||
<img src="{{ s.image | relative_url }}"
|
||||
alt="{% if s.image_alt %}{{ s.image_alt }}{% endif %}">
|
||||
{% endif %}
|
||||
{% if s.title %}<h3>{{ s.title }}</h3>{% endif %}
|
||||
{% if s.text %}{{ s.text | markdownify }}{% endif %}
|
||||
{% if s.nav %}{% include nav_list nav=s.nav %}{% endif %}
|
||||
{% endfor %}
|
||||
{% if sidebar.nav %}
|
||||
{% include nav_list nav=sidebar.nav %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
|
@ -0,0 +1,7 @@
|
|||
<nav class="skip-links">
|
||||
<ul>
|
||||
<li><a href="#site-nav" class="screen-reader-shortcut">{{ ui-text[site.locale].skip_primary_nav | default: 'Skip to primary navigation' }}</a></li>
|
||||
<li><a href="#main" class="screen-reader-shortcut">{{ ui-text[site.locale].skip_content | default: 'Skip to content' }}</a></li>
|
||||
<li><a href="#footer" class="screen-reader-shortcut">{{ ui-text[site.locale].skip_footer | default: 'Skip to footer' }}</a></li>
|
||||
</ul>
|
||||
</nav>
|
|
@ -0,0 +1,11 @@
|
|||
<section class="page__share">
|
||||
{% if ui-text[site.locale].share_on_label %}
|
||||
<h4 class="page__share-title">{{ ui-text[site.locale].share_on_label | default: "Share on" }}</h4>
|
||||
{% endif %}
|
||||
|
||||
<a href="https://twitter.com/intent/tweet?{% if site.twitter.username %}via={{ site.twitter.username | url_encode }}&{% endif %}text={{ page.title | url_encode }}%20{{ page.url | absolute_url | url_encode }}" class="btn btn--twitter" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ ui-text[site.locale].share_on_label | default: 'Share on' }} Twitter"><i class="fab fa-fw fa-twitter" aria-hidden="true"></i><span> Twitter</span></a>
|
||||
|
||||
<a href="https://www.facebook.com/sharer/sharer.php?u={{ page.url | absolute_url | url_encode }}" class="btn btn--facebook" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ ui-text[site.locale].share_on_label | default: 'Share on' }} Facebook"><i class="fab fa-fw fa-facebook" aria-hidden="true"></i><span> Facebook</span></a>
|
||||
|
||||
<a href="https://www.linkedin.com/shareArticle?mini=true&url={{ page.url | absolute_url | url_encode }}" class="btn btn--linkedin" onclick="window.open(this.href, 'window', 'left=20,top=20,width=500,height=500,toolbar=1,resizable=0'); return false;" title="{{ ui-text[site.locale].share_on_label | default: 'Share on' }} LinkedIn"><i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span> LinkedIn</span></a>
|
||||
</section>
|
|
@ -0,0 +1,19 @@
|
|||
{% case site.tag_archive.type %}
|
||||
{% when "liquid" %}
|
||||
{% assign path_type = "#" %}
|
||||
{% when "jekyll-archives" %}
|
||||
{% assign path_type = nil %}
|
||||
{% endcase %}
|
||||
|
||||
{% if site.tag_archive.path %}
|
||||
{% assign tags_sorted = tags | sort_natural %}
|
||||
|
||||
<p class="page__taxonomy">
|
||||
<strong><i class="fas fa-fw fa-tags" aria-hidden="true"></i> {{ ui-text[site.locale].tags_label | default: "Tags:" }} </strong>
|
||||
<span itemprop="keywords">
|
||||
{% for tag_word in tags_sorted %}
|
||||
<a href="{{ tag_word | slugify | prepend: path_type | prepend: site.tag_archive.path | relative_url }}" class="page__taxonomy-item" rel="tag">{{ tag_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
|
||||
{% endfor %}
|
||||
</span>
|
||||
</p>
|
||||
{% endif %}
|
|
@ -0,0 +1,182 @@
|
|||
{% capture tocWorkspace %}
|
||||
{% comment %}
|
||||
Copyright (c) 2017 Vladimir "allejo" Jimenez
|
||||
|
||||
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.
|
||||
{% endcomment %}
|
||||
{% comment %}
|
||||
Version 1.1.0
|
||||
https://github.com/allejo/jekyll-toc
|
||||
|
||||
"...like all things liquid - where there's a will, and ~36 hours to spare, there's usually a/some way" ~jaybe
|
||||
|
||||
Usage:
|
||||
{% include toc.html html=content sanitize=true class="inline_toc" id="my_toc" h_min=2 h_max=3 %}
|
||||
|
||||
Parameters:
|
||||
* html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
|
||||
|
||||
Optional Parameters:
|
||||
* sanitize (bool) : false - when set to true, the headers will be stripped of any HTML in the TOC
|
||||
* class (string) : '' - a CSS class assigned to the TOC
|
||||
* id (string) : '' - an ID to assigned to the TOC
|
||||
* h_min (int) : 1 - the minimum TOC header level to use; any header lower than this value will be ignored
|
||||
* h_max (int) : 6 - the maximum TOC header level to use; any header greater than this value will be ignored
|
||||
* ordered (bool) : false - when set to true, an ordered list will be outputted instead of an unordered list
|
||||
* item_class (string) : '' - add custom class(es) for each list item; has support for '%level%' placeholder, which is the current heading level
|
||||
* submenu_class (string) : '' - add custom class(es) for each child group of headings; has support for '%level%' placeholder which is the current "submenu" heading level
|
||||
* base_url (string) : '' - add a base url to the TOC links for when your TOC is on another page than the actual content
|
||||
* anchor_class (string) : '' - add custom class(es) for each anchor element
|
||||
* skip_no_ids (bool) : false - skip headers that do not have an `id` attribute
|
||||
|
||||
Output:
|
||||
An ordered or unordered list representing the table of contents of a markdown block. This snippet will only
|
||||
generate the table of contents and will NOT output the markdown given to it
|
||||
{% endcomment %}
|
||||
|
||||
{% capture newline %}
|
||||
{% endcapture %}
|
||||
{% assign newline = newline | rstrip %} <!-- Remove the extra spacing but preserve the newline -->
|
||||
|
||||
{% capture deprecation_warnings %}{% endcapture %}
|
||||
|
||||
{% if include.baseurl %}
|
||||
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "baseurl" has been deprecated, use "base_url" instead -->{{ newline }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.skipNoIDs %}
|
||||
{% capture deprecation_warnings %}{{ deprecation_warnings }}<!-- jekyll-toc :: "skipNoIDs" has been deprecated, use "skip_no_ids" instead -->{{ newline }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture jekyll_toc %}{% endcapture %}
|
||||
{% assign orderedList = include.ordered | default: false %}
|
||||
{% assign baseURL = include.base_url | default: include.baseurl | default: '' %}
|
||||
{% assign skipNoIDs = include.skip_no_ids | default: include.skipNoIDs | default: false %}
|
||||
{% assign minHeader = include.h_min | default: 1 %}
|
||||
{% assign maxHeader = include.h_max | default: 6 %}
|
||||
{% assign nodes = include.html | strip | split: '<h' %}
|
||||
|
||||
{% assign firstHeader = true %}
|
||||
{% assign currLevel = 0 %}
|
||||
{% assign lastLevel = 0 %}
|
||||
|
||||
{% capture listModifier %}{% if orderedList %}ol{% else %}ul{% endif %}{% endcapture %}
|
||||
|
||||
{% for node in nodes %}
|
||||
{% if node == "" %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% assign currLevel = node | replace: '"', '' | slice: 0, 1 | times: 1 %}
|
||||
|
||||
{% if currLevel < minHeader or currLevel > maxHeader %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% assign _workspace = node | split: '</h' %}
|
||||
|
||||
{% assign _idWorkspace = _workspace[0] | split: 'id="' %}
|
||||
{% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
|
||||
{% assign htmlID = _idWorkspace[0] %}
|
||||
|
||||
{% assign _classWorkspace = _workspace[0] | split: 'class="' %}
|
||||
{% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
|
||||
{% assign htmlClass = _classWorkspace[0] %}
|
||||
|
||||
{% if htmlClass contains "no_toc" %}
|
||||
{% continue %}
|
||||
{% endif %}
|
||||
|
||||
{% if firstHeader %}
|
||||
{% assign minHeader = currLevel %}
|
||||
{% endif %}
|
||||
|
||||
{% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
|
||||
{% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
|
||||
|
||||
{% if include.item_class and include.item_class != blank %}
|
||||
{% capture listItemClass %} class="{{ include.item_class | replace: '%level%', currLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.submenu_class and include.submenu_class != blank %}
|
||||
{% assign subMenuLevel = currLevel | minus: 1 %}
|
||||
{% capture subMenuClass %} class="{{ include.submenu_class | replace: '%level%', subMenuLevel | split: '.' | join: ' ' }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture anchorBody %}{% if include.sanitize %}{{ header | strip_html }}{% else %}{{ header }}{% endif %}{% endcapture %}
|
||||
|
||||
{% if htmlID %}
|
||||
{% capture anchorAttributes %} href="{% if baseURL %}{{ baseURL }}{% endif %}#{{ htmlID }}"{% endcapture %}
|
||||
|
||||
{% if include.anchor_class %}
|
||||
{% capture anchorAttributes %}{{ anchorAttributes }} class="{{ include.anchor_class | split: '.' | join: ' ' }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture listItem %}<a{{ anchorAttributes }}>{{ anchorBody }}</a>{% endcapture %}
|
||||
{% elsif skipNoIDs == true %}
|
||||
{% continue %}
|
||||
{% else %}
|
||||
{% capture listItem %}{{ anchorBody }}{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if currLevel > lastLevel %}
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}<{{ listModifier }}{{ subMenuClass }}>{% endcapture %}
|
||||
{% elsif currLevel < lastLevel %}
|
||||
{% assign repeatCount = lastLevel | minus: currLevel %}
|
||||
|
||||
{% for i in (1..repeatCount) %}
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
||||
{% endfor %}
|
||||
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
||||
{% else %}
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}</li>{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}<li{{ listItemClass }}>{{ listItem }}{% endcapture %}
|
||||
|
||||
{% assign lastLevel = currLevel %}
|
||||
{% assign firstHeader = false %}
|
||||
{% endfor %}
|
||||
|
||||
{% assign repeatCount = minHeader | minus: 1 %}
|
||||
{% assign repeatCount = lastLevel | minus: repeatCount %}
|
||||
{% for i in (1..repeatCount) %}
|
||||
{% capture jekyll_toc %}{{ jekyll_toc }}</li></{{ listModifier }}>{% endcapture %}
|
||||
{% endfor %}
|
||||
|
||||
{% if jekyll_toc != '' %}
|
||||
{% assign rootAttributes = '' %}
|
||||
{% if include.class and include.class != blank %}
|
||||
{% capture rootAttributes %} class="{{ include.class | split: '.' | join: ' ' }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if include.id and include.id != blank %}
|
||||
{% capture rootAttributes %}{{ rootAttributes }} id="{{ include.id }}"{% endcapture %}
|
||||
{% endif %}
|
||||
|
||||
{% if rootAttributes %}
|
||||
{% assign nodes = jekyll_toc | split: '>' %}
|
||||
{% capture jekyll_toc %}<{{ listModifier }}{{ rootAttributes }}>{{ nodes | shift | join: '>' }}>{% endcapture %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endcapture %}{% assign tocWorkspace = '' %}{{ deprecation_warnings }}{{ jekyll_toc }}
|
|
@ -0,0 +1,7 @@
|
|||
<aside class="sidebar__right">
|
||||
<nav class="toc" markdown="1">
|
||||
<header><h4 class="nav__title"><i class="fas fa-{{ include.icon | default: 'file-alt' }}"></i> {{ include.title | default: ui-text[site.locale].toc_label }}</h4></header>
|
||||
* Auto generated table of contents
|
||||
{:toc .toc__menu}
|
||||
</nav>
|
||||
</aside>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue