From cbe7e27f91b8837a37a24ea65f4606db309d65e6 Mon Sep 17 00:00:00 2001 From: Glen Huang Date: Tue, 7 Oct 2025 22:02:25 +0800 Subject: [PATCH] site: add link support to doc nav bar --- site/src/routes/docs/+layout.svelte | 2 +- site/src/routes/docs/utils.ts | 27 +++++++++++++++++++++------ 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/site/src/routes/docs/+layout.svelte b/site/src/routes/docs/+layout.svelte index 5606c0633..fe63ed404 100644 --- a/site/src/routes/docs/+layout.svelte +++ b/site/src/routes/docs/+layout.svelte @@ -17,7 +17,7 @@ {:else}
  • - {navLink.label} + {navLink.label}
  • {/if} {/snippet} diff --git a/site/src/routes/docs/utils.ts b/site/src/routes/docs/utils.ts index 1a19749dc..a95cb4a19 100644 --- a/site/src/routes/docs/utils.ts +++ b/site/src/routes/docs/utils.ts @@ -20,6 +20,11 @@ export type NavLink = label?: string; slug: string; badge?: Badge; + } + | { + label: string; + link: string; + badge?: Badge; }; export type NormalizedNavLink = @@ -31,8 +36,9 @@ export type NormalizedNavLink = } | { label: string; - slug: string; + link: string; badge?: NormalizedBadge; + external: boolean; }; export type Badge = string | NormalizedBadge; @@ -58,19 +64,28 @@ export async function normalizeNavLink( } return { label: (await article()).frontmatter.title, - slug: `/docs/${navLink}`, + link: `/docs/${navLink}`, + external: false, }; } if (!("items" in navLink)) { - const article = articles[navLink.slug]; - if (!article) { - throw new Error(`Doc not found: ${navLink}`); + if ("slug" in navLink) { + const article = articles[`/docs/${navLink.slug}`]; + if (!article) { + throw new Error(`Doc not found: ${navLink}`); + } + return { + label: navLink.label ?? (await article()).frontmatter.title, + link: `/docs/${navLink.slug}`, + badge: normalizeBadge(navLink.badge), + external: false, + }; } return { ...navLink, - label: navLink.label ?? (await article()).frontmatter.title, badge: normalizeBadge(navLink.badge), + external: /^https?:\/\//.test(navLink.link), }; }