Add support for permalinks

This commit is contained in:
Ole Eskild Steensen 2022-03-01 11:19:51 +01:00
parent 7113398174
commit 4cf09880b0
6 changed files with 47 additions and 20 deletions

View File

@ -1,6 +1,8 @@
const slugify = require("@sindresorhus/slugify");
const markdownIt = require("markdown-it");
const fs = require('fs');
const fm = require('front-matter')
module.exports = function(eleventyConfig) {
const slugify = require("@sindresorhus/slugify");
const markdownIt = require("markdown-it");
let markdownLib = markdownIt({
breaks: true,
@ -56,10 +58,25 @@ module.exports = function(eleventyConfig) {
eleventyConfig.setLibrary("md", markdownLib);
eleventyConfig.addFilter('link', function(str) {
eleventyConfig.addTransform('link', function(str) {
return str && str.replace(/\[\[(.*?)\]\]/g, function(match, p1) {
return `<a class="internal-link" href="/notes/${slugify(p1)}">${p1}</a>`;
const linksplit = p1.split("|");
const fileName = linksplit[0];
let permalink = linksplit.length > 1 ? linksplit[0] : `/notes/${slugify(linksplit[0])}`;
const title = linksplit.length > 1 ? p1.split("|")[1] : p1;
try {
const file = fs.readFileSync(`./src/site/notes/${fileName}.md`, 'utf8');
const fmdata = fm(file);
if (fmdata.attributes.permalink) {
permalink = fmdata.attributes.permalink;
}
} catch {
//Ignore if file doesn't exist
}
return `<a class="internal-link" href="${permalink}">${title}</a>`;
});
})

31
package-lock.json generated
View File

@ -13,6 +13,7 @@
"@octokit/core": "^3.5.1",
"@sindresorhus/slugify": "^1.1.0",
"dotenv": "^10.0.0",
"front-matter": "^4.0.2",
"markdown-it": "^12.3.2"
},
"devDependencies": {
@ -520,7 +521,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": {
"sprintf-js": "~1.0.2"
}
@ -1370,7 +1370,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
"bin": {
"esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js"
@ -1548,6 +1547,14 @@
"node": ">= 0.6"
}
},
"node_modules/front-matter": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz",
"integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==",
"dependencies": {
"js-yaml": "^3.13.1"
}
},
"node_modules/fs-extra": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
@ -2065,7 +2072,6 @@
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@ -3625,8 +3631,7 @@
"node_modules/sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"node_modules/statuses": {
"version": "1.3.1",
@ -4579,7 +4584,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@ -5276,8 +5280,7 @@
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"etag": {
"version": "1.8.1",
@ -5409,6 +5412,14 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true
},
"front-matter": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz",
"integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==",
"requires": {
"js-yaml": "^3.13.1"
}
},
"fs-extra": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
@ -5808,7 +5819,6 @@
"version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@ -7065,8 +7075,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"statuses": {
"version": "1.3.1",

View File

@ -20,6 +20,7 @@
"@octokit/core": "^3.5.1",
"@sindresorhus/slugify": "^1.1.0",
"dotenv": "^10.0.0",
"front-matter": "^4.0.2",
"markdown-it": "^12.3.2"
}
}
}

View File

@ -14,7 +14,7 @@ permalink: "notes/{{ page.fileSlug | slugify }}/"
<div class="content">
<a href="/">&larr; Back to garden entry</a>
{{ content | link | safe}}
{{ content | safe}}
</div>
</body>

View File

@ -9,7 +9,7 @@
{%- if item.tags !== 'Garden' -%}
<a href="/">&larr; Back to Garden Entry</a>
{%endif%}
{{ item.content | link | safe}}
{{ item.content | safe}}
</div>
</body>
</html>

View File

@ -8,7 +8,7 @@
{%include "components/notegrowthhistory.njk"%}
<div class="content">
{%- for garden in collections.gardenEntry -%}
{{garden.templateContent | link | safe }}
{{garden.templateContent | safe }}
{%- endfor -%}
</div>
</body>