/* Sysop decrier/detector (rights group displayer), version [0.2.1]
Originally from http://en.wiki.x.io/wiki/User:Splarka/sysopdectector.js
Notes:
* Fixed this up to use the new API fun stuffs.
* Shows all groups now
* nstab-user isn't available in all skins, all skins have at least one h1 or h2 I believe.
* heading given class="detected-userrights-heading" and text in span class="detected-userrights"
Options:
* Now supports an option system.
* By setting a datalet true it shows in the header instead of the title.
* Note, all are assumed false if omitted. All but 'groups' are assumed false if undefined.
var showUserGroupSettings = {
'IP':true,
'unregistered':true,
'registered':true,
'groups': true,
'editcount':true,
'regdate':true,
'blocked':true
};
*/
function showUserGroups() {
var url = mw.config.get( 'wgServer' )
+ mw.config.get( 'wgScriptPath' )
+ '/api.php?action=query&format=json&callback=showUserGroupsCB\
&maxage=3600&smaxage=3600&usprop=blockinfo|groups|editcount|registration\
&list=users&ususers='
+ encodeURIComponent( mw.config.get( 'wgTitle' ) );
mw.loader.load( url );
}
function showUserGroupsCB( obj ) {
var show = window.showUserGroupSettings || false;
var user = obj.query && obj.query.users;
if ( !user || !user[0] ) {
return;
}
user = user[0];
var someHeading = document.getElementsByTagName( 'h1' )[0] || document.getElementsByTagName( 'h2' )[0];
if ( !someHeading ) {
return;
}
var span = document.createElement( 'span' );
var title = 'User:' + user.name + ' ';
var text = ' ';
if ( user.invalid === '' ) {
if ( show && show.IP ) {
text += '[IP] ';
} else {
title += '[invalid or IP username] ';
}
} else if ( user.missing === '' ) {
if ( show && show.unregistered ) {
text += '[doesn\'t exist] ';
} else {
title += '[not a registered name] ';
}
} else {
if ( show && show.registered ) {
text += '[exists] ';
} else {
title += '[username registered] ';
}
if ( user.groups ) {
if ( show && show.groups || !show ) {
text += '[' + user.groups + '] ';
} else {
title += '[' + user.groups + '] ';
}
}
if ( user.editcount ) {
if ( show && show.editcount ) {
text += '[' + user.editcount + ' edits] ';
} else {
title += '[' + user.editcount + ' edits] ';
}
}
if ( user.registration ) {
if ( show && show.regdate ) {
text += '[created: ' + user.registration.split( 'T' )[0] + '] ';
} else {
title += '[created: ' + user.registration + '] ';
}
}
if ( user.blockedby ) {
if ( show && show.blocked ) {
text += '[blocked] ';
} else {
text += '[currently blocked] ';
}
}
}
span.setAttribute( 'class', 'detected-userrights' );
span.appendChild( document.createTextNode( text ) );
someHeading.appendChild( span );
someHeading.setAttribute( 'title', title );
someHeading.className += ' detected-userrights-heading';
}
if ( ( mw.config.get( 'wgNamespaceNumber' ) === 2 || mw.config.get( 'wgNamespaceNumber' ) === 3 ) &&
mw.config.get( 'wgTitle' ).indexOf( '/' ) === -1 &&
( mw.config.get( 'wgAction' ) !== 'edit' || mw.config.get( 'wgAction' ) !== 'submit' ) ) {
$( showUserGroups );
}