MediaWiki:Common.js:修订间差异
MediaWiki界面页面
更多操作
无编辑摘要 标签:已被回退 |
无编辑摘要 标签:已被回退 |
||
| 第134行: | 第134行: | ||
}, 1000); | }, 1000); | ||
}); | }); | ||
// ================== | // ================== 编辑数排行榜(自动版) ================== | ||
$(function () { | $(function () { | ||
var $container = $('#edit-count-leaderboard'); | var $container = $('#edit-count-leaderboard'); | ||
if (!$container.length) return; | if (!$container.length) return; // 任何包含此 div 的页面都会触发 | ||
$container.text('排行榜加载中……'); | |||
var api = new mw.Api(); | var api = new mw.Api(); | ||
| 第153行: | 第147行: | ||
auprop: 'editcount', | auprop: 'editcount', | ||
ausort: 'editcount', | ausort: 'editcount', | ||
audit: 'desc', | audit: 'desc', | ||
aulimit: | aulimit: 50 // 前50名,可自行修改 | ||
}).then(function (data) { | }).then(function (data) { | ||
var users = data.query.allusers || []; | var users = data.query.allusers || []; | ||
if (users.length === 0) { | if (users.length === 0) { | ||
$container. | $container.text('暂无数据。'); | ||
return; | return; | ||
} | } | ||
var html = '<table class="wikitable sortable" style="width:100%;"><tr><th>排名</th><th>用户</th><th>编辑数</th></tr>'; | |||
var html = '<table class="wikitable sortable" style="width:100%;"> | |||
users.forEach(function (user, index) { | users.forEach(function (user, index) { | ||
var rank = index + 1; | var rank = index + 1; | ||
var name = user.name; | var name = user.name; | ||
var editcount = user.editcount || 0; | var editcount = user.editcount || 0; | ||
var userUrl = mw.util.getUrl('User:' + name); | |||
var | html += '<tr><td>' + rank + '</td><td><a href="' + userUrl + '" class="mw-userlink">' + name + '</a></td><td>' + editcount + '</td></tr>'; | ||
html += '<tr> | |||
}); | }); | ||
html += '</table>'; | html += '</table>'; | ||
$container.html(html); | $container.html(html); | ||
}).fail(function () { | }).fail(function (err) { | ||
$container. | $container.text('排行榜获取失败,请稍后再试。'); | ||
console.error('排行榜API错误:', err); | |||
}); | }); | ||
}); | }); | ||
2026年5月31日 (日) 07:37的版本
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
// 自动加载 MediaWiki:Footer 页面内容,并插入到每个页面底部
$(document).ready(function() {
const namespace = mw.config.get('wgNamespaceNumber');
const action = mw.config.get('wgAction');
if (namespace !== 0 || action !== 'view') {
return;
}
fetch("/api.php?action=parse&page=MediaWiki:Footer&format=json")
.then(res => res.json())
.then(data => {
if (data.parse && data.parse.text) {
const html = data.parse.text['*'];
$('#mw-content-text').append('<div class="global-footer">' + html + '</div>');
}
});
});
$(function () {
// 动态注入彩虹样式
var rainbowStyle = document.createElement('style');
rainbowStyle.textContent =
'.rainbow-user {' +
'font-weight: bold;' +
'background: repeating-linear-gradient(90deg, red 0px, orange 10px, yellow 20px, green 30px, blue 40px, indigo 50px, violet 60px);' +
'-webkit-background-clip: text;' +
'-webkit-text-fill-color: transparent;' +
'background-clip: text;' +
'color: #FFD700;' +
'}' +
'.rainbow-user::after {' +
'content: "⭐⭐⭐⭐⭐";' +
'margin-left: 2px;' +
'font-weight: normal;' +
'-webkit-text-fill-color: initial;' +
'color: #FFD700;' +
'}';
document.head.appendChild(rainbowStyle);
// 辅助函数:提取纯净用户名
function getUserName(link) {
var $span = $(link).find('span').first();
if ($span.length) return $span.text().trim();
return $(link).text().trim();
}
// 核心:给链接上色
function colorizeLinks($links) {
if ($links.length === 0) return;
// 过滤出还没上色的链接(避免重复请求)
var $fresh = $links.filter(function () {
var cls = $(this).attr('class') || '';
return !/(bronze-user|silver-user|platinum-user|gold-user|rainbow-user)/.test(cls);
});
if ($fresh.length === 0) return;
// 收集用户名
var users = [];
$fresh.each(function () {
var name = getUserName(this);
if (name && users.indexOf(name) === -1) users.push(name);
});
if (users.length === 0) return;
// 分批查询API
var batchSize = 50;
var batches = [];
for (var i = 0; i < users.length; i += batchSize) {
batches.push(users.slice(i, i + batchSize));
}
var processBatch = function (batch) {
var api = new mw.Api();
return api.get({
action: 'query',
list: 'users',
ususers: batch.join('|'),
usprop: 'editcount'
}).then(function (data) {
var classMap = {};
if (data.query && data.query.users) {
data.query.users.forEach(function (u) {
var ec = u.editcount || 0;
if (ec >= 5000) classMap[u.name] = 'rainbow-user';
else if (ec >= 2000) classMap[u.name] = 'gold-user';
else if (ec >= 1000) classMap[u.name] = 'platinum-user';
else if (ec >= 500) classMap[u.name] = 'silver-user';
else if (ec >= 1) classMap[u.name] = 'bronze-user';
});
}
// 应用颜色类
$fresh.each(function () {
var $this = $(this);
var name = getUserName(this);
var cls = classMap[name];
if (cls) {
$this.removeClass('bronze-user silver-user platinum-user gold-user rainbow-user');
$this.addClass(cls);
}
});
});
};
var promise = $.Deferred().resolve();
batches.forEach(function (batch) {
promise = promise.then(function () {
return processBatch(batch);
});
});
}
// 全页面用户链接选择器(正文 + 可能存在的卡片容器)
var linkSelector = 'a.mw-userlink, .citizen-menu_card-content a, .citizen-userMenu a';
// 1. 初始扫描
colorizeLinks($(linkSelector));
// 2. MutationObserver 监听 DOM 变化(处理动态插入的节点)
var observer = new MutationObserver(function () {
colorizeLinks($(linkSelector));
});
observer.observe(document.body, {
childList: true,
subtree: true
});
// 3. 定时器兜底(每秒检查一次,确保万无一失)
setInterval(function () {
colorizeLinks($(linkSelector));
}, 1000);
});
// ================== 编辑数排行榜(自动版) ==================
$(function () {
var $container = $('#edit-count-leaderboard');
if (!$container.length) return; // 任何包含此 div 的页面都会触发
$container.text('排行榜加载中……');
var api = new mw.Api();
api.get({
action: 'query',
list: 'allusers',
auprop: 'editcount',
ausort: 'editcount',
audit: 'desc',
aulimit: 50 // 前50名,可自行修改
}).then(function (data) {
var users = data.query.allusers || [];
if (users.length === 0) {
$container.text('暂无数据。');
return;
}
var html = '<table class="wikitable sortable" style="width:100%;"><tr><th>排名</th><th>用户</th><th>编辑数</th></tr>';
users.forEach(function (user, index) {
var rank = index + 1;
var name = user.name;
var editcount = user.editcount || 0;
var userUrl = mw.util.getUrl('User:' + name);
html += '<tr><td>' + rank + '</td><td><a href="' + userUrl + '" class="mw-userlink">' + name + '</a></td><td>' + editcount + '</td></tr>';
});
html += '</table>';
$container.html(html);
}).fail(function (err) {
$container.text('排行榜获取失败,请稍后再试。');
console.error('排行榜API错误:', err);
});
});