aboutsummaryrefslogtreecommitdiffhomepage
path: root/services/nuldoc/nuldoc-src/pages
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-02-01 00:49:15 +0900
committernsfisis <nsfisis@gmail.com>2026-02-01 00:49:19 +0900
commit6dedddc545e2f1930bdc2256784eb1551bd4231d (patch)
tree75fcb5a6043dc0f2c31b098bf3cfd17a2b938599 /services/nuldoc/nuldoc-src/pages
parentd08e3edb65b215152aa26e3518fb2f2cd7071c4b (diff)
downloadnsfisis.dev-6dedddc545e2f1930bdc2256784eb1551bd4231d.tar.gz
nsfisis.dev-6dedddc545e2f1930bdc2256784eb1551bd4231d.tar.zst
nsfisis.dev-6dedddc545e2f1930bdc2256784eb1551bd4231d.zip
feat(nuldoc): rewrite nuldoc in Ruby
Diffstat (limited to 'services/nuldoc/nuldoc-src/pages')
-rw-r--r--services/nuldoc/nuldoc-src/pages/AboutPage.ts154
-rw-r--r--services/nuldoc/nuldoc-src/pages/AtomPage.ts27
-rw-r--r--services/nuldoc/nuldoc-src/pages/HomePage.ts66
-rw-r--r--services/nuldoc/nuldoc-src/pages/NotFoundPage.ts40
-rw-r--r--services/nuldoc/nuldoc-src/pages/PostListPage.ts48
-rw-r--r--services/nuldoc/nuldoc-src/pages/PostPage.ts94
-rw-r--r--services/nuldoc/nuldoc-src/pages/SlideListPage.ts45
-rw-r--r--services/nuldoc/nuldoc-src/pages/SlidePage.ts140
-rw-r--r--services/nuldoc/nuldoc-src/pages/TagListPage.ts67
-rw-r--r--services/nuldoc/nuldoc-src/pages/TagPage.ts50
10 files changed, 0 insertions, 731 deletions
diff --git a/services/nuldoc/nuldoc-src/pages/AboutPage.ts b/services/nuldoc/nuldoc-src/pages/AboutPage.ts
deleted file mode 100644
index 5ae2ff52..00000000
--- a/services/nuldoc/nuldoc-src/pages/AboutPage.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/AboutGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import StaticScript from "../components/StaticScript.ts";
-import { Config } from "../config.ts";
-import { dateToString } from "../revision.ts";
-import { getPostPublishedDate } from "../generators/post.ts";
-import { SlidePage } from "../generators/slide.ts";
-import {
- a,
- article,
- div,
- elem,
- Element,
- h1,
- h2,
- header,
- img,
- li,
- p,
- section,
- ul,
-} from "../dom.ts";
-
-export default async function AboutPage(
- slides: SlidePage[],
- config: Config,
-): Promise<Element> {
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription: "このサイトの著者について",
- metaTitle: `About|${config.sites.about.siteName}`,
- site: "about",
- config,
- children: elem(
- "body",
- { class: "single" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- article(
- { class: "post-single" },
- header(
- { class: "post-header" },
- h1({ class: "post-title" }, "nsfisis"),
- div(
- { class: "my-icon" },
- div(
- { id: "myIcon" },
- img({ src: "/favicon.svg" }),
- ),
- await StaticScript({
- site: "about",
- fileName: "/my-icon.js",
- defer: "true",
- config,
- }),
- ),
- ),
- div(
- { class: "post-content" },
- section(
- {},
- h2({}, "読み方"),
- p(
- {},
- "読み方は決めていません。音にする必要があるときは本名である「いまむら」をお使いください。",
- ),
- ),
- section(
- {},
- h2({}, "アカウント"),
- ul(
- {},
- li(
- {},
- a(
- {
- href: "https://twitter.com/nsfisis",
- target: "_blank",
- rel: "noreferrer",
- },
- "Twitter (現 𝕏): @nsfisis",
- ),
- ),
- li(
- {},
- a(
- {
- href: "https://github.com/nsfisis",
- target: "_blank",
- rel: "noreferrer",
- },
- "GitHub: @nsfisis",
- ),
- ),
- ),
- ),
- section(
- {},
- h2({}, "仕事"),
- ul(
- {},
- li(
- {},
- "2021-01~現在: ",
- a(
- {
- href: "https://www.dgcircus.com/",
- target: "_blank",
- rel: "noreferrer",
- },
- "デジタルサーカス株式会社",
- ),
- ),
- ),
- ),
- section(
- {},
- h2({}, "登壇"),
- ul(
- {},
- ...Array.from(slides)
- .sort((s1, s2) => {
- const ta = dateToString(getPostPublishedDate(s1));
- const tb = dateToString(getPostPublishedDate(s2));
- if (ta > tb) return -1;
- if (ta < tb) return 1;
- return 0;
- })
- .map((slide) =>
- li(
- {},
- a(
- {
- href:
- `https://${config.sites.slides.fqdn}${slide.href}`,
- },
- `${
- dateToString(getPostPublishedDate(slide))
- }: ${slide.event} (${slide.talkType})`,
- ),
- )
- ),
- ),
- ),
- ),
- ),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/AtomPage.ts b/services/nuldoc/nuldoc-src/pages/AtomPage.ts
deleted file mode 100644
index b39902ee..00000000
--- a/services/nuldoc/nuldoc-src/pages/AtomPage.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Feed } from "../generators/atom.ts";
-import { elem, Element, link } from "../dom.ts";
-
-export default function AtomPage({ feed }: { feed: Feed }): Element {
- return elem(
- "feed",
- { xmlns: "http://www.w3.org/2005/Atom" },
- elem("id", {}, feed.id),
- elem("title", {}, feed.title),
- link({ rel: "alternate", href: feed.linkToAlternate }),
- link({ rel: "self", href: feed.linkToSelf }),
- elem("author", {}, elem("name", {}, feed.author)),
- elem("updated", {}, feed.updated),
- ...feed.entries.map((entry) =>
- elem(
- "entry",
- {},
- elem("id", {}, entry.id),
- link({ rel: "alternate", href: entry.linkToAlternate }),
- elem("title", {}, entry.title),
- elem("summary", {}, entry.summary),
- elem("published", {}, entry.published),
- elem("updated", {}, entry.updated),
- )
- ),
- );
-}
diff --git a/services/nuldoc/nuldoc-src/pages/HomePage.ts b/services/nuldoc/nuldoc-src/pages/HomePage.ts
deleted file mode 100644
index 6e984586..00000000
--- a/services/nuldoc/nuldoc-src/pages/HomePage.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/DefaultGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import { Config } from "../config.ts";
-import { a, article, elem, Element, h2, header } from "../dom.ts";
-
-export default async function HomePage(config: Config): Promise<Element> {
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription: "nsfisis のサイト",
- metaTitle: config.sites.default.siteName,
- metaAtomFeedHref: `https://${config.sites.default.fqdn}/atom.xml`,
- site: "default",
- config,
- children: elem(
- "body",
- { class: "single" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- article(
- { class: "post-single" },
- article(
- { class: "post-entry" },
- a(
- { href: `https://${config.sites.about.fqdn}/` },
- header(
- { class: "entry-header" },
- h2({}, "About"),
- ),
- ),
- ),
- article(
- { class: "post-entry" },
- a(
- { href: `https://${config.sites.blog.fqdn}/posts/` },
- header({ class: "entry-header" }, h2({}, "Blog")),
- ),
- ),
- article(
- { class: "post-entry" },
- a(
- { href: `https://${config.sites.slides.fqdn}/slides/` },
- header(
- { class: "entry-header" },
- h2({}, "Slides"),
- ),
- ),
- ),
- article(
- { class: "post-entry" },
- a(
- { href: `https://repos.${config.sites.default.fqdn}/` },
- header(
- { class: "entry-header" },
- h2({}, "Repositories"),
- ),
- ),
- ),
- ),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/NotFoundPage.ts b/services/nuldoc/nuldoc-src/pages/NotFoundPage.ts
deleted file mode 100644
index 62080665..00000000
--- a/services/nuldoc/nuldoc-src/pages/NotFoundPage.ts
+++ /dev/null
@@ -1,40 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import AboutGlobalHeader from "../components/AboutGlobalHeader.ts";
-import BlogGlobalHeader from "../components/BlogGlobalHeader.ts";
-import SlidesGlobalHeader from "../components/SlidesGlobalHeader.ts";
-import DefaultGlobalHeader from "../components/DefaultGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import { Config } from "../config.ts";
-import { article, div, elem, Element } from "../dom.ts";
-
-export default async function NotFoundPage(
- site: "default" | "about" | "blog" | "slides",
- config: Config,
-): Promise<Element> {
- const GlobalHeader = site === "about"
- ? AboutGlobalHeader
- : site === "blog"
- ? BlogGlobalHeader
- : site === "slides"
- ? SlidesGlobalHeader
- : DefaultGlobalHeader;
-
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription: "リクエストされたページが見つかりません",
- metaTitle: `Page Not Found|${config.sites[site].siteName}`,
- site,
- config,
- children: elem(
- "body",
- { class: "single" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- article({}, div({ class: "not-found" }, "404")),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/PostListPage.ts b/services/nuldoc/nuldoc-src/pages/PostListPage.ts
deleted file mode 100644
index ef7bfc57..00000000
--- a/services/nuldoc/nuldoc-src/pages/PostListPage.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/BlogGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import Pagination from "../components/Pagination.ts";
-import PostPageEntry from "../components/PostPageEntry.ts";
-import { Config } from "../config.ts";
-import { PostPage } from "../generators/post.ts";
-import { elem, Element, h1, header } from "../dom.ts";
-
-export default async function PostListPage(
- posts: PostPage[],
- config: Config,
- currentPage: number,
- totalPages: number,
-): Promise<Element> {
- const pageTitle = "投稿一覧";
-
- const pageInfoSuffix = ` (${currentPage}ページ目)`;
- const metaTitle =
- `${pageTitle}${pageInfoSuffix}|${config.sites.blog.siteName}`;
- const metaDescription = `投稿した記事の一覧${pageInfoSuffix}`;
-
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription,
- metaTitle,
- metaAtomFeedHref: `https://${config.sites.blog.fqdn}/posts/atom.xml`,
- site: "blog",
- config,
- children: elem(
- "body",
- { class: "list" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- header(
- { class: "page-header" },
- h1({}, pageTitle + pageInfoSuffix),
- ),
- Pagination({ currentPage, totalPages, basePath: "/posts/" }),
- ...posts.map((post) => PostPageEntry({ post, config })),
- Pagination({ currentPage, totalPages, basePath: "/posts/" }),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/PostPage.ts b/services/nuldoc/nuldoc-src/pages/PostPage.ts
deleted file mode 100644
index 20eec996..00000000
--- a/services/nuldoc/nuldoc-src/pages/PostPage.ts
+++ /dev/null
@@ -1,94 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/BlogGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import TableOfContents from "../components/TableOfContents.ts";
-import { Config, getTagLabel } from "../config.ts";
-import {
- a,
- article,
- div,
- elem,
- Element,
- h1,
- h2,
- header,
- li,
- ol,
- section,
- ul,
-} from "../dom.ts";
-import { Document } from "../markdown/document.ts";
-import { dateToString } from "../revision.ts";
-import { getPostPublishedDate } from "../generators/post.ts";
-
-export default async function PostPage(
- doc: Document,
- config: Config,
-): Promise<Element> {
- return await PageLayout({
- metaCopyrightYear: getPostPublishedDate(doc).year,
- metaDescription: doc.description,
- metaKeywords: doc.tags.map((slug) => getTagLabel(config, slug)),
- metaTitle: `${doc.title}|${config.sites.blog.siteName}`,
- requiresSyntaxHighlight: true,
- site: "blog",
- config,
- children: elem(
- "body",
- { class: "single" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- article(
- { class: "post-single" },
- header(
- { class: "post-header" },
- h1({ class: "post-title" }, doc.title),
- doc.tags.length !== 0
- ? ul(
- { class: "post-tags" },
- ...doc.tags.map((slug) =>
- li(
- { class: "tag" },
- a(
- { class: "tag-inner", href: `/tags/${slug}/` },
- getTagLabel(config, slug),
- ),
- )
- ),
- )
- : null,
- ),
- doc.toc && doc.toc.entries.length > 0
- ? TableOfContents({ toc: doc.toc })
- : null,
- div(
- { class: "post-content" },
- section(
- { id: "changelog" },
- h2({}, a({ href: "#changelog" }, "更新履歴")),
- ol(
- {},
- ...doc.revisions.map((rev) =>
- li(
- { class: "revision" },
- elem(
- "time",
- { datetime: dateToString(rev.date) },
- dateToString(rev.date),
- ),
- `: ${rev.remark}`,
- )
- ),
- ),
- ),
- // TODO: refactor
- ...(doc.root.children[0] as Element).children,
- ),
- ),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/SlideListPage.ts b/services/nuldoc/nuldoc-src/pages/SlideListPage.ts
deleted file mode 100644
index f1b1a2a1..00000000
--- a/services/nuldoc/nuldoc-src/pages/SlideListPage.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/SlidesGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import SlidePageEntry from "../components/SlidePageEntry.ts";
-import { Config } from "../config.ts";
-import { dateToString } from "../revision.ts";
-import { getPostPublishedDate } from "../generators/post.ts";
-import { SlidePage } from "../generators/slide.ts";
-import { elem, Element, h1, header } from "../dom.ts";
-
-export default async function SlideListPage(
- slides: SlidePage[],
- config: Config,
-): Promise<Element> {
- const pageTitle = "スライド一覧";
-
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription: "登壇したイベントで使用したスライドの一覧",
- metaTitle: `${pageTitle}|${config.sites.slides.siteName}`,
- metaAtomFeedHref: `https://${config.sites.slides.fqdn}/slides/atom.xml`,
- site: "slides",
- config,
- children: elem(
- "body",
- { class: "list" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- header({ class: "page-header" }, h1({}, pageTitle)),
- ...Array.from(slides)
- .sort((s1, s2) => {
- const ta = dateToString(getPostPublishedDate(s1));
- const tb = dateToString(getPostPublishedDate(s2));
- if (ta > tb) return -1;
- if (ta < tb) return 1;
- return 0;
- })
- .map((slide) => SlidePageEntry({ slide, config })),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/SlidePage.ts b/services/nuldoc/nuldoc-src/pages/SlidePage.ts
deleted file mode 100644
index 149ecf8e..00000000
--- a/services/nuldoc/nuldoc-src/pages/SlidePage.ts
+++ /dev/null
@@ -1,140 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import GlobalHeader from "../components/SlidesGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import StaticStylesheet from "../components/StaticStylesheet.ts";
-import StaticScript from "../components/StaticScript.ts";
-import { Config, getTagLabel } from "../config.ts";
-import { dateToString } from "../revision.ts";
-import { Slide } from "../slide/slide.ts";
-import { getPostPublishedDate } from "../generators/post.ts";
-import {
- a,
- article,
- button,
- div,
- elem,
- Element,
- h1,
- h2,
- header,
- li,
- ol,
- section,
- ul,
-} from "../dom.ts";
-
-export default async function SlidePage(
- slide: Slide,
- config: Config,
-): Promise<Element> {
- return await PageLayout({
- metaCopyrightYear: getPostPublishedDate(slide).year,
- metaDescription: `「${slide.title}」(${slide.event} で登壇)`,
- metaKeywords: slide.tags.map((slug) => getTagLabel(config, slug)),
- metaTitle:
- `${slide.title} (${slide.event})|${config.sites.slides.siteName}`,
- requiresSyntaxHighlight: true,
- site: "slides",
- config,
- children: elem(
- "body",
- { class: "single" },
- await StaticStylesheet({
- site: "slides",
- fileName: "/slides.css",
- config,
- }),
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- article(
- { class: "post-single" },
- header(
- { class: "post-header" },
- h1({ class: "post-title" }, slide.title),
- slide.tags.length !== 0
- ? ul(
- { class: "post-tags" },
- ...slide.tags.map((slug) =>
- li(
- { class: "tag" },
- a(
- { class: "tag-inner", href: `/tags/${slug}/` },
- getTagLabel(config, slug),
- ),
- )
- ),
- )
- : null,
- ),
- div(
- { class: "post-content" },
- section(
- { id: "changelog" },
- h2({}, a({ href: "#changelog" }, "更新履歴")),
- ol(
- {},
- ...slide.revisions.map((rev) =>
- li(
- { class: "revision" },
- elem(
- "time",
- { datetime: dateToString(rev.date) },
- dateToString(rev.date),
- ),
- `: ${rev.remark}`,
- )
- ),
- ),
- ),
- elem("canvas", { id: "slide", "data-slide-link": slide.slideLink }),
- div(
- { class: "controllers" },
- div(
- { class: "controllers-buttons" },
- button(
- { id: "prev", type: "button" },
- elem(
- "svg",
- {
- width: "20",
- height: "20",
- viewBox: "0 0 24 24",
- fill: "none",
- stroke: "currentColor",
- "stroke-width": "2",
- },
- elem("path", { d: "M15 18l-6-6 6-6" }),
- ),
- ),
- button(
- { id: "next", type: "button" },
- elem(
- "svg",
- {
- width: "20",
- height: "20",
- viewBox: "0 0 24 24",
- fill: "none",
- stroke: "currentColor",
- "stroke-width": "2",
- },
- elem("path", { d: "M9 18l6-6-6-6" }),
- ),
- ),
- ),
- ),
- await StaticScript({
- site: "slides",
- fileName: "/slide.js",
- type: "module",
- config,
- }),
- ),
- ),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/TagListPage.ts b/services/nuldoc/nuldoc-src/pages/TagListPage.ts
deleted file mode 100644
index cf1ec517..00000000
--- a/services/nuldoc/nuldoc-src/pages/TagListPage.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import BlogGlobalHeader from "../components/BlogGlobalHeader.ts";
-import SlidesGlobalHeader from "../components/SlidesGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import { Config } from "../config.ts";
-import { TagPage } from "../generators/tag.ts";
-import { a, article, elem, Element, footer, h1, h2, header } from "../dom.ts";
-
-export default async function TagListPage(
- tags: TagPage[],
- site: "blog" | "slides",
- config: Config,
-): Promise<Element> {
- const pageTitle = "タグ一覧";
-
- const GlobalHeader = site === "blog" ? BlogGlobalHeader : SlidesGlobalHeader;
-
- return await PageLayout({
- metaCopyrightYear: config.site.copyrightYear,
- metaDescription: "タグの一覧",
- metaTitle: `${pageTitle}|${config.sites[site].siteName}`,
- site,
- config,
- children: elem(
- "body",
- { class: "list" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- header({ class: "page-header" }, h1({}, pageTitle)),
- ...Array.from(tags)
- .sort((t1, t2) => {
- const ta = t1.tagSlug;
- const tb = t2.tagSlug;
- if (ta < tb) return -1;
- if (ta > tb) return 1;
- return 0;
- })
- .map((tag) => {
- const posts = tag.numOfPosts === 0
- ? ""
- : `${tag.numOfPosts}件の記事`;
- const slides = tag.numOfSlides === 0
- ? ""
- : `${tag.numOfSlides}件のスライド`;
- const footerText = `${posts}${
- posts && slides ? "、" : ""
- }${slides}`;
-
- return article(
- { class: "post-entry" },
- a(
- { href: tag.href },
- header(
- { class: "entry-header" },
- h2({}, tag.tagLabel),
- ),
- footer({ class: "entry-footer" }, footerText),
- ),
- );
- }),
- ),
- GlobalFooter({ config }),
- ),
- });
-}
diff --git a/services/nuldoc/nuldoc-src/pages/TagPage.ts b/services/nuldoc/nuldoc-src/pages/TagPage.ts
deleted file mode 100644
index 1826219c..00000000
--- a/services/nuldoc/nuldoc-src/pages/TagPage.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import GlobalFooter from "../components/GlobalFooter.ts";
-import BlogGlobalHeader from "../components/BlogGlobalHeader.ts";
-import SlidesGlobalHeader from "../components/SlidesGlobalHeader.ts";
-import PageLayout from "../components/PageLayout.ts";
-import PostPageEntry from "../components/PostPageEntry.ts";
-import SlidePageEntry from "../components/SlidePageEntry.ts";
-import { Config, getTagLabel } from "../config.ts";
-import { getPostPublishedDate } from "../generators/post.ts";
-import { TaggedPage } from "../generators/tagged_page.ts";
-import { elem, Element, h1, header } from "../dom.ts";
-
-export default async function TagPage(
- tagSlug: string,
- pages: TaggedPage[],
- site: "blog" | "slides",
- config: Config,
-): Promise<Element> {
- const tagLabel = getTagLabel(config, tagSlug);
- const pageTitle = `タグ「${tagLabel}」一覧`;
-
- const GlobalHeader = site === "blog" ? BlogGlobalHeader : SlidesGlobalHeader;
-
- return await PageLayout({
- metaCopyrightYear: getPostPublishedDate(pages[pages.length - 1]).year,
- metaDescription: `タグ「${tagLabel}」のついた記事またはスライドの一覧`,
- metaKeywords: [tagLabel],
- metaTitle: `${pageTitle}|${config.sites[site].siteName}`,
- metaAtomFeedHref: `https://${
- config.sites[site].fqdn
- }/tags/${tagSlug}/atom.xml`,
- site,
- config,
- children: elem(
- "body",
- { class: "list" },
- GlobalHeader({ config }),
- elem(
- "main",
- { class: "main" },
- header({ class: "page-header" }, h1({}, pageTitle)),
- ...pages.map((page) =>
- "event" in page
- ? SlidePageEntry({ slide: page, config })
- : PostPageEntry({ post: page, config })
- ),
- ),
- GlobalFooter({ config }),
- ),
- });
-}