User:MastCell/user-rights.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
/* 
 * 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 += "<span style='text-shadow: green 0px 0px 10px'>";
                                        userRightStr += currentGroup;
                                        userRightStr += "</span>";
                                } else if (currentGroup == "bureaucrat") {
                                        userRightStr += "<span style='text-shadow: yellow 0px 0px 10px'>";
                                        userRightStr += currentGroup;
                                        userRightStr += "</span>";
                                } else if (currentGroup == "checkuser") {
                                        userRightStr += "<span style='text-shadow: red 0px 0px 10px'>";
                                        userRightStr += currentGroup;
                                        userRightStr += "</span>";
                                } else if (currentGroup == "oversight") {
                                        userRightStr += "<span style='text-shadow: cyan 0px 0px 10px'>";
                                        userRightStr += currentGroup;
                                        userRightStr += "</span>";
                                } 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 += "; <a href='" + blockLogURL + "'>currently blocked</a>";
	}
	
	// Attach the info where we want it
	$('#siteSub').before("<div id='mcUserRights' style='font-size: smaller'>" + userRightStr + "</div>");
}