:User:MastCell/user-rights.js

/*

* User rights script

* By MastCell

* ------------------

* Adds information on user rights (sysop, checkuser, etc) to the heading on user pages.

* Heavily borrowed and lightly adapted from User:Splarka/sysopdectector.js

*/

/*

* Namespace check: Add user rights info if this is a userpage or talkpage

* If this is a user or usertalk subpage (e.g. "User:Example/subpage"), we'll leave out

* the info. We'll also leave it out if we're editing or submitting an edit.

*/

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') {

addOnloadHook(mcShowUserGroups);

}

function mcShowUserGroups() {

var url = mw.config.get('wgServer') + mw.config.get('wgScriptPath');

url += '/api.php?action=query&format=json&list=users&usprop=groups|blockinfo|editcount|registration';

url += '&callback=mcDisplayUserRightsInfo&maxage=3600&smaxage=3600&ususers=';

url += encodeURIComponent(mw.config.get('wgTitle'));

importScriptURI(url);

}

function mcDisplayUserRightsInfo(queryObj) {

// Check to make sure the query returned a user; otherwise, return

if (!queryObj['query'] || !queryObj['query']['users']) {

return;

}

var user = queryObj['query']['users'];

if (user.length === 0) {

return;

}

user = user[0];

// If the user is an IP ("invalid") or unregistered ("missing"), return

if (user['invalid'] === "" || user['missing'] === "") return;

var userRightStr = "";

// Get registration Date

if (user['registration']) {

var regDate = user['registration'].split("T")[0];

var regDateObj = new Date(regDate);

userRightStr += ("Registered " + (regDateObj.getMonth() + 1) + "/" + regDateObj.getDate() + "/" + regDateObj.getFullYear() + "; ");

}

// Get edit count

if (user['editcount']) {

userRightStr += (user['editcount'] + " edits");

}

// Get user rights

if (user['groups']) {

var numRights = 0;

var groupLength = user['groups'].length;

for (var i = 0; i < groupLength; i++) {

// We'll ignore the groups "*" and "users", since everyone belongs to them

var currentGroup = user['groups'][i];

if ((currentGroup != "*") && (currentGroup != "user")) {

if (numRights === 0) {

userRightStr += "; ";

} else {

userRightStr += ", ";

}

if (currentGroup == "sysop") {

userRightStr += "";

userRightStr += currentGroup;

userRightStr += "";

} else if (currentGroup == "bureaucrat") {

userRightStr += "";

userRightStr += currentGroup;

userRightStr += "";

} else if (currentGroup == "checkuser") {

userRightStr += "";

userRightStr += currentGroup;

userRightStr += "";

} else if (currentGroup == "oversight") {

userRightStr += "";

userRightStr += currentGroup;

userRightStr += "";

} else {

userRightStr += currentGroup;

}

numRights++;

}

}

}

// If currently blocked, mention it

if (user['blockedby']) {

var blockLogURL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/index.php?title=Special:Log/block&page=" + encodeURIComponent(mw.config.get('wgPageName'));

userRightStr += "; currently blocked";

}

// Attach the info where we want it

$('#siteSub').before("

" + userRightStr + "
");

}