const slugify = require("@sindresorhus/slugify");
const markdownIt = require("markdown-it");
const fs = require('fs');
const matter = require('gray-matter');
const faviconPlugin = require('eleventy-favicon');
const tocPlugin = require('eleventy-plugin-toc');
const {headerToId, namedHeadingsFilter} = require("./src/helpers/utils")
module.exports = function(eleventyConfig) {
let markdownLib = markdownIt({
breaks: true,
html: true
})
.use(require("markdown-it-footnote"))
.use(require("markdown-it-attrs"))
.use(require("markdown-it-hashtag"))
.use(function(md){
md.renderer.rules.hashtag_open = function(tokens, idx) {
return ''
}
})
.use(require('markdown-it-mathjax3'), {
tex: {
inlineMath: [
["$", "$"]
]
},
options: {
skipHtmlTags: { '[-]': ['pre'] }
}
})
.use(require('markdown-it-task-checkbox'), {
disabled: true,
divWrap: false,
divClass: 'checkbox',
idPrefix: 'cbx_',
ulClass: 'task-list',
liClass: 'task-list-item'
})
.use(require('markdown-it-plantuml'), {
openMarker: '```plantuml',
closeMarker: '```'
})
.use(namedHeadingsFilter)
.use(function(md) {
//https://github.com/DCsunset/markdown-it-mermaid-plugin
const origFenceRule = md.renderer.rules.fence || function(tokens, idx, options, env, self) {
return self.renderToken(tokens, idx, options, env, self);
};
md.renderer.rules.fence = (tokens, idx, options, env, slf) => {
const token = tokens[idx];
if (token.info === 'mermaid') {
const code = token.content.trim();
return `${code}
`;
}
if (token.info === 'transclusion') {
const code = token.content.trim();
return `
((.|\n)*?)<\/blockquote>/g, function(match, content) { let titleDiv = ""; let calloutType = ""; const calloutMeta = /\[!(\w*)\](\s?.*)/g; if (!content.match(calloutMeta)) { return match; } content = content.replace(calloutMeta, function(metaInfoMatch, callout, title) { calloutType = callout; titleDiv = title.replace("
", "") ? `${title}` : `${callout.charAt(0).toUpperCase()}${callout.substring(1).toLowerCase()}`; return ""; }); return `${titleDiv} ${content}`; }); }); eleventyConfig.addPassthroughCopy("src/site/img"); eleventyConfig.addPlugin(faviconPlugin, { destination: 'dist' }); eleventyConfig.addPlugin(tocPlugin, {ul:true, tags: ['h1','h2', 'h3', 'h4', 'h5', 'h6']}); eleventyConfig.addFilter('jsonify', function (variable) { return JSON.stringify(variable); }); return { dir: { input: "src/site", output: "dist", data: `_data` }, templateFormats: ["njk", "md", "11ty.js", "css"], htmlTemplateEngine: "njk", markdownTemplateEngine: "njk", passthroughFileCopy: true, }; };