blob: 73315cc1f36411b5a4b66cdabd981d66f26a31bd (
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
|
/**
* ページのスラッグとタイトルから、X などで共有するときのキャプションを組み立てる。
*
* 一般質問ページは、どの年度・月定例会のものかがキャプションだけで分かるよう、
* スラッグ(例: ippan-situmon/r8d/9gatu)から文言を自動生成する。
* それ以外のページはフロントマターの title をそのまま使う。
*/
const REIWA_RE = /^r(\d+)d$/;
const MONTH_RE = /^(\d+)gatu$/;
function reiwaYear(n: string): string {
return `令和${n === "1" ? "元" : n}年`;
}
export function shareCaption(slug: string, title?: string): string {
const parts = slug.split("/").filter(Boolean);
// トップページは「小平市議 安竹洋平」のみにする
if (parts.length === 0) return "";
if (parts[0] === "ippan-situmon") {
if (parts.length === 1) return "安竹洋平の一般質問一覧";
const year = parts[1]?.match(REIWA_RE);
if (!year) return title ?? "";
if (parts.length === 2) return `${reiwaYear(year[1])}度の一般質問一覧`;
const month = parts[2]?.match(MONTH_RE);
if (!month) return title ?? "";
const session = `${reiwaYear(year[1])}${month[1]}月定例会`;
if (parts.length === 3) return `${session}一般質問一覧`;
return title ? `${session}一般質問${title}` : `${session}一般質問`;
}
return title ?? "";
}
|