MediaWiki:Common.js
提供: トラwiki
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Microsoft Edge: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください。
/**
* MediaWiki:Common.js
*/
(function() {
'use strict';
function loadRecentUpdates() {
var container = document.getElementById('tw-live-recent-updates');
if (!container) return;
fetch('/api.php?action=query&list=recentchanges&rcnamespace=0&rclimit=6&rcprop=title|timestamp|user&format=json')
.then(function(res) { return res.json(); })
.then(function(data) {
if (!data || !data.query || !data.query.recentchanges) return;
var rcs = data.query.recentchanges;
if (rcs.length === 0) return;
var html = '<ul class="tw-recent-feed">';
for (var i = 0; i < rcs.length; i++) {
var item = rcs[i];
var titleEnc = encodeURIComponent(item.title);
var dateObj = new Date(item.timestamp);
var timeStr = formatTime(dateObj);
html += '<li class="tw-recent-feed-item">';
html += ' <span><a href="/index.php/' + titleEnc + '">' + escapeHtml(item.title) + '</a></span>';
html += ' <span class="tw-recent-feed-time">' + timeStr + '</span>';
html += '</li>';
}
html += '</ul>';
container.innerHTML = html;
})
.catch(function(err) {
console.warn('Recent changes load error:', err);
});
}
function formatTime(d) {
var m = (d.getMonth() + 1);
var day = d.getDate();
var h = ('0' + d.getHours()).slice(-2);
var min = ('0' + d.getMinutes()).slice(-2);
return m + '/' + day + ' ' + h + ':' + min;
}
function escapeHtml(s) {
if (!s) return '';
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', loadRecentUpdates);
} else {
loadRecentUpdates();
}
})();