MCBBS Wiki欢迎您共同参与编辑!在参与编辑之前请先阅读Wiki方针。
如果在编辑的过程中遇到了什么问题,可以去讨论板提问。
为了您能够无阻碍地参与编辑 未验证/绑定过邮箱的用户,请尽快绑定/验证。
MCBBS Wiki GitHub群组已上线!
您可以在回声洞中发表吐槽!
服务器状态监控。点击进入
本站由MCBBS用户自行搭建,与MCBBS及东银河系漫游指南(北京)科技有限公司没有从属关系。点此了解 MCBBS Wiki 不是什么>>
用户:坑触可/js/userblockedinfo2.js
< 用户:坑触可
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
$(function () {
var markUG = function () {
var $users = $('a.mw-userlink');
var users = {};
$users.each(function (index, link) {
users[link.textContent] = true;
});
var queue1 = [];
var queue2 = [];
var i = 0, n = 0;
for (var user in users) {
queue1.push(user);
i++;
if (i === 50) {
queue2.push(queue1);
queue1 = [];
n++;
i = 0;
}
}
if (queue1.length > 0) {
queue2.push(queue1);
n++;
}
var getUsername = function (title) {
return title.replace('用户:', '').replace(/_/g, ' ').replace(/%(?!\d+)/g, '%25');
};
var done = function () {
var group;
$('a.mw-userlink').each(function (i, el) {
var username = getUsername($(el).attr('title'));
if (username) {
for (group in groups) {
if (groups.hasOwnProperty(group)) {
if (groups[group].list.indexOf(username) > -1) {
$(el).append('<sup class=UserBlockedInfo></sup>');
}
}
}
}
});
};
var process = function (data) {
var users, group;
if (data.query && data.query.users) {
users = data.query.users;
} else {
users = [];
}
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (user.groups) {
for (group in groups) {
if (groups.hasOwnProperty(group) && user.groups.indexOf(group) > -1) {
groups[group].list.push(user.name);
}
}
}
}
n--;
if (n <= 0) {
done();
}
};
var api = new mw.Api();
for (var j = 0; j < queue2.length; j++) {
api.get({
format: 'json',
action: 'query',
list: 'blocks',
bklimit: 100,
bkusers: users.splice(0, 50).join('|'),
bkprop: 'user|by|timestamp|expiry|reason|restrictions'
}).done(process);
}
};
// Callback: receive data and mark links
function markLinks(resp, status, xhr) {
serverTime = new Date(xhr.getResponseHeader('Date'));
var list,
blk,
tip,
links,
lnk,
blTime;
if (!resp || !(list = resp.query) || !(list = list.blocks)) return;
for (var i = 0; i < list.length; i++) {
blk = list[i];
var partial = blk.restrictions && !Array.isArray(blk.restrictions); //Partial block
if (/^in/.test(blk.expiry)) {
clss = partial ? 'user-blocked-partial' : 'user-blocked-indef';
blTime = blk.expiry;
} else {
clss = partial ? 'user-blocked-partial' : 'user-blocked-temp';
blTime = inHours(parseTS(blk.expiry) - parseTS(blk.timestamp));
}
tip = mbTooltip;
if (partial) tip = mbTooltipPartial;
tip = tip.replace('$1', blTime).replace('infinity', mbInfinity)
.replace('$2', blk.by)
.replace('$3', blk.reason)
.replace('$4', inHours(serverTime - parseTS(blk.timestamp)));
links = userLinks[blk.user];
for (var k = 0; links && k < links.length; k++) {
lnk = $(links[k]);
lnk = lnk.addClass(clss);
if (window.mbTipBox) {
$('<span class=user-blocked-tipbox>#</span>').attr('title', tip).insertBefore(lnk);
} else {
lnk.attr('title', lnk.attr('title') + tip);
}
}
}
if (--apiRequests === 0) { // last response
setCSS('', 'markBlockedStyle-2', 'remove');
$('#ca-showblocks').parent().remove(); // remove added portlet link
}
}
// --------AUX functions
// 避免标签爆炸(mw.hook导致重复添加样式表)
function setCSS(css, id, method) {
var style = document.createElement('style');
switch (method) {
case 'add':
if (document.getElementById(id))
return;
style.id = id;
style.appendChild(document.createTextNode(css));
document.head.appendChild(style);
break;
case 'remove':
document.getElementById(id) && $('#' + id).remove(); // 原生document.getElementById(id).remove()方法不兼容IE
break;
default:
return;
}
}
// 20081226220605 or 2008-01-26T06:34:19Z -> date
function parseTS(ts) {
var m = ts.replace(/\D/g, '').match(/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/);
return new Date(Date.UTC(m[1], m[2] - 1, m[3], m[4], m[5], m[6]));
}
function inHours(ms) { // milliseconds -> "2:30" or 5,06d or 21d
var mm = Math.floor(ms / 60000);
if (!mm) return Math.floor(ms / 1000) + '秒';
var hh = Math.floor(mm / 60);
mm = mm % 60;
var dd = Math.floor(hh / 24);
hh = hh % 24;
if (dd) {
if (dd < 10 && hh) return dd + '日' + hh + '小时';
return dd + '日';
}
return hh + '小时' + zz(mm) + '分';
}
function zz(v) { // 6 -> '06'
if (v <= 9) v = '0' + v;
return v;
}
mw.hook('wikipage.content').add(function(e) {
if (e.attr('id') === 'mw-content-text') {
markUG();
return;
}
if (e.hasClass('mw-changeslist')) markUG();
});
});