1
0
mirror of synced 2025-12-20 18:36:31 -05:00
Files
docs/lib/render-content/plugins/use-english-headings.js
2021-01-29 17:38:50 -05:00

30 lines
989 B
JavaScript

const GithubSlugger = require('github-slugger')
const Entities = require('html-entities').XmlEntities
const toString = require('hast-util-to-string')
const visit = require('unist-util-visit')
const slugger = new GithubSlugger()
const entities = new Entities()
const matcher = node => (
node.type === 'element' &&
['h2', 'h3', 'h4'].includes(node.tagName)
)
// replace translated IDs and links in headings with English
module.exports = function useEnglishHeadings ({ englishHeadings }) {
if (!englishHeadings) return
return tree => {
visit(tree, matcher, node => {
slugger.reset()
// Get the plain text content of the heading node
const text = toString(node)
// find English heading in the collection
const englishHeading = englishHeadings[entities.encode(text)]
// get English slug
const englishSlug = slugger.slug(englishHeading)
// use English slug for heading ID and link
node.properties.id = englishSlug
})
}
}