From acee311e5cf5df6564850bb3dd4e5d0acff433e2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Thu, 2 Feb 2023 14:29:22 -0500 Subject: [PATCH] Resolve Liquid in AUTOTITLE page titles (#34382) --- .../plugins/rewrite-local-links.js | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/render-content/plugins/rewrite-local-links.js b/lib/render-content/plugins/rewrite-local-links.js index 4f5ab4363e..4e23e57467 100644 --- a/lib/render-content/plugins/rewrite-local-links.js +++ b/lib/render-content/plugins/rewrite-local-links.js @@ -31,7 +31,9 @@ export default function rewriteLocalLinks(context) { // There's no languageCode or version passed, so nothing to do if (!currentLanguage || !currentVersion) return - return (tree) => { + return async (tree) => { + const promises = [] + visit(tree, matcher, (node) => { const newHref = getNewHref(node, currentLanguage, currentVersion) if (newHref) { @@ -39,19 +41,29 @@ export default function rewriteLocalLinks(context) { } for (const child of node.children) { if (child.value && AUTOTITLE.test(child.value)) { - child.value = getNewTitle(node.properties.href, context) + promises.push(getNewTitleSetter(child, node.properties.href, context)) } } }) + + if (promises.length) { + await Promise.all(promises) + } + + return tree } } -function getNewTitle(href, context) { +async function getNewTitleSetter(child, href, context) { + child.value = await getNewTitle(href, context) +} + +async function getNewTitle(href, context) { const page = findPage(href, context.pages, context.redirects) if (!page) { throw new Error(`Unable to find Page by href '${href}'`) } - return page.title + return await page.renderProp('title', context, { textOnly: true }) } function getNewHref(node, languageCode, version) {