fix: allow arbitrary transclusion
This commit is contained in:
@@ -198,12 +198,16 @@ export const PageTypeDispatcher: QuartzEmitterPlugin<Partial<DispatcherOptions>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render Body components to populate htmlAst for transclusion
|
// Merge virtual page data into allFiles before populating htmlAst so that
|
||||||
populateVirtualPageHtmlAst(virtualEntries, ctx, allFiles, resources)
|
// Body components rendered during populateVirtualPageHtmlAst can resolve
|
||||||
|
// cross-virtual-page embeds (e.g. a .base file embedded in a .canvas file).
|
||||||
// Merge virtual page data into allFiles so renderPage can resolve transcludes
|
// The vfile.data objects are shared by reference, so htmlAst set on earlier
|
||||||
|
// entries becomes visible to later entries in the same pass.
|
||||||
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
|
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
|
||||||
|
|
||||||
|
// Render Body components to populate htmlAst for transclusion
|
||||||
|
populateVirtualPageHtmlAst(virtualEntries, ctx, allFilesWithVirtual, resources)
|
||||||
|
|
||||||
// Phase 2: Emit regular pages (with virtual page data available for transclusion)
|
// Phase 2: Emit regular pages (with virtual page data available for transclusion)
|
||||||
for (const [tree, file] of content) {
|
for (const [tree, file] of content) {
|
||||||
const slug = file.data.slug!
|
const slug = file.data.slug!
|
||||||
@@ -288,12 +292,11 @@ export const PageTypeDispatcher: QuartzEmitterPlugin<Partial<DispatcherOptions>>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render Body components to populate htmlAst for transclusion
|
|
||||||
populateVirtualPageHtmlAst(virtualEntries, ctx, allFiles, resources)
|
|
||||||
|
|
||||||
// Merge virtual page data into allFiles for transclude resolution
|
|
||||||
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
|
const allFilesWithVirtual = [...allFiles, ...virtualEntries.map((ve) => ve.vfile.data)]
|
||||||
|
|
||||||
|
// Render Body components to populate htmlAst for transclusion
|
||||||
|
populateVirtualPageHtmlAst(virtualEntries, ctx, allFilesWithVirtual, resources)
|
||||||
|
|
||||||
// Phase 2: Emit changed regular pages
|
// Phase 2: Emit changed regular pages
|
||||||
for (const [tree, file] of content) {
|
for (const [tree, file] of content) {
|
||||||
const slug = file.data.slug!
|
const slug = file.data.slug!
|
||||||
|
|||||||
Reference in New Issue
Block a user