summaryrefslogtreecommitdiffhomepage
path: root/services/blog/nuldoc-src/djot/document.ts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-07-04 19:14:54 +0900
committernsfisis <nsfisis@gmail.com>2025-07-04 19:14:54 +0900
commit80f0ab31aceec35c9fd04a6387b14349b806f713 (patch)
tree6d9c3e47fe988f211e8598cbedd2031c09ca54cb /services/blog/nuldoc-src/djot/document.ts
parent98db243a59fb6a409b3677f2195e96da6fd39564 (diff)
downloadnsfisis.dev-80f0ab31aceec35c9fd04a6387b14349b806f713.tar.gz
nsfisis.dev-80f0ab31aceec35c9fd04a6387b14349b806f713.tar.zst
nsfisis.dev-80f0ab31aceec35c9fd04a6387b14349b806f713.zip
feat(blog/nuldoc): implement TOC
Diffstat (limited to 'services/blog/nuldoc-src/djot/document.ts')
-rw-r--r--services/blog/nuldoc-src/djot/document.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/services/blog/nuldoc-src/djot/document.ts b/services/blog/nuldoc-src/djot/document.ts
index be9c08d5..3e8cd92c 100644
--- a/services/blog/nuldoc-src/djot/document.ts
+++ b/services/blog/nuldoc-src/djot/document.ts
@@ -12,6 +12,7 @@ export const PostMetadataSchema = z.object({
title: z.string(),
description: z.string(),
tags: z.array(z.string()),
+ toc: z.boolean().optional(),
revisions: z.array(z.object({
date: z.string(),
remark: z.string(),
@@ -22,6 +23,17 @@ export const PostMetadataSchema = z.object({
export type PostMetadata = z.infer<typeof PostMetadataSchema>;
+export type TocEntry = {
+ id: string;
+ text: string;
+ level: number;
+ children: TocEntry[];
+};
+
+export type TocRoot = {
+ entries: TocEntry[];
+};
+
export type Document = {
root: Element;
sourceFilePath: string;
@@ -31,6 +43,8 @@ export type Document = {
description: string; // TODO: should it be markup text?
tags: string[];
revisions: Revision[];
+ toc?: TocRoot;
+ isTocEnabled: boolean;
};
export function createNewDocumentFromDjotDocument(
@@ -56,5 +70,6 @@ export function createNewDocumentFromDjotDocument(
remark: r.remark,
isInternal: !!r.isInternal,
})),
+ isTocEnabled: meta.article.toc !== false,
};
}