User:Splarka/sysopdectector.js

/* Sysop decrier/detector (rights group displayer), version [0.2.1] Originally from http://en.wikipedia.org/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: var showUserGroupSettings = { 'IP':true, 'unregistered':true, 'registered':true, 'groups': true, 'editcount':true, 'regdate':true, 'blocked':true };
 * 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.

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 ); }