個人的には http headerのLast-Modified: 、便利だと思うのですが、動的コンテンツが持て囃されるためか、廃れましたね。
quartoでも JavaScript で Last-Modified: をHTML bodyで表示するようにしてみました。
quarto render して、HTMLが生成された時間が Last-Modified: になります。
作った理由
日本の医学系学会で一番会員数が多いであろう 日本内科学会 は 内科専門医試験や総合内科専門医試験の情報提供に 資格認定試験 というページを設けているのですが、一見しても隅々まで読んでも、いつ情報が更新されたのか分かりません。
これでは受験生が可哀想ではないでしょうか。
他にも、内容は変わっていないのに、更新日の日付だけが変更される J-STAGE の 日本内科学会雑誌 トップページや、 http headerで現在時刻をLast-Modified: として返すコンテンツもあったりします。
以前公開していた魔狸アンテナを再開するために現在コーディングを頑張っていますが、コンテンツ提供側の方々には、そのコンテンツの更新時間を明確にすることにも配慮して欲しいと思っています。
GitHub Pages はLast-Modified: を返してくれるようですが、いつ仕様変更があるかは分かりません。
Node.js /JavaScript/TypeScriptで擬似的にLast-Modified: を表示させれば良くない?と思いついたのは昨夜の入浴時でした。
起床後にサササッと書いてみました。
後日整理して、GitHubで公開します。ご自由にお使い下さい。(ライセンス形態は未定です)
まずは Last-Modified.js
以下。quarto project dirのトップに置きます。 docs/にも配置する。
// HTMLファイルの更新時間をJSTでHTTP_headerのLast-Modifiedフォーマットで表示するJavaScriptコード
document.addEventListener('DOMContentLoaded', function() {
// 最終更新日時を取得
var lastModified = new Date(document.lastModified);
// JSTオフセットを設定(ミリ秒単位)
var jstOffset = 9 * 60 * 60 * 1000;
// ローカル時間をJSTに変換
var jstTime = new Date(lastModified.getTime() + jstOffset);
// 曜日の配列
var weekdays = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
// 月の配列
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
/d="last-modified"></div>/ フォーマットされた日時文字列を作成
var formattedDate = weekdays[jstTime.getUTCDay()] + ", " +
("0" + jstTime.getUTCDate()).slice(-2) + " " +
months[jstTime.getUTCMonth()] + " " +
jstTime.getUTCFullYear() + " " +
("0" + jstTime.getUTCHours()).slice(-2) + ":" +
("0" + jstTime.getUTCMinutes()).slice(-2) + ":" +
("0" + jstTime.getUTCSeconds()).slice(-2) + " JST";
// 表示する要素を取得
var displayElement = document.getElementById('last-modified');
// 要素が存在する場合、内容を更新
if (displayElement) {
displayElement.textContent = 'Last-Modified: ' + formattedDate;
} else {
console.log('表示要素が見つかりません。');
}
});
qmd yaml
以下を追加。
qmd
bodyに以下を記入。