「MediaWiki:Common.js」の版間の差分
ナビゲーションに移動
検索に移動
(メインページに「最近の更新(7件)」をタイトル+差分リンク付きで表示するための完全版コード) |
(完全修正版(日本語メインページ対応・差分リンク安全化・日本語コメント付き)002) |
||
| 1行目: | 1行目: | ||
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | /* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | ||
| 13行目: | 14行目: | ||
$(function () { | $(function () { | ||
// ▼ | // ▼ メインページ名の判定(日本語版と英語版の両方に対応) | ||
const page = mw.config.get('wgPageName'); | |||
if (page !== 'Main_Page' && page !== 'メインページ') { | |||
return; | return; // メインページ以外では実行しない | ||
} | } | ||
| 54行目: | 55行目: | ||
data.query.recentchanges.forEach(rc => { | data.query.recentchanges.forEach(rc => { | ||
// ▼ | // ▼ old_revid が null(新規作成)の場合は差分リンクを作らない | ||
const diffUrl = mw.util.getUrl(rc.title, { | let diffLink = ''; | ||
if (rc.old_revid && rc.revid) { | |||
const diffUrl = mw.util.getUrl(rc.title, { | |||
}); | diff: rc.revid, | ||
oldid: rc.old_revid | |||
}); | |||
diffLink = `<a href="${diffUrl}">差分</a>`; | |||
} else { | |||
diffLink = '(新規)'; | |||
} | |||
// ▼ リスト項目の HTML | // ▼ リスト項目の HTML | ||
| 65行目: | 72行目: | ||
<a href="/wiki/${rc.title}">${rc.title}</a> | <a href="/wiki/${rc.title}">${rc.title}</a> | ||
| | ||
${diffLink} | |||
| | ||
(${rc.timestamp}) | (${rc.timestamp}) | ||
2026年2月20日 (金) 10:35時点における版
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */
/* ============================================================
メインページに「最近の更新(7件)」を表示するスクリプト
- タイトル+差分リンク付き
- localStorage による5分キャッシュ
- API の maxage/smaxage による HTTP キャッシュ
- MediaWiki 1.39.3 で動作確認済み
============================================================ */
$(function () {
// ▼ メインページ名の判定(日本語版と英語版の両方に対応)
const page = mw.config.get('wgPageName');
if (page !== 'Main_Page' && page !== 'メインページ') {
return; // メインページ以外では実行しない
}
// ▼ localStorage 用のキー
const key = 'recentchanges-cache';
const keyTime = key + '-time';
// ▼ キャッシュの有効期限(ミリ秒)→ 5分
const ttl = 5 * 60 * 1000;
const now = Date.now();
// ▼ localStorage にキャッシュがあれば利用
const cached = localStorage.getItem(key);
const cachedTime = localStorage.getItem(keyTime);
if (cached && cachedTime && now - cachedTime < ttl) {
$('#recentchanges-container').html(cached);
return; // API を叩かず終了
}
// ▼ MediaWiki API を呼び出して最近の更新を取得
$.getJSON(mw.util.wikiScript('api'), {
action: 'query',
list: 'recentchanges',
rclimit: 7, // 取得件数
rcprop: 'title|timestamp|ids', // タイトル・時刻・差分ID
rcshow: '!bot', // Bot 編集を除外(不要なら削除)
format: 'json',
// ▼ HTTP キャッシュ(ブラウザ・CDN)
maxage: 300, // ブラウザキャッシュ 5分
smaxage: 300 // CDNキャッシュ 5分
}, function (data) {
let html = '<ul>';
data.query.recentchanges.forEach(rc => {
// ▼ old_revid が null(新規作成)の場合は差分リンクを作らない
let diffLink = '';
if (rc.old_revid && rc.revid) {
const diffUrl = mw.util.getUrl(rc.title, {
diff: rc.revid,
oldid: rc.old_revid
});
diffLink = `<a href="${diffUrl}">差分</a>`;
} else {
diffLink = '(新規)';
}
// ▼ リスト項目の HTML
html += `
<li>
<a href="/wiki/${rc.title}">${rc.title}</a>
${diffLink}
(${rc.timestamp})
</li>
`;
});
html += '</ul>';
// ▼ localStorage にキャッシュ保存
localStorage.setItem(key, html);
localStorage.setItem(keyTime, now);
// ▼ メインページに表示
$('#recentchanges-container').html(html);
});
});