User:Irukaza/common.js:修订间差异
跳到导航
跳到搜索
imported>=海豚= 无编辑摘要 |
imported>=海豚= 无编辑摘要 |
||
(未显示同一用户的7个中间版本) | |||
第1行: | 第1行: | ||
"use strict"; | "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) | |||
if (! | || 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 (/^用户:[^/=%]+/.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年3月23日 (二) 21:32的版本
"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 (/^用户:[^/=%]+/.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>");
})());