fix(aliases): Make sure the graph shows aliased pages

Given pages A and B, where B has an alias Z, if page A had a link [[Z]]
you'd expect the graph to show an edge from A to B and B to have A as a
backlink.

That didn't happen, here's a fix
This commit is contained in:
Anton Bulakh 2024-12-25 21:15:35 +02:00
parent 8cf3e3001f
commit ab0b73693f
No known key found for this signature in database
GPG Key ID: 071FE3E324DD7333
2 changed files with 13 additions and 0 deletions

View File

@ -99,6 +99,13 @@ async function renderGraph(container: string, fullSlug: FullSlug) {
const tags: SimpleSlug[] = []
const validLinks = new Set(data.keys())
const aliases = new Map<SimpleSlug, SimpleSlug>()
for (const [slug, details] of data.entries()) {
for (const alias of details.aliases) {
aliases.set(simplifySlug(alias), slug)
}
}
const tweens = new Map<string, TweenNode>()
for (const [source, details] of data.entries()) {
const outgoing = details.links ?? []
@ -107,6 +114,10 @@ async function renderGraph(container: string, fullSlug: FullSlug) {
if (validLinks.has(dest)) {
links.push({ source: source, target: dest })
}
const aliased = aliases.get(dest)
if (aliased) {
links.push({ source: source, target: aliased })
}
}
if (showTags) {

View File

@ -14,6 +14,7 @@ export type ContentDetails = {
title: string
links: SimpleSlug[]
tags: string[]
aliases: FullSlug[]
content: string
richContent?: string
date?: Date
@ -125,6 +126,7 @@ export const ContentIndex: QuartzEmitterPlugin<Partial<Options>> = (opts) => {
title: file.data.frontmatter?.title!,
links: file.data.links ?? [],
tags: file.data.frontmatter?.tags ?? [],
aliases: file.data.aliases ?? [],
content: file.data.text ?? "",
richContent: opts?.rssFullHtml
? escapeHTML(toHtml(tree as Root, { allowDangerousHtml: true }))