MediaWiki:Gadget-blockEnhance.js
外观
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/**
* -------------------------------------------------------------------------
* !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
* -------------------------------------------------------------------------
*/
var _addText = '{{GHIACode|page=GHIA:MoegirlPediaInterfaceCodes/blob/master/src/gadgets/blockEnhance/Gadget-blockEnhance.js|user=[[U:AnnAngela]]|co-authors=GH:github-actions[bot]|longId=103d1a563ea4ccc8ff29fb55c9bcd88329a56eb5|shortId=103d1a56|summary=feat: rename (#594)|body=<nowiki>Co-authored-by: github-actions[bot] <41898282+github-actions[bot]📧users.noreply.github.com></nowiki>}}';
/* <pre> */
// <pre>
"use strict";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _async_to_generator(fn) {
return function() {
var self = this, args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _ts_generator(thisArg, body) {
var f, y, t, _ = {
label: 0,
sent: function() {
if (t[0] & 1) throw t[1];
return t[1];
},
trys: [],
ops: []
}, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
return this;
}), g;
function verb(n) {
return function(v) {
return step([
n,
v
]);
};
}
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while(g && (g = 0, op[0] && (_ = 0)), _)try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [
op[0] & 2,
t.value
];
switch(op[0]){
case 0:
case 1:
t = op;
break;
case 4:
_.label++;
return {
value: op[1],
done: false
};
case 5:
_.label++;
y = op[1];
op = [
0
];
continue;
case 7:
op = _.ops.pop();
_.trys.pop();
continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
_ = 0;
continue;
}
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
_.label = op[1];
break;
}
if (op[0] === 6 && _.label < t[1]) {
_.label = t[1];
t = op;
break;
}
if (t && _.label < t[2]) {
_.label = t[2];
_.ops.push(op);
break;
}
if (t[2]) _.ops.pop();
_.trys.pop();
continue;
}
op = body.call(thisArg, _);
} catch (e) {
op = [
6,
e
];
y = 0;
} finally{
f = t = 0;
}
if (op[0] & 5) throw op[1];
return {
value: op[0] ? op[1] : void 0,
done: true
};
}
}
(function() {
return _async_to_generator(function() {
var showResults, updateCIDRresult, autoBlock, flag, wpTarget, powerfulUserList, submitButton, submitForm, submitButtonText, result, error;
return _ts_generator(this, function(_state) {
switch(_state.label){
case 0:
// await mw.loader.using(["ext.gadget.libOOUIDialog"]);
if (mw.config.get("wgCanonicalSpecialPageName") !== "Block") {
return [
2
];
}
return [
4,
$.ready
];
case 1:
_state.sent();
showResults = function(size, cidr) {
$("#mw-checkuser-cidr-res").val(cidr);
$("#mw-checkuser-ipnote").text(size);
};
updateCIDRresult = function() {
var form = document.getElementById("mw-checkuser-cidrform");
if (!form) {
return;
}
form.style.display = "inline";
var iplist = document.getElementById("mw-checkuser-iplist") /* as HTMLTextAreaElement */ ;
if (!iplist) {
return;
}
var text = iplist.value;
var ips;
if (text.indexOf("\n") !== -1) {
ips = text.split("\n");
} else if (text.indexOf("\t") !== -1) {
ips = text.split("\t");
} else if (text.indexOf(",") !== -1) {
ips = text.split(",");
} else if (text.indexOf(" - ") !== -1) {
ips = text.split(" - ");
} else if (text.indexOf("-") !== -1) {
ips = text.split("-");
} else if (text.indexOf(" ") !== -1) {
ips = text.split(" ");
} else {
ips = text.split(";");
}
var binPrefix = 0 /* as any */ , prefixCidr = 0 /* as any */ , prefix = "", foundV4 = false, foundV6 = false, ipCount, blocs, isOverflow;
for(var i = 0; i < ips.length; i++){
var addy = ips[i].replace(/^\s*|\s*$/, "");
var ipV4 = mw.util.isIPv4Address(addy, true);
var ipV6 = mw.util.isIPv6Address(addy, true);
var ipCidr = addy.match(/^(.*)(?:\/(\d+))?$/);
var bin = "";
var x = 0, z = 0, start = 0, end = 0, ip = void 0, cidr = void 0, bloc = void 0, binBlock = void 0;
if (ipV4) {
foundV4 = !0;
if (foundV6) {
prefix = "";
break;
}
ip = ipCidr[1];
cidr = ipCidr[2] || null;
blocs = ip.split(".");
for(x = 0; x < blocs.length; x++){
bloc = parseInt(blocs[x], 10);
binBlock = bloc.toString(2);
while(binBlock.length < 8){
binBlock = "0".concat(binBlock);
}
bin += binBlock;
}
prefix = "";
if (cidr) {
bin = bin.substring(0, cidr);
}
if (binPrefix === 0) {
binPrefix = bin;
} else {
for(x = 0; x < binPrefix.length; x++){
if (bin[x] === undefined || binPrefix[x] !== bin[x]) {
binPrefix = binPrefix.substring(0, x);
break;
}
}
}
prefixCidr = binPrefix.length;
if (prefixCidr < 16) {
isOverflow = true;
}
for(z = 0; z <= 3; z++){
bloc = 0;
start = z * 8;
end = start + 7;
for(x = start; x <= end; x++){
if (binPrefix[x] === undefined) {
break;
}
bloc += parseInt(binPrefix[x], 10) * Math.pow(2, end - x);
}
prefix += z === 3 ? bloc : "".concat(bloc, ".");
}
ipCount = Math.pow(2, 32 - prefixCidr);
if (prefixCidr === 32) {
prefixCidr = !1;
}
} else if (ipV6) {
foundV6 = !0;
if (foundV4) {
prefix = "";
break;
}
ip = ipCidr[1];
cidr = ipCidr[2] || null;
var abbrevs = ip.match(/::/g);
if (abbrevs && abbrevs.length > 0) {
var colons = ip.match(/:/g);
var needed = 7 - (colons.length - 2);
var insert = "";
while(needed > 1){
insert += ":0";
needed--;
}
ip = ip.replace("::", "".concat(insert, ":"));
if (ip[0] === ":") {
ip = "0".concat(ip);
}
}
blocs = ip.split(":");
for(x = 0; x <= 7; x++){
bloc = blocs[x] || "0";
var intBlock = parseInt(bloc, 16);
binBlock = intBlock.toString(2);
while(binBlock.length < 16){
binBlock = "0".concat(binBlock);
}
bin += binBlock;
}
prefix = "";
if (cidr) {
bin = bin.substring(0, cidr);
}
if (binPrefix === 0) {
binPrefix = bin;
} else {
for(x = 0; x < binPrefix.length; x++){
if (bin[x] === undefined || binPrefix[x] !== bin[x]) {
binPrefix = binPrefix.substring(0, x);
break;
}
}
}
prefixCidr = binPrefix.length;
if (prefixCidr < 32) {
isOverflow = true;
}
for(z = 0; z <= 7; z++){
bloc = 0;
start = z * 16;
end = start + 15;
for(x = start; x <= end; x++){
if (binPrefix[x] === undefined) {
break;
}
bloc += parseInt(binPrefix[x], 10) * Math.pow(2, end - x);
}
bloc = bloc.toString(16);
prefix += z === 7 ? bloc : "".concat(bloc, ":");
}
ipCount = Math.pow(2, 128 - prefixCidr);
if (prefixCidr === 128) {
prefixCidr = !1;
}
}
}
if (prefix !== "") {
var full = prefix;
if (prefixCidr !== false) {
full += "/".concat(prefixCidr);
}
showResults("~".concat(ipCount).concat(isOverflow ? " [OVERFLOW]" : ""), full);
} else {
showResults("?", "");
}
};
$("#mw-content-text form").prepend('<fieldset id="mw-checkuser-cidrform" class="checkuser-show" style="display: block; float: right;"><legend>检查指定IP列表的共同区段</legend><textarea id="mw-checkuser-iplist" dir="ltr" rows="5" cols="50"></textarea><br>通用CIDR: <input name="mw-checkuser-cidr-res" size="35" value="" id="mw-checkuser-cidr-res"> <strong id="mw-checkuser-ipnote">?</strong></fieldset><style>#mw-content-text form .oo-ui-fieldLayout:before, #mw-content-text form .oo-ui-fieldLayout:after {clear: left;}');
updateCIDRresult();
$("#mw-checkuser-iplist").on("keyup click", updateCIDRresult);
autoBlock = OO.ui.infuse($("#mw-input-wpAutoBlock"));
if ($("input#mw-input-wpConfirm, input[name=wpConfirm]").val() === "") {
autoBlock.setSelected(false);
}
flag = false;
wpTarget = $('[name="wpTarget"]');
powerfulUserList = [];
submitButton = OO.ui.infuse($('#mw-content-text [type="submit"]').parent());
submitForm = submitButton.$element.closest("form");
submitButtonText = submitButton.getLabel();
submitButton.setDisabled(true).setLabel(wgULS("正在加载中……", "正在載入中……"));
submitForm.on("submit.warning", function(e) {
return _async_to_generator(function() {
var _tmp;
return _ts_generator(this, function(_state) {
switch(_state.label){
case 0:
e.preventDefault();
e.stopImmediatePropagation();
if (flag === false) {
// powerfulUserList has not been loaded yet
return [
2
];
}
_tmp = powerfulUserList.includes(wpTarget.val());
if (!_tmp) return [
3,
2
];
return [
4,
oouiDialog.confirm("您要".concat(wgULS("封禁的用户", "封鎖的使用者", null, null, "封鎖的用戶"), "【").concat(wpTarget.val(), "】").concat(wgULS("持有“封禁”和“自我解封”权限,您的封禁很可能无效且有可能违反封禁方针,您是否要继续?", "持有「封鎖」和「自我解封」權限,您的封鎖很可能無效且有可能違反封鎖方針,您是否要繼續?")), {
title: wgULS("封禁辅助工具", "封鎖輔助工具")
})
];
case 1:
_tmp = !_state.sent();
_state.label = 2;
case 2:
if (_tmp) {
// User cancelled the action
return [
2
];
}
submitForm.off("submit.warning").trigger("submit");
return [
2
];
}
});
})();
});
_state.label = 2;
case 2:
_state.trys.push([
2,
4,
5,
6
]);
return [
4,
new mw.Api({
timeout: 5000
}).post({
action: "query",
assertuser: mw.config.get("wgUserName"),
list: "allusers",
aurights: "block|unblockself",
aulimit: "max",
auprop: "rights"
})
];
case 3:
result = _state.sent();
powerfulUserList = result.query.allusers.filter(function(au) {
return au.rights.includes("block") && au.rights.includes("unblockself");
}).map(function(au) {
return au.name;
});
return [
3,
6
];
case 4:
error = _state.sent();
console.error(error);
submitButton.after('<span class="error">'.concat(wgULS("无法获取持有“封禁”和“自我解封”权限的用户列表,请谨慎操作", "無法獲取持有「封鎖」和「自我解封」權限的使用者列表,請謹慎操作", null, null, "無法獲取持有「封鎖」和「自我解封」權限的用戶列表,請謹慎操作"), "。</span>"));
return [
3,
6
];
case 5:
submitButton.setDisabled(false).setLabel(submitButtonText);
flag = true;
return [
7
];
case 6:
return [
2
];
}
});
})();
})(); // </pre>
/* </pre> */