* Revise the 'pages' module to export two methods: 'loadPages' and 'loadPageMap' Update all existing references to use 'loadPages' for now * Remove explicit Promise resolutions on loadPage* methods * Condense reduction method into its now-singular usage spot * Opt for for-of instead of forEach * Make require of pages in warm-server more explicit * Be more explicit about find-page using a pageMap * Be more explicit about find-page-in-version using a pageMap * Be more explicit about site-tree using a pageMap * Extract the map creation from loadPageMap * Be more explicit about using a pageMap * Update redirects precompile to take two arguments: pageList, pageMap * Rename internal loadPages method to loadPageList * Clarify pageMap is what is stored in context.pages * Use loadPageMap in tests and stuff
27 lines
1.1 KiB
JavaScript
27 lines
1.1 KiB
JavaScript
// capture h2, h3, and h4 headings
|
|
const headingRegex = /^###?#? (.*?)$/gm
|
|
|
|
// for any translated page, first get corresponding English markdown
|
|
// then get the headings on both the translated and English pageMap
|
|
// finally, create a map of translation:English for all headings on the page
|
|
module.exports = function getEnglishHeadings (page, pageMap) {
|
|
const translatedHeadings = page.markdown.match(headingRegex)
|
|
if (!translatedHeadings) return
|
|
|
|
const englishPage = pageMap[`/en/${page.relativePath.replace(/.md$/, '')}`]
|
|
if (!englishPage) return
|
|
|
|
// FIX there may be bugs if English headings are updated before Crowdin syncs up :/
|
|
const englishHeadings = englishPage.markdown.match(headingRegex)
|
|
if (!englishHeadings) return
|
|
|
|
// select heading text only
|
|
const cleanTranslatedHeadings = translatedHeadings.map(h => h.replace(headingRegex, '$1'))
|
|
const cleanEnglishHeadings = englishHeadings.map(h => h.replace(headingRegex, '$1'))
|
|
|
|
// return a map from translation:English
|
|
return Object.assign(...cleanTranslatedHeadings.map((k, i) => ({
|
|
[k]: cleanEnglishHeadings[i]
|
|
})))
|
|
}
|