diff options
Diffstat (limited to 'services/nuldoc/nuldoc-src/pages/PostListPage.ts')
| -rw-r--r-- | services/nuldoc/nuldoc-src/pages/PostListPage.ts | 49 |
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 }), + ), + }); +} |
