User:Dabao qian/admin.js

出自維基百科,自由嘅百科全書
注意:儲存之後,你可能要兜過你嘅瀏覽器快取至睇到更改。Internet Explorer: 撳住Ctrl掣再撳重新整理掣。 Firefox: 撳住Shift掣再撳重新載入(又或者撳Ctrl-Shift-R)。 Google Chrome同埋Safari用戶就噉撳個重載掣。
/* 在线管理员列表 */

/* 原版脚本由中文维基用户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("在线管理员:<b>("+userTotal+")</b>");
                    
                    if (userTotal>0) {
                        var adminsstring = '';
                        //online.preventDefault();
                        mw.loader.using( 'oojs-ui' ).done( function () {
                            var popup = new OO.ui.PopupWidget( {
                                $content: $( '<div id=popupadmin style="margin: 0 0 15px"></div>' ),
                                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+'<br /><a href="'+mw.config.get('wgScript')+'?title=User:'+adminuser+'">'+adminuser+'</a> (<a href="'+mw.config.get('wgScript')+'?title=User_talk:'+adminuser+'">留言</a>)';
                                });
                                //console.log( adminsstring );
                                $('div#popupadmin').append(adminsstring);
                        });
                    }
                    else {
                        mw.notify( '当前没有管理员在线。' ); // Send a plaintext notification
                    }
               });
          });
     });    
});