47 lines
1.3 KiB
JavaScript
47 lines
1.3 KiB
JavaScript
const markdownIt = require('markdown-it');
|
|
const markdownItPrism = require('markdown-it-prism');
|
|
const markdownItAnchor = require('markdown-it-anchor');
|
|
const markdownItClass = require('@toycode/markdown-it-class');
|
|
const markdownItLinkAttributes = require('markdown-it-link-attributes');
|
|
const markdownItEmoji = require('markdown-it-emoji');
|
|
const markdownItFootnote = require('markdown-it-footnote');
|
|
const markdownitMark = require('markdown-it-mark');
|
|
const markdownitAbbr = require('markdown-it-abbr');
|
|
const {slugifyString} = require('../utils');
|
|
|
|
const markdownLib = markdownIt({
|
|
html: true,
|
|
breaks: true,
|
|
linkify: true,
|
|
typographer: true
|
|
})
|
|
// https://github.com/11ty/eleventy/issues/2438
|
|
.disable('code')
|
|
.use(markdownItPrism, {
|
|
defaultLanguage: 'plaintext'
|
|
})
|
|
.use(markdownItAnchor, {
|
|
slugify: slugifyString,
|
|
tabIndex: false,
|
|
permalink: markdownItAnchor.permalink.headerLink({
|
|
class: 'heading-anchor'
|
|
})
|
|
})
|
|
.use(markdownItClass, {
|
|
ol: 'list',
|
|
ul: 'list'
|
|
})
|
|
.use(markdownItLinkAttributes, {
|
|
// Only external links (explicit protocol; internal links use relative paths)
|
|
pattern: /^https?:/,
|
|
attrs: {
|
|
target: '_blank',
|
|
rel: 'noreferrer noopener'
|
|
}
|
|
})
|
|
.use(markdownItEmoji)
|
|
.use(markdownItFootnote)
|
|
.use(markdownitMark)
|
|
.use(markdownitAbbr);
|
|
|
|
module.exports = markdownLib;
|