From 57315c52be96d2a2c013f0cfb0de5429980e301a Mon Sep 17 00:00:00 2001 From: nsfisis Date: Sun, 2 Nov 2025 17:49:34 +0900 Subject: refactor(blog): rename directory, services/{blog => nuldoc}/ --- services/nuldoc/nuldoc-src/pages/AboutPage.tsx | 110 +++++++++++++++++++++ services/nuldoc/nuldoc-src/pages/AtomPage.tsx | 26 +++++ services/nuldoc/nuldoc-src/pages/HomePage.tsx | 53 ++++++++++ services/nuldoc/nuldoc-src/pages/NotFoundPage.tsx | 27 +++++ services/nuldoc/nuldoc-src/pages/PostListPage.tsx | 56 +++++++++++ services/nuldoc/nuldoc-src/pages/PostPage.tsx | 70 +++++++++++++ services/nuldoc/nuldoc-src/pages/SlideListPage.tsx | 44 +++++++++ services/nuldoc/nuldoc-src/pages/SlidePage.tsx | 72 ++++++++++++++ services/nuldoc/nuldoc-src/pages/TagListPage.tsx | 57 +++++++++++ services/nuldoc/nuldoc-src/pages/TagPage.tsx | 43 ++++++++ 10 files changed, 558 insertions(+) create mode 100644 services/nuldoc/nuldoc-src/pages/AboutPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/AtomPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/HomePage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/NotFoundPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/PostListPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/PostPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/SlideListPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/SlidePage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/TagListPage.tsx create mode 100644 services/nuldoc/nuldoc-src/pages/TagPage.tsx (limited to 'services/nuldoc/nuldoc-src/pages') diff --git a/services/nuldoc/nuldoc-src/pages/AboutPage.tsx b/services/nuldoc/nuldoc-src/pages/AboutPage.tsx new file mode 100644 index 0000000..3d6583a --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/AboutPage.tsx @@ -0,0 +1,110 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import StaticScript from "../components/StaticScript.tsx"; +import { Config } from "../config.ts"; +import { dateToString } from "../revision.ts"; +import { getPostPublishedDate } from "../generators/post.ts"; +import { SlidePage } from "../generators/slide.ts"; + +export default function AboutPage( + slides: SlidePage[], + config: Config, +) { + return ( + + + +
+
+
+

nsfisis

+
+
+ +
+ +
+
+
+
+

読み方

+

+ 読み方は決めていません。音にする必要があるときは本名である「いまむら」をお使いください。 +

+
+
+

アカウント

+ +
+
+

仕事

+ +
+
+

登壇

+ +
+
+
+
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/AtomPage.tsx b/services/nuldoc/nuldoc-src/pages/AtomPage.tsx new file mode 100644 index 0000000..21c3bfa --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/AtomPage.tsx @@ -0,0 +1,26 @@ +import { Feed } from "../generators/atom.ts"; + +export default function AtomPage({ feed }: { feed: Feed }) { + return ( + + {feed.id} + {feed.title} + + + + {feed.author} + + {feed.updated} + {feed.entries.map((entry) => ( + + {entry.id} + + {entry.title} + {entry.summary} + {entry.published} + {entry.updated} + + ))} + + ); +} diff --git a/services/nuldoc/nuldoc-src/pages/HomePage.tsx b/services/nuldoc/nuldoc-src/pages/HomePage.tsx new file mode 100644 index 0000000..8850d03 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/HomePage.tsx @@ -0,0 +1,53 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import { Config } from "../config.ts"; + +export default function HomePage(config: Config) { + return ( + + + +
+ +
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/NotFoundPage.tsx b/services/nuldoc/nuldoc-src/pages/NotFoundPage.tsx new file mode 100644 index 0000000..9631fef --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/NotFoundPage.tsx @@ -0,0 +1,27 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import { Config } from "../config.ts"; + +export default function NotFoundPage( + config: Config, +) { + return ( + + + +
+
+
404
+
+
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/PostListPage.tsx b/services/nuldoc/nuldoc-src/pages/PostListPage.tsx new file mode 100644 index 0000000..b825f69 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/PostListPage.tsx @@ -0,0 +1,56 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import Pagination from "../components/Pagination.tsx"; +import PostPageEntry from "../components/PostPageEntry.tsx"; +import { Config } from "../config.ts"; +import { PostPage } from "../generators/post.ts"; + +export default function PostListPage( + posts: PostPage[], + config: Config, + currentPage: number, + totalPages: number, +) { + const pageTitle = "投稿一覧"; + + const pageInfoSuffix = ` (${currentPage}ページ目)`; + const metaTitle = `${pageTitle}${pageInfoSuffix}|${config.blog.siteName}`; + const metaDescription = `投稿した記事の一覧${pageInfoSuffix}`; + + return ( + + + +
+
+

{pageTitle}{pageInfoSuffix}

+
+ + + + {posts.map((post) => ( + + ))} + + +
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/PostPage.tsx b/services/nuldoc/nuldoc-src/pages/PostPage.tsx new file mode 100644 index 0000000..e625518 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/PostPage.tsx @@ -0,0 +1,70 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import TableOfContents from "../components/TableOfContents.tsx"; +import { Config, getTagLabel } from "../config.ts"; +import { Element } from "../dom.ts"; +import { Document } from "../djot/document.ts"; +import { dateToString } from "../revision.ts"; +import { getPostPublishedDate } from "../generators/post.ts"; + +export default function PostPage( + doc: Document, + config: Config, +) { + return ( + getTagLabel(config, slug))} + metaTitle={`${doc.title}|${config.blog.siteName}`} + requiresSyntaxHighlight + config={config} + > + + +
+
+
+

{doc.title}

+ {doc.tags.length !== 0 && ( + + )} +
+ {doc.toc && doc.toc.entries.length > 0 && ( + + )} +
+
+

+ 更新履歴 +

+
    + {doc.revisions.map((rev) => ( +
  1. + + {`: ${rev.remark}`} +
  2. + ))} +
+
+ { + // TODO: refactor + (doc.root.children[0] as Element).children + } +
+
+
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/SlideListPage.tsx b/services/nuldoc/nuldoc-src/pages/SlideListPage.tsx new file mode 100644 index 0000000..bc4b895 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/SlideListPage.tsx @@ -0,0 +1,44 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import SlidePageEntry from "../components/SlidePageEntry.tsx"; +import { Config } from "../config.ts"; +import { dateToString } from "../revision.ts"; +import { getPostPublishedDate } from "../generators/post.ts"; +import { SlidePage } from "../generators/slide.ts"; + +export default function SlideListPage( + slides: SlidePage[], + config: Config, +) { + const pageTitle = "スライド一覧"; + + return ( + + + +
+
+

{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) => ( + + ))} +
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/SlidePage.tsx b/services/nuldoc/nuldoc-src/pages/SlidePage.tsx new file mode 100644 index 0000000..fc11072 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/SlidePage.tsx @@ -0,0 +1,72 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import StaticScript from "../components/StaticScript.tsx"; +import { Config, getTagLabel } from "../config.ts"; +import { dateToString } from "../revision.ts"; +import { Slide } from "../slide/slide.ts"; +import { getPostPublishedDate } from "../generators/post.ts"; + +export default function SlidePage( + slide: Slide, + config: Config, +) { + return ( + getTagLabel(config, slug))} + metaTitle={`${slide.event} (${slide.talkType})|${config.blog.siteName}`} + requiresSyntaxHighlight + config={config} + > + + +
+
+
+

{slide.title}

+ {slide.tags.length !== 0 && ( + + )} +
+
+
+

+ 更新履歴 +

+
    + {slide.revisions.map((rev) => ( +
  1. + + {`: ${rev.remark}`} +
  2. + ))} +
+
+ +
+ + +
+ +
+
+
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/TagListPage.tsx b/services/nuldoc/nuldoc-src/pages/TagListPage.tsx new file mode 100644 index 0000000..cdb83ea --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/TagListPage.tsx @@ -0,0 +1,57 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import { Config } from "../config.ts"; +import { TagPage } from "../generators/tag.ts"; + +export default function TagListPage( + tags: TagPage[], + config: Config, +) { + const pageTitle = "タグ一覧"; + + return ( + + + +
+
+

{pageTitle}

+
+ {Array.from(tags).sort((a, b) => { + const ta = a.tagSlug; + const tb = b.tagSlug; + if (ta < tb) return -1; + if (ta > tb) return 1; + return 0; + }).map((tag) => ( + + ))} +
+ + +
+ ); +} diff --git a/services/nuldoc/nuldoc-src/pages/TagPage.tsx b/services/nuldoc/nuldoc-src/pages/TagPage.tsx new file mode 100644 index 0000000..b2ffba5 --- /dev/null +++ b/services/nuldoc/nuldoc-src/pages/TagPage.tsx @@ -0,0 +1,43 @@ +import GlobalFooter from "../components/GlobalFooter.tsx"; +import GlobalHeader from "../components/GlobalHeader.tsx"; +import PageLayout from "../components/PageLayout.tsx"; +import PostPageEntry from "../components/PostPageEntry.tsx"; +import SlidePageEntry from "../components/SlidePageEntry.tsx"; +import { Config, getTagLabel } from "../config.ts"; +import { getPostPublishedDate } from "../generators/post.ts"; +import { TaggedPage } from "../generators/tagged_page.ts"; + +export default function TagPage( + tagSlug: string, + pages: TaggedPage[], + config: Config, +) { + const tagLabel = getTagLabel(config, tagSlug); + const pageTitle = `タグ「${tagLabel}」一覧`; + + return ( + + + +
+
+

{pageTitle}

+
+ {pages.map((page) => + "event" in page + ? + : + )} +
+ + +
+ ); +} -- cgit v1.2.3-70-g09d2