From 674fe965550444db87edc7937ff6932e1a918d9d Mon Sep 17 00:00:00 2001 From: nsfisis Date: Fri, 27 Jun 2025 23:39:31 +0900 Subject: feat(meta): rename vhosts/ directory to services/ --- services/blog/nuldoc-src/generators/post_list.ts | 63 ++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 services/blog/nuldoc-src/generators/post_list.ts (limited to 'services/blog/nuldoc-src/generators/post_list.ts') diff --git a/services/blog/nuldoc-src/generators/post_list.ts b/services/blog/nuldoc-src/generators/post_list.ts new file mode 100644 index 00000000..b05f7ee6 --- /dev/null +++ b/services/blog/nuldoc-src/generators/post_list.ts @@ -0,0 +1,63 @@ +import { renderToDOM } from "../jsx/render.ts"; +import PostListPage from "../pages/PostListPage.tsx"; +import { Config } from "../config.ts"; +import { Page } from "../page.ts"; +import { PostPage } from "./post.ts"; + +export type PostListPage = Page; + +export async function generatePostListPages( + posts: PostPage[], + config: Config, +): Promise { + const postsPerPage = config.blog.postsPerPage; + const totalPages = Math.ceil(posts.length / postsPerPage); + const pages: PostListPage[] = []; + + for (let pageIndex = 0; pageIndex < totalPages; pageIndex++) { + const pagePosts = posts.slice( + pageIndex * postsPerPage, + (pageIndex + 1) * postsPerPage, + ); + + const page = await generatePostListPage( + pagePosts, + config, + pageIndex + 1, + totalPages, + ); + + pages.push(page); + } + + return pages; +} + +async function generatePostListPage( + posts: PostPage[], + config: Config, + currentPage: number, + totalPages: number, +): Promise { + const html = await renderToDOM( + PostListPage( + posts, + config, + currentPage, + totalPages, + ), + ); + + const destFilePath = currentPage === 1 + ? "/posts/index.html" + : `/posts/${currentPage}/index.html`; + + const href = currentPage === 1 ? "/posts/" : `/posts/${currentPage}/`; + + return { + root: html, + renderer: "html", + destFilePath, + href, + }; +} -- cgit v1.2.3-70-g09d2