diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-11-27 04:02:06 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-11-27 04:02:06 +0900 |
| commit | d1014de68415df8f0a5dc3389332e086119c6198 (patch) | |
| tree | 6564411eb6381eb48f86ed2b658c5440295596fa /services/nuldoc/nuldoc-src/components/TableOfContents.ts | |
| parent | b587ae4cfdfb991dcd9d7a1109b7530f774691dd (diff) | |
| download | nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.tar.gz nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.tar.zst nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.zip | |
refactor(nuldoc): eliminate JSX
Diffstat (limited to 'services/nuldoc/nuldoc-src/components/TableOfContents.ts')
| -rw-r--r-- | services/nuldoc/nuldoc-src/components/TableOfContents.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/services/nuldoc/nuldoc-src/components/TableOfContents.ts b/services/nuldoc/nuldoc-src/components/TableOfContents.ts new file mode 100644 index 0000000..ac4205a --- /dev/null +++ b/services/nuldoc/nuldoc-src/components/TableOfContents.ts @@ -0,0 +1,34 @@ +import { TocEntry, TocRoot } from "../djot/document.ts"; +import { elem, Element } from "../dom.ts"; + +type Props = { + toc: TocRoot; +}; + +export default function TableOfContents({ toc }: Props): Element { + return elem( + "nav", + { class: "toc" }, + elem("h2", {}, "目次"), + elem( + "ul", + {}, + ...toc.entries.map((entry) => TocEntryComponent({ entry })), + ), + ); +} + +function TocEntryComponent({ entry }: { entry: TocEntry }): Element { + return elem( + "li", + {}, + elem("a", { href: `#${entry.id}` }, entry.text), + entry.children.length > 0 + ? elem( + "ul", + {}, + ...entry.children.map((child) => TocEntryComponent({ entry: child })), + ) + : null, + ); +} |
