跳转到内容

User:Alexander Misel/admin.js

维基百科,自由的百科全书

这是本页的一个历史版本,由Alexander Misel留言 | 贡献2017年9月3日 (日) 02:47编辑。这可能和当前版本存在着巨大的差异。

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。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;
            });
            api.get( {
                format: 'json',
                action: 'query',
                list: 'logevents',
                leprop: 'user',
                lepstart: rcstart,
                leend: rcend,
                lelimit: 500
            }).done( function ( data ) {
                $.each( data.query.logevents, function( i, item ) {
                    users_ext[i] = item.user;
                });
                        
                Array.prototype.push.apply(users, users_ext);

                // 用户去重与分割,因为一次最多只能查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+'名管理员' ); 
                    // 显示管理员数
                    $("li#t-onlineadmin a").html(wgUVS( '在线管理员', '線上管理員' ) + ':<b>('+userTotal+')</b>');
                    
                    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 = [wgUVS( '<p>当前在线的管理员有:</p>', '<p>目前線上管理員有:</p>' )];
                        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('')));
                    } else {
                        mw.notify( wgUVS( '当前没有管理员在线。', '管理員無人在線上。' ) ); // Send a plaintext notification
                    }
               });
          });
     });    
});