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

@@ -1,5 +1,6 @@
const _ = require('lodash')
const cheerio = require('cheerio')
const uslug = require('uslug')
/* 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>', '')
}
}