注意:在您儲存之後您必須清除瀏覽器快取才可看到最新的變動。
?_=1來訪問最新頁面。
/**
* 取自[[zhwp:MediaWiki:Gadget-OnlineAdmins.js]],oldid=64572008。
* 已萌百化。
*/
"use strict";
$.when($.ready, mw.loader.using(["mediawiki.api", "ext.gadget.site-lib", "ext.gadget.libOOUIDialog"])).then(() => {
// Create portlet link
const portletLinkOnline = mw.util.addPortletLink(
"p-cactions",
"#",
wgULS("在線維護人員", "線上維護人員"),
"ca-onlineadmin",
);
let rcstart,
rcend,
time;
let users = [],
sysops = [],
patrollers = [];
const api = new mw.Api();
// Bind click handler
$(portletLinkOnline).click((e) => {
e.preventDefault();
users = [];
const usersExt = [];
sysops = [];
patrollers = [];
// 最近更改30分鐘內的編輯用戶
time = new Date();
rcstart = time.toISOString();
time.setMinutes(time.getMinutes() - 30);
rcend = time.toISOString();
//API:RecentChanges
api.get({
format: "json",
action: "query",
list: "recentchanges",
rcprop: "user",
rcstart: rcstart,
rcend: rcend,
rcshow: "!bot",
rclimit: "max",
}).done((data) => {
$.each(data.query.recentchanges, (i, item) => {
users[i] = item.user;
});
api.get({
format: "json",
action: "query",
list: "logevents",
leprop: "user",
lestart: rcstart,
leend: rcend,
lelimit: "max",
}).done((data) => {
$.each(data.query.logevents, (i, item) => {
usersExt[i] = item.user;
});
Array.prototype.push.apply(users, usersExt);
// 用戶名去重
users = $.unique(users.sort());
const promises = [];
const mark = function (data) {
$.each(data.query.users, (i, user) => {
// 找到管理員,去除bot
if ($.inArray("bot", user.groups) === -1) {
if ($.inArray("sysop", user.groups) > -1) {
sysops[i] = user.name;
}
if ($.inArray("patroller", user.groups) > -1) {
patrollers[i] = user.name;
}
}
});
};
for (let i = 0; i < (users.length + 50) / 50; i++) {
promises.push(api.get({
format: "json",
action: "query",
list: "users",
ususers: users.slice(i * 50, (i + 1) * 50).join("|"),
usprop: "groups",
}).done(mark));
}
// 查詢用戶權限
$.when(...promises).done(() => {
// 消除空值
const filter = function (n) {
return n;
};
sysops = sysops.filter(filter);
patrollers = patrollers.filter(filter);
const userlink = function (user) {
const user2 = user.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, "<");
// eslint-disable-next-line no-irregular-whitespace
return `<a href="/User:${user2}" target="_blank">${user2}</a> <small style="opacity:.75;">(<a href="/User talk:${user2}" target="_blank">留言</a>)</small> `;
};
if (sysops.length + patrollers.length > 0) {
const adminsstring = [wgULS("<p>下面是最近30分鐘之內在線的維護人員</p>", "<p>下面是最近30分鐘內的線上維護人員</p>")];
if (sysops.length > 0) {
adminsstring.push(`<p style="word-break:break-all;">${wgULS("管理員", "管理員")} (${sysops.length}${wgULS("個在線", "個在線")}): `);
$.each(sysops, (_i, e) => {
adminsstring.push(userlink(e));
});
adminsstring.push("</p>");
}
if (patrollers.length > 0) {
adminsstring.push(`<p style="word-break:break-all;">${wgULS("維護姬", "維護姬")} (${patrollers.length}${wgULS("個在線", "個在線")}):`);
$.each(patrollers, (_i, e) => {
adminsstring.push(userlink(e));
});
adminsstring.push("</p>");
}
oouiDialog.alert($(adminsstring.join("")), {
title: wgULS("在線維護人員", "線上維護人員"),
size: "medium",
});
} else {
mw.notify(wgULS("目前沒有維護人員在線。", "目前沒有維護人員在線。"));
}
}).fail(() => {
mw.notify(wgULS("查詢時發生錯誤,請稍後重試。", "查詢時發生錯誤,請稍後重試。"));
});
});
});
});
});