|
@@ -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>', '')
|
|
|
}
|
|
|
}
|