aboutsummaryrefslogtreecommitdiffhomepage
path: root/nuldoc-src/templates/about.ts
blob: c41418c823bb9397be315d1d2e6c3708b27d8051 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import { Element } from "../dom.ts";
import { Document } from "../docbook/document.ts";
import { Config } from "../config.ts";
import { el, stylesheetLinkElement, text } from "./utils.ts";

function metaElement(attrs: [string, string][]): Element {
  return el("meta", attrs);
}

function linkElement(rel: string, href: string, type: string | null): Element {
  const attrs: [string, string][] = [["rel", rel], ["href", href]];
  if (type !== null) {
    attrs.push(["type", type]);
  }
  return el("link", attrs);
}

export default async function generateAbout(
  config: Config,
): Promise<Document> {
  const head = el(
    "head",
    [],
    metaElement([["charset", "UTF-8"]]),
    metaElement([["name", "viewport"], [
      "content",
      "width=device-width, initial-scale=1.0",
    ]]),
    metaElement([["name", "author"], ["content", config.blog.author]]),
    metaElement([["name", "copyright"], [
      "content",
      `&copy; ${config.blog.siteCopyrightYear} ${config.blog.author}`,
    ]]),
    metaElement([["name", "description"], [
      "content",
      "このサイトの著者について",
    ]]),
    linkElement("icon", "/favicon.svg", "image/svg+xml"),
    el("title", [], text(`About | ${config.blog.siteName}`)),
    await stylesheetLinkElement("/style.css", config),
  );
  const body = el(
    "body",
    [["class", "single"]],
    el(
      "header",
      [["class", "header"]],
      el(
        "nav",
        [["class", "nav"]],
        el(
          "ul",
          [],
          el(
            "li",
            [["class", "logo"]],
            el("a", [["href", "/"]], text(config.blog.siteName)),
          ),
          el(
            "li",
            [],
            el("a", [["href", "/about"]], text("About")),
          ),
          el(
            "li",
            [],
            el("a", [["href", "/posts"]], text("Posts")),
          ),
          el(
            "li",
            [],
            el("a", [["href", "/slides"]], text("Slides")),
          ),
        ),
      ),
    ),
    el(
      "main",
      [["class", "main"]],
      el(
        "article",
        [["class", "post-single"]],
        el(
          "header",
          [["class", "post-header"]],
          el(
            "h1",
            [["class", "post-title"]],
            text("About"),
          ),
        ),
        el(
          "div",
          [["class", "post-content"]],
          text("WIP"),
        ),
      ),
    ),
    el(
      "footer",
      [["class", "footer"]],
      text(
        `&copy; ${config.blog.siteCopyrightYear} ${config.blog.author}`,
      ),
    ),
  );
  const html = el(
    "html",
    [["lang", "ja-JP"]],
    head,
    body,
  );
  const doc = {
    root: el("__root__", [], html),
    sourceFilePath: "<about>",
    link: "/about/",
    title: "About",
    summary: "このサイトの著者について",
    tags: [],
    revisions: [],
  };
  return doc;
}