“黑犬兽”与“User:Irukaza/common.js”:页面之间的差异
(页面间差异)
跳到导航
跳到搜索
imported>梦蝶葬花 小无编辑摘要 |
imported>=海豚= 无编辑摘要 |
||
第1行: | 第1行: | ||
mw.loader.load('https://www.hmoegirl.com/index.php?title=User:= 海豚=/js/userStatus.js&action=raw&ctype=text/javascript'); | |||
"use strict"; | |||
$(() => (async () => { | |||
await mw.loader.using(["mw.Api", "mediawiki.Uri"]); | |||
= | const groupsKey = ["bureaucrat", "checkuser", "suppress", "sysop", "patroller", "bot", "goodeditor"].reverse(); | ||
const groupsStr = { | |||
bureaucrat: "行", | |||
checkuser: "查", | |||
suppress: "监", | |||
sysop: "管", | |||
patroller: "巡", | |||
bot: "机", | |||
goodeditor: "优", | |||
}; | |||
let cache; | |||
try { | |||
cache = JSON.parse(localStorage.getItem("AnnTools-usergroup")); | |||
if (!$.isPlainObject(cache) | |||
|| typeof cache.timestamp !== "number" || cache.timestamp < new Date().getTime() - 30 * 60 * 1000 | |||
== | || !$.isPlainObject(cache.groups)) { | ||
throw new Error(); | |||
( | } else { | ||
( | for (const i of groupsKey) { | ||
if (!Array.isArray(cache.groups[i])) { | |||
throw new Error(); | |||
} | |||
} | |||
} | |||
} catch { | |||
const api = new mw.Api(); | |||
const result = {}; | |||
const eol = Symbol(); | |||
let aufrom = undefined; | |||
while (aufrom !== eol) { | |||
const _result = await api.post({ | |||
action: "query", | |||
( | list: "allusers", | ||
augroup: groupsKey.join("|"), | |||
( | aulimit: "max", | ||
( | auprop: "groups", | ||
( | aufrom, | ||
( | }); | ||
( | if (_result.continue) { | ||
aufrom = _result.continue.aufrom; | |||
( | } else { | ||
( | aufrom = eol; | ||
} | |||
( | _result.query.allusers.forEach(({ | ||
name, | |||
groups, | |||
}) => { | |||
groups.forEach((group) => { | |||
( | if (groupsKey.includes(group)) { | ||
result[group] = result[group] || []; | |||
( | if (!result[group].includes(name)) { | ||
result[group].push(name); | |||
( | } | ||
( | } | ||
}); | |||
}); | |||
( | } | ||
cache = { | |||
timestamp: new Date().getTime(), | |||
groups: result, | |||
}; | |||
( | } | ||
localStorage.setItem("AnnTools-usergroup", JSON.stringify(cache)); | |||
const hook = () => { | |||
$("a.mw-userlink:not(.markrights)").each((_, ele) => { | |||
ele.classList.add("markrights"); | |||
( | const uri = new mw.Uri(ele.href); | ||
let username; | |||
const path = decodeURI(uri.path); | |||
if (/^\/User:[^/=%]+/.test(path)) { | |||
( | username = path.match(/^\/User:([^/=%]+)/)[1].replace(/_/g, " "); | ||
( | } else if (/^User:[^/=%]+/.test(uri.query.title)) { | ||
username = uri.query.title.match(/^User:([^/=%]+)/)[1].replace(/_/g, " "); | |||
} | |||
if (username) { | |||
( | const self = $(ele); | ||
groupsKey.forEach((group) => { | |||
if (cache.groups[group].includes(username)) { | |||
self.after(`<sup class="markrights-${group}">${groupsStr[group]}<sup>`); | |||
} | |||
}); | |||
} | |||
}); | |||
for (const group of Object.keys(groupsStr)) { | |||
$(`.markrights-${group}`).nextUntil(':not([class*="markrights-"])').filter(`.markrights-${group}`).remove(); | |||
} | |||
( | }; | ||
hook(); | |||
mw.hook("wikipage.content").add(hook); | |||
$(window).on("load", hook); | |||
( | $("body").append("<style>.markrights-bureaucrat{color:black}.markrights-checkuser{color:purple}.markrights-suppress{color:purple}.markrights-sysop{color:mediumvioletred}.markrights-patroller{color:sienna}.markrights-bot{color:blue}.markrights-goodeditor{color:green}sup[class^=markrights-]+sup[class^=markrights-]{margin-left:2px}</style>"); | ||
})()); | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
( | |||
2021年2月5日 (五) 21:36的版本
mw.loader.load('https://www.hmoegirl.com/index.php?title=User:=海豚=/js/userStatus.js&action=raw&ctype=text/javascript');
"use strict";
$(() => (async () => {
await mw.loader.using(["mw.Api", "mediawiki.Uri"]);
const groupsKey = ["bureaucrat", "checkuser", "suppress", "sysop", "patroller", "bot", "goodeditor"].reverse();
const groupsStr = {
bureaucrat: "行",
checkuser: "查",
suppress: "监",
sysop: "管",
patroller: "巡",
bot: "机",
goodeditor: "优",
};
let cache;
try {
cache = JSON.parse(localStorage.getItem("AnnTools-usergroup"));
if (!$.isPlainObject(cache)
|| typeof cache.timestamp !== "number" || cache.timestamp < new Date().getTime() - 30 * 60 * 1000
|| !$.isPlainObject(cache.groups)) {
throw new Error();
} else {
for (const i of groupsKey) {
if (!Array.isArray(cache.groups[i])) {
throw new Error();
}
}
}
} catch {
const api = new mw.Api();
const result = {};
const eol = Symbol();
let aufrom = undefined;
while (aufrom !== eol) {
const _result = await api.post({
action: "query",
list: "allusers",
augroup: groupsKey.join("|"),
aulimit: "max",
auprop: "groups",
aufrom,
});
if (_result.continue) {
aufrom = _result.continue.aufrom;
} else {
aufrom = eol;
}
_result.query.allusers.forEach(({
name,
groups,
}) => {
groups.forEach((group) => {
if (groupsKey.includes(group)) {
result[group] = result[group] || [];
if (!result[group].includes(name)) {
result[group].push(name);
}
}
});
});
}
cache = {
timestamp: new Date().getTime(),
groups: result,
};
}
localStorage.setItem("AnnTools-usergroup", JSON.stringify(cache));
const hook = () => {
$("a.mw-userlink:not(.markrights)").each((_, ele) => {
ele.classList.add("markrights");
const uri = new mw.Uri(ele.href);
let username;
const path = decodeURI(uri.path);
if (/^\/User:[^/=%]+/.test(path)) {
username = path.match(/^\/User:([^/=%]+)/)[1].replace(/_/g, " ");
} else if (/^User:[^/=%]+/.test(uri.query.title)) {
username = uri.query.title.match(/^User:([^/=%]+)/)[1].replace(/_/g, " ");
}
if (username) {
const self = $(ele);
groupsKey.forEach((group) => {
if (cache.groups[group].includes(username)) {
self.after(`<sup class="markrights-${group}">${groupsStr[group]}<sup>`);
}
});
}
});
for (const group of Object.keys(groupsStr)) {
$(`.markrights-${group}`).nextUntil(':not([class*="markrights-"])').filter(`.markrights-${group}`).remove();
}
};
hook();
mw.hook("wikipage.content").add(hook);
$(window).on("load", hook);
$("body").append("<style>.markrights-bureaucrat{color:black}.markrights-checkuser{color:purple}.markrights-suppress{color:purple}.markrights-sysop{color:mediumvioletred}.markrights-patroller{color:sienna}.markrights-bot{color:blue}.markrights-goodeditor{color:green}sup[class^=markrights-]+sup[class^=markrights-]{margin-left:2px}</style>");
})());