User:Alexander Misel/admin.js

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google ChromeFirefoxMicrosoft EdgeSafari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。

// Create portlet link
var portletLinkOnline = mw.util.addPortletLink(
    'p-personal',
    '#',
    '在线管理员',
    't-onlineadmin',
    '查看当前在线管理员',
    '',
    '#pt-userpage'
);


var rcstart, rcend, time;
var users =[];
var admins =[];
var uniqueuser, userTotal;
var api = new mw.Api();

// Bind click handler
$( "li#t-onlineadmin a" ).click( function () {
    users = [];
    users_ext = [];
    admins = [];
    userTotal = 0;
    
    // 最近更改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|!anon',
        rclimit: 500
    }).done( function ( data ) {
        $.each( data.query.recentchanges, function( i, item ) {
            users[i] = item.user;
        });

        // 用户去重与分割,因为一次最多只能查50人
        users = $.unique(users.sort());
        var promises = [];
        var mark = function(data) {
            $.each(data.query.users, function(i, user) {
                // 找到管理员,去除adminbot
                if ($.inArray('sysop', user.groups) > -1 && $.inArray('bot', user.groups) === -1) {
                    admins[i]=user.name;
                }
            });
        };

        for (var 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.apply($, promises).done(function () {
            // 消除空值
            admins = admins.filter(function(n){return n});
            // console.log( admins );
            // 管理员数
            userTotal=admins.length;
            // mw.notify( '上线'+userTotal+'名管理员' );
            
            var userlink = function(user) {
                var user2 = user.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&lt;');
                return '<a href="/wiki/User:' + user2 + '" target="_blank">' + user2 + '</a>&nbsp;<small style="opacity:.75;">(<a href="/wiki/User talk:' + user2 + '" target="_blank">留言</a>)</small> ';
            }
            
            if (userTotal>0) {
                var adminsstring = [];
                adminsstring.push('<p style="word-break:break-all;">' + wgULS('管理员', '管理員') + ' (' + admins.length + wgULS('个在线', '個在線') + '):');
                $.each(admins, function(i, e) {
                    adminsstring.push(userlink(e));
                });
                adminsstring.push('</p>');
                mw.notify($(adminsstring.join('<br>')));
            } else {
                mw.notify( wgUVS( '当前没有管理员在线。', '管理員無人在線上。' ) ); // Send a plaintext notification
            }
        });
    });    
});