fix: handle headers for all editors (#1127)

This commit is contained in:
NGPixel 2019-10-27 21:08:42 -04:00
parent 4b0f5fde98
commit 37ce116dd2
4 changed files with 38 additions and 16 deletions

View File

@ -91,7 +91,6 @@
"lodash": "4.17.15", "lodash": "4.17.15",
"markdown-it": "10.0.0", "markdown-it": "10.0.0",
"markdown-it-abbr": "1.0.4", "markdown-it-abbr": "1.0.4",
"markdown-it-anchor": "5.2.5",
"markdown-it-attrs": "3.0.1", "markdown-it-attrs": "3.0.1",
"markdown-it-emoji": "1.4.0", "markdown-it-emoji": "1.4.0",
"markdown-it-expand-tabs": "1.0.13", "markdown-it-expand-tabs": "1.0.13",

View File

@ -1,5 +1,6 @@
const _ = require('lodash') const _ = require('lodash')
const cheerio = require('cheerio') const cheerio = require('cheerio')
const uslug = require('uslug')
/* global WIKI */ /* global WIKI */
@ -142,6 +143,43 @@ module.exports = {
} }
} }
// --------------------------------
// Add header handles
// --------------------------------
let headers = []
$('h1,h2,h3,h4,h5,h6').each((i, elm) => {
if ($(elm).attr('id')) {
return
}
let headerSlug = uslug($(elm).text())
// -> Cannot start with a number (CSS selector limitation)
if (headerSlug.match(/^\d/)) {
headerSlug = `h-${headerSlug}`
}
// -> Make sure header is unique
if (headers.indexOf(headerSlug) >= 0) {
let isUnique = false
let hIdx = 1
while (!isUnique) {
const headerSlugTry = `${headerSlug}-${hIdx}`
if (headers.indexOf(headerSlugTry) < 0) {
isUnique = true
headerSlug = headerSlugTry
}
hIdx++
}
}
// -> Add anchor
$(elm).attr('id', headerSlug).addClass('toc-header')
$(elm).prepend(`<a class="toc-anchor" href="#${headerSlug}">&#xB6;</a> `)
headers.push(headerSlug)
})
return $.html('body').replace('<body>', '').replace('</body>', '') return $.html('body').replace('<body>', '').replace('</body>', '')
} }
} }

View File

@ -1,8 +1,6 @@
const md = require('markdown-it') const md = require('markdown-it')
const mdAnchor = require('markdown-it-anchor')
const mdAttrs = require('markdown-it-attrs') const mdAttrs = require('markdown-it-attrs')
const _ = require('lodash') const _ = require('lodash')
const uslug = require('uslug')
const quoteStyles = { const quoteStyles = {
Chinese: '””‘’', Chinese: '””‘’',
@ -32,14 +30,6 @@ module.exports = {
} }
}) })
mkdown.use(mdAnchor, {
slugify: s => uslug(s),
permalink: true,
permalinkClass: 'toc-anchor',
permalinkSymbol: '¶',
permalinkBefore: true
})
mkdown.use(mdAttrs) mkdown.use(mdAttrs)
for (let child of this.children) { for (let child of this.children) {

View File

@ -8223,11 +8223,6 @@ markdown-it-abbr@1.0.4:
resolved "https://registry.yarnpkg.com/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz#d66b5364521cbb3dd8aa59dadfba2fb6865c8fd8" resolved "https://registry.yarnpkg.com/markdown-it-abbr/-/markdown-it-abbr-1.0.4.tgz#d66b5364521cbb3dd8aa59dadfba2fb6865c8fd8"
integrity sha1-1mtTZFIcuz3Yqlna37ovtoZcj9g= integrity sha1-1mtTZFIcuz3Yqlna37ovtoZcj9g=
markdown-it-anchor@5.2.5:
version "5.2.5"
resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-5.2.5.tgz#dbf13cfcdbffd16a510984f1263e1d479a47d27a"
integrity sha512-xLIjLQmtym3QpoY9llBgApknl7pxAcN3WDRc2d3rwpl+/YvDZHPmKscGs+L6E05xf2KrCXPBvosWt7MZukwSpQ==
markdown-it-attrs@3.0.1: markdown-it-attrs@3.0.1:
version "3.0.1" version "3.0.1"
resolved "https://registry.yarnpkg.com/markdown-it-attrs/-/markdown-it-attrs-3.0.1.tgz#5ce7b4405f2286190fbcf4c482aa9e3e2d55ece5" resolved "https://registry.yarnpkg.com/markdown-it-attrs/-/markdown-it-attrs-3.0.1.tgz#5ce7b4405f2286190fbcf4c482aa9e3e2d55ece5"