37
回編集
(メインページに「最近の更新(7件)」をタイトル+差分リンク付きで表示するための完全版コード003) |
編集の要約なし |
||
| 1行目: | 1行目: | ||
/* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | /* ここにあるすべてのJavaScriptは、すべてのページ読み込みですべての利用者に対して読み込まれます */ | ||
/* ============================================================ | /* ============================================================ | ||
メインページに「最近の更新(7件)」を表示するスクリプト | メインページに「最近の更新(7件)」を表示するスクリプト | ||
| 5行目: | 8行目: | ||
- localStorage による5分キャッシュ | - localStorage による5分キャッシュ | ||
- API の maxage/smaxage による HTTP キャッシュ | - API の maxage/smaxage による HTTP キャッシュ | ||
- MediaWiki 1.39.3 | - MediaWiki 1.39.3 で動作確認済み(ES5対応版) | ||
============================================================ */ | ============================================================ */ | ||
| 11行目: | 14行目: | ||
// ▼ メインページ名の判定(あなたの wiki は「メインページ」) | // ▼ メインページ名の判定(あなたの wiki は「メインページ」) | ||
var page = mw.config.get('wgPageName'); | |||
if (page !== 'メインページ' && page !== 'Main_Page') { | if (page !== 'メインページ' && page !== 'Main_Page') { | ||
return; // メインページ以外では実行しない | return; // メインページ以外では実行しない | ||
| 17行目: | 20行目: | ||
// ▼ localStorage 用のキー | // ▼ localStorage 用のキー | ||
var key = 'recentchanges-cache'; | |||
var keyTime = key + '-time'; | |||
// ▼ キャッシュの有効期限(ミリ秒)→ 5分 | // ▼ キャッシュの有効期限(ミリ秒)→ 5分 | ||
var ttl = 5 * 60 * 1000; | |||
var now = Date.now(); | |||
// ▼ localStorage にキャッシュがあれば利用 | // ▼ localStorage にキャッシュがあれば利用 | ||
var cached = localStorage.getItem(key); | |||
var cachedTime = localStorage.getItem(keyTime); | |||
if (cached && cachedTime && now - cachedTime < ttl) { | if (cached && cachedTime && now - cachedTime < ttl) { | ||
| 47行目: | 50行目: | ||
}, function (data) { | }, function (data) { | ||
var html = '<ul>'; | |||
data.query.recentchanges.forEach(rc | data.query.recentchanges.forEach(function (rc) { | ||
// ▼ old_revid が null(新規作成)の場合は差分リンクを作らない | // ▼ old_revid が null(新規作成)の場合は差分リンクを作らない | ||
var diffLink = ''; | |||
if (rc.old_revid && rc.revid) { | if (rc.old_revid && rc.revid) { | ||
var diffUrl = mw.util.getUrl(rc.title, { | |||
diff: rc.revid, | diff: rc.revid, | ||
oldid: rc.old_revid | oldid: rc.old_revid | ||
}); | }); | ||
diffLink = | diffLink = '<a href="' + diffUrl + '">差分</a>'; | ||
} else { | } else { | ||
diffLink = '(新規)'; | diffLink = '(新規)'; | ||
} | } | ||
// ▼ リスト項目の | // ▼ リスト項目の HTML(ES5 文字列連結) | ||
html += | html += | ||
<li> | '<li>' + | ||
<a href="/wiki/ | '<a href="/wiki/' + rc.title + '">' + rc.title + '</a>' + | ||
| ' ' + | ||
diffLink + | |||
| ' ' + | ||
( | '(' + rc.timestamp + ')' + | ||
</li> | '</li>'; | ||
}); | }); | ||