User:Dabao qian/admin.js

/* 在线管理员列表 */

/* 原版脚本由中文维基用户Alexander Misel制作，后续由逆襲的天邪鬼对其进行了修改 */

// 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("在线管理员：("+userTotal+")");                    if (userTotal>0) {                        var adminsstring = '';                        //online.preventDefault;                        mw.loader.using( 'oojs-ui' ).done( function  { var popup = new OO.ui.PopupWidget( {                               $content: $( ' ' ),                                padded: true,                                head: true,                                label: '当前在线的管理员有：',                                $container: $("#t-onlineadmin"),                                align: 'force-right',                                width: '',                                autoClose: true //popup只出现一个                            } ); $( '#t-onlineadmin' ).append( popup.$element ); popup.toggle( true ); //var uri = mw.config.get('wgServer')+mw.config.get('wgScript'); $("div.oo-ui-popupWidget").css("left","200px"); //popup偏移修正 $.each( admins, function( i, adminuser ) {                                   adminsstring=adminsstring+' '+adminuser+' (留言)';                                }); //console.log( adminsstring ); $('div#popupadmin').append(adminsstring); });                   }                    else {                        mw.notify( '当前没有管理员在线. ' ); // Send a plaintext notification                   }               }); });    });    });