跳转到内容

User:Alexander Misel/admin.js

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

这是本页的一个历史版本,由Alexander Misel留言 | 贡献2017年3月5日 (日) 14:38 (更新,感谢逆襲的天邪鬼提供的修改)编辑。这可能和当前版本存在着巨大的差异。

注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。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>');
                    
                    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: wgUVS( '当前在线的管理员有:', '目前線上管理員有:' ),
                                $container: $("#t-onlineadmin"),
                                align: '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( wgUVS( '当前没有管理员在线。', '管理員無人在線上。' ) ); // Send a plaintext notification
                    }
               });
          });
     });    
});