著者フィールド導入で生じた三つの変化
Leto ウェブサイト · · English · 中文

著者フィールド導入で生じた三つの変化

それまで著者名と著者の指紋は src/content.js の SITE.author と SITE.authorId にハードコードされ、三つの言語ごとに一つずつ書かれていた。同じ二つの値を三か所で手作業のまま保っていたことになる。どの記事も同じ著者を表示し、著者の行の後ろに固定の指紋が付いていた。

author を frontmatter のフィールドにした。省略すればブログ主、他人の id を書けばその人になる。名前、役割、アバターはいずれも id で AUTHORS(src/content.js)を引く。未知の id、写真の欠落、寸法違い、透明な画素を含む写真はビルドが失敗し、誰の分かを名指しする(tools/build-site.js:112 と checkAvatars)。ブログ主やブロックに黙って落ちることはない。

アバターの種は変えてはならない。 アバターの描画結果は二通りで、写真があれば写真、なければ種から 5×5 のブロックを描いて補う(tools/build-site.js:290、avatarFor)。種は id ごとに固定で、言語によって変わらない。同じ人物が三つの言語で三つの名前を持つので、名前を種にすると三つの顔になる。

十二人の著者(ブログ主を含む)は今日すべて写真を持っており、補完の経路には到達しない。種を変えて再ビルドしても成果物はバイト単位で同じになる。差分が出ないので、レビューでも気づけない。種を固定する意味が働くのは、誰かの写真を外したときだけであり、そのときも補完の図形は同じものになる。

この箇所にはもう一つ誤読がある。アイコンである。favicon.svg と apple-touch-icon.png は独立した静的ファイルで、ビルド時にそのまま複製される(tools/build-site.js:963)。どの種からも生成しない。src/content.js にはアイコンを identicon から描くと述べたコメントがあったが、コードと食い違っており、すでに修正した(ae4645d)。

欠けた言語の意味が変わった。 以前は「この記事に英語の本文がない」が「英語版サイトにこの記事がない」と同じ意味だった。今は欠けた言語を 中国語 → 英語 → 日本語 の順に項目ごとに補う。題名、要約、本文はそれぞれ独立に決まる。補うのは中身だけで、画面の文言は言語ごとに管理したままであり、本文ブロックの lang は実際に使われた版に従う。

ブロックはもう一人の印ではない。 5×5 のブロックは単独の著者のために作られたもので、全員が使うと同じ図形が並ぶ列になった。今は各人が写真を持ち、ブロックは補完に戻っている。