User:LaMagiaaa/markrights.js
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* copied from zhwiki MediaWiki:Gadget-MarkRights.js oldid=61206443 */
/* Changed */
$(function () {
var groups = {
//基本的な権限
autoconfirmed: {list: [], class: "markrights-autoconfirmed"},
extendedconfirmed: {list: [], class: "markrights-extendedconfirmed"},
//
//abusefilter
//abusefilter-helper
accountcreator: {list: [], class: "markrights-accountcreator"},
//arbcom Arbitration committee members 裁定委員会委員
//autoeditor Автопатрулируемые Autoeditors autoconfirmed+autoreview
autoreview: {list: [], class: "markrights-autoreview"},
autoreviewer: {list: [], class: "markrights-autoreviewer"},
bot: {list: [], class: "markrights-bot"},
bureaucrat: {list: [], class: "markrights-bureaucrat"},
checkuser: {list: [], class: "markrights-checkuser"},
//closer //ruwiki Closers Подводящие итоги 削除者
confirmed: {list: [], class: "markrights-confirmed"},
//copyviobot
editer: {list: [], class: "markrights-editer"},
eliminator: {list: [], class: "markrights-eliminator"},
//engineer エンジニア Engineers
//eventparticipant
//extendedmover
//founder
//filemover
flood: {list: [], class: "markrights-flood"},
//flow-bot
//inport
'interface-admin': {list: [], class: "markrights-interface-admin"},
//interface-editor //urwiki Interface editors インターフェース編集者
'ipblock-exempt': {list: [], class: "markrights-ipblock-exempt"},
//noratelimit
oversight: {list: [], class: "markrights-oversight"},
'massmessage-sender': {list: [], class: "markrights-massmessage-sender"},
//nocreate //tawiki createpage 禁止
patroller: {list: [], class: "markrights-patroller"},
//propertycreator //プロパティ作成者 Property creators
//researcher
reviewer: {list: [], class: "markrights-reviewer"},
rollbacker: {list: [], class: "markrights-rollbacker"},
//suppressredirect //ruwiki Переименовывающие без перенаправлений / Redirect suppressing movers
steward: {list: [], class: "markrights-steward"},
sysop: {list: [], class: "markrights-sysop"},
templateeditor: {list: [], class: "markrights-templateeditor"},
transwiki: {list: [], class: "markrights-transwiki"},
//trusted
//user
//wikidata-staff //Wikidata staffウィキデータスタッフ
};
var markUG = function () {
var $users = $('a.mw-userlink:not(.mw-anonuserlink)');
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 (url) {
var username = mw.util.getParamValue('title', url);
if (username) {
return decodeURIComponent(username.replace(/(User:|利用者:|用戶:|Benutzer:|Benutzerin:|Thành viên:|사용자:|Потребител:|کاربر:|Utilisateur:|Utilizator:|Usuario:|Usuaria:|Utente:|مستخدم:|)/, '').replace(/_/g, ' '));
}
username = url.match(/\/wiki\/User:(.+?)$/)
|| url.match(/\/wiki\/Benutzer:(.+?)$/) //de male
|| url.match(/\/wiki\/Benutzerin:(.+?)$/) //de female
|| url.match(/\/wiki\/Usuario:(.+?)$/) //es male
|| url.match(/\/wiki\/Usuaria:(.+?)$/) //es female
|| url.match(/\/wiki\/Utente:(.+?)$/) //it
|| url.match(/\/wiki\/%E5%88%A9%E7%94%A8%E8%80%85:(.+?)$/) //ja
|| url.match(/\/wiki\/Utilisateur:(.+?)$/) //fr
|| url.match(/\/wiki\/Utilizator:(.+?)$/) //ro
|| url.match(/\/wiki\/%D9%85%D8%B3%D8%AA%D8%AE%D8%AF%D9%85:(.+?)$/) //ar
|| url.match(/\/wiki\/%EC%82%AC%EC%9A%A9%EC%9E%90:(.+?)$/) //ko
|| url.match(/\/wiki\/Th%C3%A0nh_vi%C3%AAn:(.+?)$/) //vi
|| url.match(/\/wiki\/%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1:(.+?)$/) //fa
|| url.match(/\/wiki\/%D0%9F%D0%BE%D1%82%D1%80%D0%B5%D0%B1%D0%B8%D1%82%D0%B5%D0%BB:(.+?)$/) //bg
|| url.match(/\/wiki\/%E7%94%A8%E6%88%B6:(.+?)$/); //lzhwiki
if (username) {
return decodeURIComponent(username[1].replace(/_/g, ' '));
}
return null;
};
var done = function () {
var group;
$('a.mw-userlink:not(.mw-anonuserlink)').each(function (i, el) {
var username = getUsername($(el).attr('href'));
if (username) {
for (group in groups) {
if (groups.hasOwnProperty(group)) {
if (groups[group].list.includes(username)) {
$(el).append('<sup class="' + groups[group].class + '"></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: 'users',
usprop: 'groups',
ususers: queue2[j].join('|')
}).done(process);
}
};
if (mw.config.get('wgDiffNewId') || mw.config.get('wgDiffOldId')) {
// 啟用「互動式瀏覽歷史」,切換差異時重新標記
mw.hook('wikipage.diff').add(function () { // Reload alongside the revision slider
markUG();
});
} else if (['Recentchanges', 'Recentchangeslinked'].includes(mw.config.get('wgCanonicalSpecialPageName'))) {
// 最近/相關更改更新時重新標記
mw.hook('wikipage.content').add(function (element) {
if (element.hasClass('mw-changeslist')) {
markUG();
}
});
markUG();
} else {
markUG();
}
});