「MediaWiki:Common.js」の版間の差分
提供: トラwiki
最新更新一覧・IPコピー・記事作成ボタンJS実装 |
軽量な最新更新読み込みスクリプトに刷新 |
||
| 1行目: | 1行目: | ||
/** | /** | ||
* | * MediaWiki:Common.js | ||
*/ | */ | ||
(function() { | (function() { | ||
'use strict'; | 'use strict'; | ||
function loadRecentUpdates() { | function loadRecentUpdates() { | ||
| 38行目: | 9行目: | ||
if (!container) return; | if (!container) return; | ||
fetch('/api.php?action=query&list=recentchanges&rcnamespace=0&rclimit=6&rcprop=title|timestamp|user | 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(res) { return res.json(); }) | ||
.then(function(data) { | .then(function(data) { | ||
| 45行目: | 16行目: | ||
if (rcs.length === 0) return; | if (rcs.length === 0) return; | ||
var html = '<ul class="tw- | var html = '<ul class="tw-recent-feed">'; | ||
for (var i = 0; i < rcs.length; i++) { | for (var i = 0; i < rcs.length; i++) { | ||
var item = rcs[i]; | var item = rcs[i]; | ||
var titleEnc = encodeURIComponent(item.title); | var titleEnc = encodeURIComponent(item.title); | ||
var dateObj = new Date(item.timestamp); | var dateObj = new Date(item.timestamp); | ||
var timeStr = | var timeStr = formatTime(dateObj); | ||
html += '<li class="tw- | html += '<li class="tw-recent-feed-item">'; | ||
html += ' < | html += ' <span><a href="/index.php/' + titleEnc + '">' + escapeHtml(item.title) + '</a></span>'; | ||
html += ' <span class="tw-recent-feed-time">' + timeStr + '</span>'; | |||
html += '</li>'; | html += '</li>'; | ||
} | } | ||
| 69行目: | 32行目: | ||
}) | }) | ||
.catch(function(err) { | .catch(function(err) { | ||
console.warn('Recent | console.warn('Recent changes load error:', err); | ||
}); | }); | ||
} | } | ||
function | function formatTime(d) { | ||
var | var m = (d.getMonth() + 1); | ||
var day = d.getDate(); | |||
var h = ('0' + d.getHours()).slice(-2); | |||
var min = ('0' + d.getMinutes()).slice(-2); | |||
var | return m + '/' + day + ' ' + h + ':' + min; | ||
var | |||
return | |||
} | } | ||
function | function escapeHtml(s) { | ||
if (!s) return ''; | |||
if ( | return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); | ||
} | } | ||
if (document.readyState === 'loading') { | if (document.readyState === 'loading') { | ||
document.addEventListener('DOMContentLoaded', | document.addEventListener('DOMContentLoaded', loadRecentUpdates); | ||
} else { | } else { | ||
loadRecentUpdates(); | loadRecentUpdates(); | ||
} | } | ||
})(); | })(); | ||
2026年8月26日 (水) 15:54時点における版
/**
* 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();
}
})();