chore: transclude subsection without dynamic regex construction

This commit is contained in:
Jacky Zhao 2024-03-05 22:17:58 -08:00
parent a506cedd7a
commit 0ca8a2ac7c

View File

@ -19,6 +19,7 @@ interface RenderComponents {
footer: QuartzComponent
}
const headerRegex = new RegExp(/h[1-6]/)
export function pageResources(
baseDir: FullSlug | RelativeURL,
staticResources: StaticResources,
@ -105,20 +106,23 @@ export function renderPage(
// header transclude
blockRef = blockRef.slice(1)
let startIdx = undefined
let startDepth = undefined
let endIdx = undefined
let headerRegex = /h[1-6]/
for (const [i, el] of page.htmlAst.children.entries()) {
if (el.type === "element" && el.tagName.match(headerRegex)) {
if (endIdx) {
break
}
// skip non-headers
if (!(el.type === "element" && el.tagName.match(headerRegex))) continue
const depth = Number(el.tagName.substring(1))
if (startIdx !== undefined) {
endIdx = i
} else if (el.properties?.id === blockRef) {
// lookin for our blockref
if (startIdx === undefined || startDepth === undefined) {
// skip until we find the blockref that matches
if (el.properties?.id === blockRef) {
startIdx = i
headerRegex = new RegExp(`h[1-${el.tagName.slice(-1)}]`)
startDepth = Number(el.tagName.substring(1))
}
} else if (depth <= startDepth) {
// looking for new header that is same level or higher
endIdx = i
}
}