MediaWiki:Common.js
注意:在您發布之後,您可能需要清除瀏覽器快取才能看到變更。
- Firefox或Safari:按住Shift時點擊重新整理,或按Ctrl-F5或Ctrl-R(Mac則為⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac則為⌘-Shift-R)
- Edge:按住Ctrl時點擊重新整理,或按Ctrl-F5。
/* 此 JavaScript 會用於使用者載入的每一個頁面。 */
/* 首頁:從最近更新條目中隨機顯示 5 個 */
mw.loader.using(['mediawiki.api', 'mediawiki.util']).then(function () {
$(function () {
var box = document.getElementById('climbing-recent-pages');
if (!box) {
return;
}
new mw.Api().get({
action: 'query',
list: 'recentchanges',
rcnamespace: 0,
rctype: 'edit|new',
rcshow: '!bot|!redirect',
rctoponly: true,
rcprop: 'title|timestamp',
rclimit: 100,
formatversion: 2
}).done(function (data) {
var seen = new Set();
var pages = [];
var currentTitle = mw.config.get('wgPageName').replace(/_/g, ' ');
((data.query && data.query.recentchanges) || []).forEach(function (page) {
if (!page.title ||
page.title === currentTitle ||
seen.has(page.title)) {
return;
}
seen.add(page.title);
pages.push(page);
});
// 最近更新的 20 個不同條目作為抽選範圍。
pages = pages.slice(0, 20);
// Fisher–Yates 隨機排序。
for (var i = pages.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = pages[i];
pages[i] = pages[j];
pages[j] = temp;
}
if (!pages.length) {
box.textContent = '目前沒有可顯示的近期更新條目。';
return;
}
var list = document.createElement('ul');
pages.slice(0, 5).forEach(function (page) {
var item = document.createElement('li');
var link = document.createElement('a');
link.href = mw.util.getUrl(page.title);
link.textContent = page.title;
item.appendChild(link);
var date = new Date(page.timestamp);
if (!Number.isNaN(date.getTime())) {
var label = document.createElement('span');
label.style.color = '#666';
label.textContent = '(' +
date.toLocaleDateString('zh-TW', {
timeZone: 'Asia/Taipei',
year: 'numeric',
month: 'numeric',
day: 'numeric'
}) + ' 更新)';
item.appendChild(label);
}
list.appendChild(item);
});
box.replaceChildren(list);
}).fail(function () {
box.textContent = '暫時無法載入,請點選側欄的「近期變更」。';
});
});
});