aboutsummaryrefslogtreecommitdiffhomepage
path: root/services/nuldoc/nuldoc-src/pages/PostListPage.ts
diff options
context:
space:
mode:
Diffstat (limited to 'services/nuldoc/nuldoc-src/pages/PostListPage.ts')
-rw-r--r--services/nuldoc/nuldoc-src/pages/PostListPage.ts49
1 files changed, 49 insertions, 0 deletions
diff --git a/services/nuldoc/nuldoc-src/pages/PostListPage.ts b/services/nuldoc/nuldoc-src/pages/PostListPage.ts
new file mode 100644
index 0000000..53b8fa4
--- /dev/null
+++ b/services/nuldoc/nuldoc-src/pages/PostListPage.ts
@@ -0,0 +1,49 @@
+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 } 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" },
+ elem(
+ "header",
+ { class: "page-header" },
+ elem("h1", {}, pageTitle + pageInfoSuffix),
+ ),
+ Pagination({ currentPage, totalPages, basePath: "/posts/" }),
+ ...posts.map((post) => PostPageEntry({ post, config })),
+ Pagination({ currentPage, totalPages, basePath: "/posts/" }),
+ ),
+ GlobalFooter({ config }),
+ ),
+ });
+}