MediaWiki:Gadget-usergroup.js

你好,领航员,欢迎来到地球联合百科!

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
/* <pre> */
/**
 * -------------------------------------------------------------------------
 * !!! DON'T MODIFY THIS PAGE MANUALLY, YOUR CHANGES WILL BE OVERWRITTEN !!!
 * -------------------------------------------------------------------------
 * This script is carried from MoegirlPedia(https://zh.moegirl.org.cn) by CC BY-NC-SA 3.0 License.
 * 本脚本来自萌娘百科 (https://zh.moegirl.org.cn) ,依CC BY-NC-SA 3.0协议引入本网站。
 * -------------------------------------------------------------------------
 */

"use strict";
$(function () {
    var groups = {
        bureaucrat: { list: [], class: "user-rights-bureaucrat" },
        suppress: { list: [], class: "user-rights-suppress" },
        sysop: { list: [], class: "user-rights-sysop" },
        'interface-admin': { list: [], class: "user-rights-interface-admin" },
        patroller: { list: [], class: "user-rights-patroller" },
        autoconfirmed: { list: [], class: "user-rights-autoconfirmed" },
        bot: { list: [], class: "user-rights-bot" },
    };
    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);
            var decode1 = function (username) {
                return decodeURIComponent((function (u) {
                    try {
                        return decodeURIComponent(u.replace('%E7%94%A8%E6%88%B7:', '').replace(/_/g, ' ')).replace('index.php?title=', '').replace('&action=edit&redlink=1', '');
                    } catch (e) {
                        return u.replace('%E7%94%A8%E6%88%B7:', '').replace(/_/g, ' ').replace(/%(?!\d+)/g, '').replace('index.php?title=', '').replace('&action=edit&redlink=1', '');
                    }
                })(username))
            };
            if (username) {
                return decode1(username);
            }
            username = url.match(/.*%E7%94%A8%E6%88%B7:(.+)/);
            var decode2 = function (username) {
                return decodeURIComponent((function (u) {
                    try {
                        return decodeURIComponent(u.replace(/_/g, ' ').replace('index.php?title=', '').replace('&action=edit&redlink=1', ''));
                    } catch (e) {
                        return u.replace(/_/g, ' ').replace(/%(?!\d+)/g, '%25').replace('index.php?title=', '').replace('&action=edit&redlink=1', '');
                    }
                })(username))
            };
            if (username) {
                return decode2(username[1]);
            }
            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.indexOf(username) > -1) {
                                $(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);
        }
    };
    mw.hook('wikipage.content').add(function (e) {
        if (e.attr('id') === 'mw-content-text') {
            markUG();
            return;
        }
        if (e.hasClass('mw-changeslist')) markUG();
    });
});