From 7a1a50e677e19080799ce672acdb399f2497350a Mon Sep 17 00:00:00 2001 From: Helen Chong <119173961+helenclx@users.noreply.github.com> Date: Sat, 13 Apr 2024 01:54:48 +0800 Subject: [PATCH] Install slugify and markdown-it-anchor plug-ins --- bun.lockb | Bin 94444 -> 95995 bytes eleventy.config.js | 69 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 4 ++- 3 files changed, 72 insertions(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index c3d7050849d992d16f3fa17dbc03fffb501b3ca1..2bb70954c17257d7ad9a1347214701a1e7681063 100644 GIT binary patch delta 17657 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 Jrg!e}zX0=cF%$p* diff --git a/eleventy.config.js b/eleventy.config.js index 73bbddc5..98380b3c 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -5,6 +5,13 @@ const pluginRss = require("@11ty/eleventy-plugin-rss"); const metagen = require('eleventy-plugin-metagen'); const pluginTOC = require('eleventy-plugin-nesting-toc'); +// Configure slug filter +const slugify = require("slugify"); + +// Configure markdown-it plug-ins +const markdownIt = require("markdown-it"); +const markdownItAnchor = require("markdown-it-anchor"); + module.exports = function (eleventyConfig) { // Copy files eleventyConfig.addPassthroughCopy("./src/assets/"); @@ -20,6 +27,68 @@ module.exports = function (eleventyConfig) { eleventyConfig.addPlugin(metagen); eleventyConfig.addPlugin(pluginTOC, { tags: ['h2', 'h3', 'h4', 'h5'] }); + // Configure slug filter + eleventyConfig.addFilter("slug", (str) => { + if (!str) { + return; + } + + return slugify(str, { + lower: true, + remove: /["]/g, + }); + }); + + // Configure markdown-it plug-ins + eleventyConfig.setLibrary( + 'md', + markdownIt().use(markdownItAnchor) + ) + const linkAfterHeader = markdownItAnchor.permalink.linkAfterHeader({ + class: "heading-anchor", + symbol: "", + style: "aria-labelledby", + }); + const markdownItAnchorOptions = { + level: [1, 2, 3, 4, 5], + slugify: (str) => + slugify(str, { + lower: true, + strict: true, + remove: /["]/g, + }), + tabIndex: false, + permalink(slug, opts, state, idx) { + state.tokens.splice( + idx, + 0, + Object.assign(new state.Token("div_open", "div", 1), { + // Add class "header-wrapper [h1 or h2 or h3]" + attrs: [["class", `heading-wrapper ${state.tokens[idx].tag}`]], + block: true, + }) + ); + + state.tokens.splice( + idx + 4, + 0, + Object.assign(new state.Token("div_close", "div", -1), { + block: true, + }) + ); + + linkAfterHeader(slug, opts, state, idx + 1); + }, + }; + + /* Markdown Overrides */ + let markdownLibrary = markdownIt({ + html: true, + }).use(markdownItAnchor, markdownItAnchorOptions); + + /* This is the part that tells 11ty to swap to our custom config */ + eleventyConfig.setLibrary("md", markdownLibrary); + return { dir: { input: "src" diff --git a/package.json b/package.json index 315d580a..e098de34 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,8 @@ "@11ty/eleventy-plugin-webc": "^0.11.2", "eleventy-plugin-metagen": "^1.8.3", "eleventy-plugin-nesting-toc": "^1.3.0", - "install": "^0.13.0" + "install": "^0.13.0", + "markdown-it-anchor": "^8.6.7", + "slugify": "^1.6.6" } } \ No newline at end of file