aboutsummaryrefslogtreecommitdiffhomepage
path: root/services/nuldoc/nuldoc-src/pages/SlideListPage.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/nuldoc/nuldoc-src/pages/SlideListPage.ts')
-rw-r--r--services/nuldoc/nuldoc-src/pages/SlideListPage.ts45
1 files changed, 45 insertions, 0 deletions
diff --git a/services/nuldoc/nuldoc-src/pages/SlideListPage.ts b/services/nuldoc/nuldoc-src/pages/SlideListPage.ts
new file mode 100644
index 0000000..9a1c2b2
--- /dev/null
+++ b/services/nuldoc/nuldoc-src/pages/SlideListPage.ts
@@ -0,0 +1,45 @@
+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 } 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" },
+ elem("header", { class: "page-header" }, elem("h1", {}, pageTitle)),
+ ...Array.from(slides)
+ .sort((a, b) => {
+ const ta = dateToString(getPostPublishedDate(a));
+ const tb = dateToString(getPostPublishedDate(b));
+ if (ta > tb) return -1;
+ if (ta < tb) return 1;
+ return 0;
+ })
+ .map((slide) => SlidePageEntry({ slide, config })),
+ ),
+ GlobalFooter({ config }),
+ ),
+ });
+}