summaryrefslogtreecommitdiffhomepage
path: root/vhosts/blog/nuldoc-src/slide/slide.ts
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2023-09-20 19:56:52 +0900
committernsfisis <nsfisis@gmail.com>2023-09-20 19:56:57 +0900
commita84908b7e8a0e2423afd6b836eccf27a420270b4 (patch)
tree00204b62358f8c57fcb36f601db360626484cc1a /vhosts/blog/nuldoc-src/slide/slide.ts
parent0b488f85380f964c40b0b9aae69c6611bc7978bc (diff)
downloadnsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.tar.gz
nsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.tar.zst
nsfisis.dev-a84908b7e8a0e2423afd6b836eccf27a420270b4.zip
feat(blog/nuldoc): change content format from DocBook to NulDoc
Diffstat (limited to 'vhosts/blog/nuldoc-src/slide/slide.ts')
-rw-r--r--vhosts/blog/nuldoc-src/slide/slide.ts111
1 files changed, 51 insertions, 60 deletions
diff --git a/vhosts/blog/nuldoc-src/slide/slide.ts b/vhosts/blog/nuldoc-src/slide/slide.ts
index a982d4f2..5d5f30eb 100644
--- a/vhosts/blog/nuldoc-src/slide/slide.ts
+++ b/vhosts/blog/nuldoc-src/slide/slide.ts
@@ -1,12 +1,6 @@
import { Config } from "../config.ts";
import { SlideError } from "../errors.ts";
import { Revision, stringToDate } from "../revision.ts";
-import {
- Element,
- findChildElements,
- findFirstChildElement,
- innerText,
-} from "../dom.ts";
export type Slide = {
sourceFilePath: string;
@@ -18,105 +12,102 @@ export type Slide = {
revisions: Revision[];
};
-export function createNewSlideFromRootElement(
- root: Element,
+type Toml = {
+ slide: {
+ title: string;
+ event: string;
+ talkType: string;
+ link: string;
+ tags: string[];
+ revisions: {
+ date: string;
+ remark: string;
+ }[];
+ };
+};
+
+export function createNewSlideFromTomlRootObject(
+ root: Toml,
sourceFilePath: string,
_config: Config,
): Slide {
- const slide = findFirstChildElement(root, "slide");
- if (!slide) {
+ const slide = root.slide ?? null;
+ if (root.slide === undefined) {
throw new SlideError(
- `[slide.new] <slide> element not found`,
- );
- }
- const info = findFirstChildElement(slide, "info");
- if (!info) {
- throw new SlideError(
- `[slide.new] <info> element not found`,
+ `[slide.new] 'slide' field not found`,
);
}
- const titleElement = findFirstChildElement(info, "title");
- if (!titleElement) {
+ const title = slide.title ?? null;
+ if (!title) {
throw new SlideError(
- `[slide.new] <title> element not found`,
+ `[slide.new] 'slide.title' field not found`,
);
}
- const title = innerText(titleElement).trim();
- const eventElement = findFirstChildElement(info, "event");
- if (!eventElement) {
+ const event = slide.event ?? null;
+ if (!event) {
throw new SlideError(
- `[slide.new] <event> element not found`,
+ `[slide.new] 'slide.event' field not found`,
);
}
- const event = innerText(eventElement).trim();
- const talkTypeElement = findFirstChildElement(info, "talktype");
- if (!talkTypeElement) {
+ const talkType = slide.talkType ?? null;
+ if (!talkType) {
throw new SlideError(
- `[slide.new] <talktype> element not found`,
+ `[slide.new] 'slide.talkType' field not found`,
);
}
- const talkType = innerText(talkTypeElement).trim();
- const slideLinkElement = findFirstChildElement(info, "link");
- if (!slideLinkElement) {
+ const link = slide.link ?? null;
+ if (!link) {
throw new SlideError(
- `[slide.new] <link> element not found`,
+ `[slide.new] 'slide.link' field not found`,
);
}
- const slideLink = innerText(slideLinkElement).trim();
- const keywordsetElement = findFirstChildElement(info, "keywordset");
- let tags: string[];
- if (!keywordsetElement) {
- tags = [];
- } else {
- tags = findChildElements(keywordsetElement, "keyword").map((x) =>
- innerText(x).trim()
+ const tags = slide.tags ?? [];
+
+ const revisions = slide.revisions ?? null;
+ if (!revisions) {
+ throw new SlideError(
+ `[slide.new] 'slide.revisions' field not found`,
);
}
- const revhistoryElement = findFirstChildElement(info, "revhistory");
- if (!revhistoryElement) {
+ if (revisions.length === 0) {
throw new SlideError(
- `[slide.new] <revhistory> element not found`,
+ `[slide.new] 'slide.revisions' field not found`,
);
}
- const revisions = findChildElements(revhistoryElement, "revision").map(
- (x, i) => {
- const dateElement = findFirstChildElement(x, "date");
- if (!dateElement) {
+ const revisions_ = revisions.map(
+ (x: { date: string; remark: string }, i: number) => {
+ const date = x.date ?? null;
+ if (!date) {
throw new SlideError(
- `[slide.new] <date> element not found`,
+ `[slide.new] 'date' field not found`,
);
}
- const revremarkElement = findFirstChildElement(x, "revremark");
- if (!revremarkElement) {
+ const remark = x.remark ?? null;
+ if (!remark) {
throw new SlideError(
- `[slide.new] <revremark> element not found`,
+ `[slide.new] 'remark' field not found`,
);
}
return {
number: i + 1,
- date: stringToDate(innerText(dateElement).trim()),
- remark: innerText(revremarkElement).trim(),
+ date: stringToDate(date),
+ remark: remark,
};
},
);
- if (revisions.length === 0) {
- throw new SlideError(
- `[slide.new] <revision> element not found`,
- );
- }
return {
sourceFilePath: sourceFilePath,
title: title,
event: event,
talkType: talkType,
- slideLink: slideLink,
+ slideLink: link,
tags: tags,
- revisions: revisions,
+ revisions: revisions_,
};
}