Skip to content

Commit 14bb94d

Browse files
authored
Merge branch 'main' into repo-sync
2 parents 8665c59 + 2962b77 commit 14bb94d

File tree

4 files changed

+40
-19
lines changed

4 files changed

+40
-19
lines changed

lib/get-english-headings.js

+24-13
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
// capture h2, h3, and h4 headings
2-
const headingRegex = /^###?#? (.*?)$/gm
1+
const astFromMarkdown = require('mdast-util-from-markdown')
2+
const toString = require('mdast-util-to-string')
3+
const visit = require('unist-util-visit')
4+
const findPage = require('./find-page')
35

46
// for any translated page, first get corresponding English markdown
57
// then get the headings on both the translated and English pageMap
@@ -16,22 +18,31 @@ module.exports = function getEnglishHeadings (page, context) {
1618
}, {})
1719
}
1820

19-
const translatedHeadings = page.markdown.match(headingRegex)
20-
if (!translatedHeadings) return
21+
const translatedHeadings = getHeadings(page.markdown)
22+
if (!translatedHeadings.length) return
2123

22-
const englishPage = context.pages[`/en/${page.relativePath.replace(/.md$/, '')}`]
24+
const englishPage = findPage(`/en/${page.relativePath.replace(/.md$/, '')}`, context.pages, context.redirects)
2325
if (!englishPage) return
2426

2527
// FIX there may be bugs if English headings are updated before Crowdin syncs up :/
26-
const englishHeadings = englishPage.markdown.match(headingRegex)
27-
if (!englishHeadings) return
28-
29-
// select heading text only
30-
const cleanTranslatedHeadings = translatedHeadings.map(h => h.replace(headingRegex, '$1'))
31-
const cleanEnglishHeadings = englishHeadings.map(h => h.replace(headingRegex, '$1'))
28+
const englishHeadings = getHeadings(englishPage.markdown)
29+
if (!englishHeadings.length) return
3230

3331
// return a map from translation:English
34-
return Object.assign(...cleanTranslatedHeadings.map((k, i) => ({
35-
[k]: cleanEnglishHeadings[i]
32+
return Object.assign(...translatedHeadings.map((k, i) => ({
33+
[k]: englishHeadings[i]
3634
})))
3735
}
36+
37+
function getHeadings (markdown) {
38+
const ast = astFromMarkdown(markdown)
39+
const headings = []
40+
41+
visit(ast, node => {
42+
if (node.type !== 'heading') return
43+
if (![2, 3, 4].includes(node.depth)) return
44+
headings.push(toString(node))
45+
})
46+
47+
return headings
48+
}

package-lock.json

+4-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@
5757
"lodash": "^4.17.21",
5858
"lunr": "^2.3.9",
5959
"lunr-languages": "^1.4.0",
60+
"mdast-util-to-string": "^2.0.0",
61+
"mdast-util-from-markdown": "^0.8.5",
6062
"morgan": "^1.10.0",
6163
"next": "^11.0.0",
6264
"node-fetch": "^2.6.1",
@@ -148,7 +150,6 @@
148150
"jest-slow-test-reporter": "^1.0.0",
149151
"linkinator": "^2.13.6",
150152
"make-promises-safe": "^5.1.0",
151-
"mdast-util-from-markdown": "^0.8.4",
152153
"mini-css-extract-plugin": "^1.6.0",
153154
"mkdirp": "^1.0.4",
154155
"mock-express-response": "^0.3.0",

tests/rendering/server.js

+10
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,16 @@ describe('server', () => {
251251
const $ = await getDOM('/github/getting-started-with-github')
252252
expect($('h2#in-this-article').length).toBe(0)
253253
})
254+
255+
test('renders mini TOC with correct links when headings contain markup', async () => {
256+
const $ = await getDOM('/en/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates')
257+
expect($('h2#in-this-article + ul li a[href="#package-ecosystem"]').length).toBe(1)
258+
})
259+
260+
test('renders mini TOC with correct links when headings contain markup in localized content', async () => {
261+
const $ = await getDOM('/ja/code-security/supply-chain-security/keeping-your-dependencies-updated-automatically/configuration-options-for-dependency-updates')
262+
expect($('h2#in-this-article + ul li a[href="#package-ecosystem"]').length).toBe(1)
263+
})
254264
})
255265

256266
describe('image asset paths', () => {

0 commit comments

Comments
 (0)