diff options
| author | nsfisis <nsfisis@gmail.com> | 2025-11-27 04:02:06 +0900 |
|---|---|---|
| committer | nsfisis <nsfisis@gmail.com> | 2025-11-27 04:02:06 +0900 |
| commit | d1014de68415df8f0a5dc3389332e086119c6198 (patch) | |
| tree | 6564411eb6381eb48f86ed2b658c5440295596fa /services/nuldoc/nuldoc-src/components/PageLayout.ts | |
| parent | b587ae4cfdfb991dcd9d7a1109b7530f774691dd (diff) | |
| download | nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.tar.gz nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.tar.zst nsfisis.dev-d1014de68415df8f0a5dc3389332e086119c6198.zip | |
refactor(nuldoc): eliminate JSX
Diffstat (limited to 'services/nuldoc/nuldoc-src/components/PageLayout.ts')
| -rw-r--r-- | services/nuldoc/nuldoc-src/components/PageLayout.ts | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/services/nuldoc/nuldoc-src/components/PageLayout.ts b/services/nuldoc/nuldoc-src/components/PageLayout.ts new file mode 100644 index 0000000..19a8e86 --- /dev/null +++ b/services/nuldoc/nuldoc-src/components/PageLayout.ts @@ -0,0 +1,76 @@ +import { Config } from "../config.ts"; +import { elem, Element, Node } from "../dom.ts"; +import StaticStylesheet from "./StaticStylesheet.ts"; + +type Props = { + metaCopyrightYear: number; + metaDescription: string; + metaKeywords?: string[]; + metaTitle: string; + metaAtomFeedHref?: string; + requiresSyntaxHighlight?: boolean; + site: "default" | "about" | "blog" | "slides"; + config: Config; + children: Node; +}; + +export default async function PageLayout( + { + metaCopyrightYear, + metaDescription, + metaKeywords, + metaTitle, + metaAtomFeedHref, + requiresSyntaxHighlight: _, + site, + config, + children, + }: Props, +): Promise<Element> { + return elem( + "html", + { lang: "ja-JP" }, + elem( + "head", + {}, + elem("meta", { charset: "UTF-8" }), + elem("meta", { + name: "viewport", + content: "width=device-width, initial-scale=1.0", + }), + elem("meta", { name: "author", content: config.site.author }), + elem("meta", { + name: "copyright", + content: `© ${metaCopyrightYear} ${config.site.author}`, + }), + elem("meta", { name: "description", content: metaDescription }), + metaKeywords && metaKeywords.length !== 0 + ? elem("meta", { name: "keywords", content: metaKeywords.join(",") }) + : null, + elem("meta", { property: "og:type", content: "article" }), + elem("meta", { property: "og:title", content: metaTitle }), + elem("meta", { property: "og:description", content: metaDescription }), + elem("meta", { + property: "og:site_name", + content: config.sites[site].siteName, + }), + elem("meta", { property: "og:locale", content: "ja_JP" }), + elem("meta", { name: "Hatena::Bookmark", content: "nocomment" }), + metaAtomFeedHref + ? elem("link", { + rel: "alternate", + href: metaAtomFeedHref, + type: "application/atom+xml", + }) + : null, + elem("link", { + rel: "icon", + href: "/favicon.svg", + type: "image/svg+xml", + }), + elem("title", {}, metaTitle), + await StaticStylesheet({ fileName: "/style.css", config }), + ), + children, + ); +} |
