fix: handle headers for all editors (#1127)
This commit is contained in:
@@ -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}">¶</a> `)
|
||||
|
||||
headers.push(headerSlug)
|
||||
})
|
||||
|
||||
return $.html('body').replace('<body>', '').replace('</body>', '')
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user