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) { module.exports = function(eleventyConfig) {
const slugify = require("@sindresorhus/slugify");
const markdownIt = require("markdown-it");
let markdownLib = markdownIt({ let markdownLib = markdownIt({
breaks: true, breaks: true,
@ -56,10 +58,25 @@ module.exports = function(eleventyConfig) {
eleventyConfig.setLibrary("md", markdownLib); eleventyConfig.setLibrary("md", markdownLib);
eleventyConfig.addTransform('link', function(str) {
eleventyConfig.addFilter('link', function(str) {
return str && str.replace(/\[\[(.*?)\]\]/g, function(match, p1) { 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", "@octokit/core": "^3.5.1",
"@sindresorhus/slugify": "^1.1.0", "@sindresorhus/slugify": "^1.1.0",
"dotenv": "^10.0.0", "dotenv": "^10.0.0",
"front-matter": "^4.0.2",
"markdown-it": "^12.3.2" "markdown-it": "^12.3.2"
}, },
"devDependencies": { "devDependencies": {
@ -520,7 +521,6 @@
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"dependencies": { "dependencies": {
"sprintf-js": "~1.0.2" "sprintf-js": "~1.0.2"
} }
@ -1370,7 +1370,6 @@
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true,
"bin": { "bin": {
"esparse": "bin/esparse.js", "esparse": "bin/esparse.js",
"esvalidate": "bin/esvalidate.js" "esvalidate": "bin/esvalidate.js"
@ -1548,6 +1547,14 @@
"node": ">= 0.6" "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": { "node_modules/fs-extra": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
@ -2065,7 +2072,6 @@
"version": "3.14.1", "version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"dependencies": { "dependencies": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
"esprima": "^4.0.0" "esprima": "^4.0.0"
@ -3625,8 +3631,7 @@
"node_modules/sprintf-js": { "node_modules/sprintf-js": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
"dev": true
}, },
"node_modules/statuses": { "node_modules/statuses": {
"version": "1.3.1", "version": "1.3.1",
@ -4579,7 +4584,6 @@
"version": "1.0.10", "version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": { "requires": {
"sprintf-js": "~1.0.2" "sprintf-js": "~1.0.2"
} }
@ -5276,8 +5280,7 @@
"esprima": { "esprima": {
"version": "4.0.1", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
"dev": true
}, },
"etag": { "etag": {
"version": "1.8.1", "version": "1.8.1",
@ -5409,6 +5412,14 @@
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
"dev": true "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": { "fs-extra": {
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
@ -5808,7 +5819,6 @@
"version": "3.14.1", "version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
"integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==",
"dev": true,
"requires": { "requires": {
"argparse": "^1.0.7", "argparse": "^1.0.7",
"esprima": "^4.0.0" "esprima": "^4.0.0"
@ -7065,8 +7075,7 @@
"sprintf-js": { "sprintf-js": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
"dev": true
}, },
"statuses": { "statuses": {
"version": "1.3.1", "version": "1.3.1",

View File

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

View File

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

View File

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

View File

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