Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ce97d5d

Browse files
author
Peter Bengtsson
authored
turn AUTOTITLE to actual titles (#33902)
1 parent 8cd19db commit ce97d5d

5 files changed

Lines changed: 29 additions & 107 deletions

File tree

lib/find-page.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
import { getLanguageCode } from './patterns.js'
22
import getRedirect from './get-redirect.js'
33

4-
export default function findPage(href, pageMap, redirects) {
4+
export default function findPage(href, pages, redirects) {
55
// remove any fragments
66
href = href.replace(/#.*$/, '')
77

8-
const redirectsContext = { redirects, pages: pageMap }
8+
const redirectsContext = { redirects, pages }
99

1010
// find the page
11-
const page = pageMap[href] || pageMap[getRedirect(href, redirectsContext)]
11+
const page = pages[href] || pages[getRedirect(href, redirectsContext)]
1212
if (page) return page
1313

1414
// get the current language
1515
const currentLang = getLanguageCode.test(href) ? href.match(getLanguageCode)[1] : 'en'
1616

1717
// try to fall back to English if the translated page can't be found
1818
const englishHref = href.replace(`/${currentLang}/`, '/en/')
19-
return pageMap[englishHref] || pageMap[getRedirect(englishHref, redirectsContext)]
19+
return pages[englishHref] || pages[getRedirect(englishHref, redirectsContext)]
2020
}

lib/render-content/create-processor.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,7 @@ export default function createProcessor(context) {
4444
.use(raw)
4545
.use(wrapInElement, { selector: 'ol > li img', wrapper: 'span.procedural-image-wrapper' })
4646
.use(rewriteImgSources)
47-
.use(rewriteLocalLinks, {
48-
languageCode: context.currentLanguage,
49-
version: context.currentVersion,
50-
})
47+
.use(rewriteLocalLinks, context)
5148
.use(html)
5249
}
5350

@@ -58,9 +55,6 @@ export function createMinimalProcessor(context) {
5855
.use(remark2rehype, { allowDangerousHtml: true })
5956
.use(slug)
6057
.use(raw)
61-
.use(rewriteLocalLinks, {
62-
languageCode: context.currentLanguage,
63-
version: context.currentVersion,
64-
})
58+
.use(rewriteLocalLinks, context)
6559
.use(html)
6660
}

lib/render-content/plugins/rewrite-local-links.js

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@ import nonEnterpriseDefaultVersion from '../../non-enterprise-default-version.js
88
import { allVersions } from '../../all-versions.js'
99
import removeFPTFromPath from '../../remove-fpt-from-path.js'
1010
import readJsonFile from '../../read-json-file.js'
11+
import findPage from '../../find-page.js'
1112

1213
const supportedPlans = new Set(Object.values(allVersions).map((v) => v.plan))
1314
const externalRedirects = readJsonFile('./lib/redirects/external-sites.json')
1415

16+
// Meaning it can be 'AUTOTITLE ' or ' AUTOTITLE' or 'AUTOTITLE'
17+
const AUTOTITLE = /^\s*AUTOTITLE\s*$/
18+
1519
// Matches any <a> tags with an href that starts with `/`
1620
const matcher = (node) =>
1721
node.type === 'element' &&
@@ -22,20 +26,34 @@ const matcher = (node) =>
2226

2327
// Content authors write links like `/some/article/path`, but they need to be
2428
// rewritten on the fly to match the current language and page version
25-
export default function rewriteLocalLinks({ languageCode, version }) {
29+
export default function rewriteLocalLinks(context) {
30+
const { currentLanguage, currentVersion } = context
2631
// There's no languageCode or version passed, so nothing to do
27-
if (!languageCode || !version) return
32+
if (!currentLanguage || !currentVersion) return
2833

2934
return (tree) => {
3035
visit(tree, matcher, (node) => {
31-
const newHref = getNewHref(node, languageCode, version)
36+
const newHref = getNewHref(node, currentLanguage, currentVersion)
3237
if (newHref) {
3338
node.properties.href = newHref
3439
}
40+
for (const child of node.children) {
41+
if (child.value && AUTOTITLE.test(child.value)) {
42+
child.value = getNewTitle(node.properties.href, context)
43+
}
44+
}
3545
})
3646
}
3747
}
3848

49+
function getNewTitle(href, context) {
50+
const page = findPage(href, context.pages, context.redirects)
51+
if (!page) {
52+
throw new Error(`Unable to find Page by href '${href}'`)
53+
}
54+
return page.title
55+
}
56+
3957
function getNewHref(node, languageCode, version) {
4058
const { href } = node.properties
4159
// Exceptions to link rewriting

lib/rewrite-local-links.js

Lines changed: 0 additions & 92 deletions
This file was deleted.

middleware/context.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import warmServer from '../lib/warm-server.js'
88
import searchVersions from '../lib/search/versions.js'
99
import nonEnterpriseDefaultVersion from '../lib/non-enterprise-default-version.js'
1010
import { getDataByLanguage, getUIDataMerged } from '../lib/get-data.js'
11+
1112
const activeProducts = Object.values(productMap).filter(
1213
(product) => !product.wip && !product.hidden
1314
)
@@ -90,5 +91,6 @@ export default async function contextualize(req, res, next) {
9091
return context.enPage
9192
}
9293
}
94+
9395
return next()
9496
}

0 commit comments

Comments
 (0)