</a>" + "">
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.

(function(){

	var userName;

	if(wgCanonicalSpecialPageName === 'Contributions') {

		userName = encodeURIComponent(wgRelevantUserName);

	} else {

		userName = encodeURIComponent(wgTitle.split('/')[0].replace(/ /g,'_'));

	}

	userName = userName.replace(/\'/g,"%27");

	var admin = wgUserGroups.indexOf('sysop') > -1;

	

	if(wgNamespaceNumber === 2 || wgNamespaceNumber === 3 || wgCanonicalSpecialPageName == 'Contributions') addUserMenu(userName);

	if(wgNamespaceNumber >= 0) addPageMenu();

	

	addListeners();

	

	function addUserMenu(userName) {

		menuList = {

			'User logs' : {

				'All logs' : {

					url : wgScript+'?title=Special:Log&action=view&user='+userName

				},

				'Block log' : {

					url : wgScript+'?title=Special:Log&action=view&type=block&user='+userName,

					rights : 'sysop'

				},

				'Deletion log' : {

					url : wgScript+'?title=Special:Log&action=view&type=delete&user='+userName,

					rights : 'sysop'

				},

				'Filter log' : {

					url : wgScript+'?title=Special:AbuseLog&wpSearchUser='+userName

				},

				'Move log' : {

					url : wgScript+'?title=Special:Log&action=view&type=move&user='+userName,

					rights : 'confirmed','autoconfirmed'

				},

				'Patrol log' : {

					url : wgScript+'?title=Special:Log&action=view&type=patrol&user='+userName,

					rights : 'confirmed','autoconfirmed'

				},

				'Protection log' : {

					url : wgScript+'?title=Special:Log&action=view&type=protect&user='+userName,

					rights : 'sysop'

				},

				'Review log' : {

					url : wgScript+'?title=Special:Log&action=view&type=review&user='+userName,

					rights : 'reviewer','sysop'

				},

				'Thanks log' : {

					url : wgScript+'?title=Special:Log&action=view&type=thanks&user='+userName,

					rights : 'user'

				},

				'Upload log' : {

					url : wgScript+'?title=Special:Log&action=view&type=upload&user='+userName,

					rights : 'confirmed','autoconfirmed'

				},

				'User creation log' : {

					url : wgScript+'?title=Special:Log&action=view&type=newusers&user='+userName,

					rights : 'accountcreator','sysop'

				},

				'User rights log' : {

					url : wgScript+'?title=Special:Log&action=view&type=rights&user='+userName,

					rights : 'epcoordinator','sysop'

				}

			},

			'RfXs' : {

				'RfAs' : {

					url : wgScript+'?title=Special:PrefixIndex/Wikipedia:Requests_for_adminship/'+userName+'&action=view',

					title : 'Requests for Adminship'

				},

				'RfBs' : {

					url : wgScript+'?title=Special:PrefixIndex/Wikipedia:Requests_for_bureaucratship/'+userName+'&action=view',

					title : 'Requests for Bureaucratship'

				},

				'RfAr' : {

					url : wgScript+'?title=Wikipedia:Requests_for_arbitration/'+userName+'&action=view',

					title : 'Requests for Arbitration'

				},

				'RfC' : {

					url : wgScript+'?title=Wikipedia:Requests_for_comment/'+userName+'&action=view',

					title : 'Requests for Comment'

				},

				'RfCU' : {

					url : wgScript+'?title=Wikipedia:Requests_for_checkuser/Case/'+userName+'&action=view',

					title : 'Request for Checkuser'

				},

				'SPI' : {

					url : wgScript+'?title=Wikipedia:Sockpuppet_investigations/'+userName+'&action=view',

					title : 'Sockpuppet investigations (as the sockmaster)'

				}

			},

			'Blocks' : {

				'Block user' : {

					url : wgScript+'?title=Special:Block/'+userName+'&action=view',

					userRights : 'sysop'

				},

				'Unblock user' : {

					url : wgScript+'?title=Special:Unblock/'+userName,

					userRights : 'sysop'

				},

				'View block' : {

					url : wgScript+'?title=Special:BlockList&action=view&ip='+userName

				},

				'View block log' : {

					url : wgScript+'?title=Special:Log&action=view&type=block&page=User:'+userName

				}

			},

			'Analysis' : {

				'Analysis – Cyberpower678' : {

					url : '//tools.wmflabs.org/supercount/index.php?project='+wgServerName+'&user='+userName,

					title : 'Cyberpower678s User Analysis Tool'

				},

				'Analysis – WikiChecker' : {

					url : 'http://en.wikichecker.com/user/?l=all&t='+userName

				},

				'Analysis – X!' : {

					url : '//tools.wmflabs.org/xtools/pcount/?user='+userName+'&project='+wgServerName

				},

				'Edit summary usage' : {

					url : '//tools.wmflabs.org/xtools/editsummary/index.php?lang=en&wiki=wikipedia&name='+userName

				},

				'Edit summary search' : {

					url : '//tools.wmflabs.org/sigma/summary.py?name='+userName

				},

				'Articles created' : {

					url : '//tools.wmflabs.org/sigma/created.py?name='+userName+'&server='+wgDBname+'&ns=,,&redirects=none',

					rights : 'user'

				},

				'Global contributions' : {

					url : '//tools.wmflabs.org/guc/?user='+userName+'&blocks=true'

				},

				'SUL' : {

					url : wgScript+'?title=Special:CentralAuth/'+userName

				}

			},

			'IP lookup' : {

				'WHOIS' : {

					url : 'http://whois.domaintools.com/'+userName,

					ipOnly : true

				},

				'rDNS' : {

					url : 'https://www.robtex.com/ip/'+userName+'.html',

					ipOnly : true

				},

				'Traceroute' : {

					url : 'http://www.domaintools.com/research/traceroute/?query='+userName,

					ipOnly : true

				},

				'Geolocate' : {

					url : 'http://whatismyipaddress.com/ip/'+userName,

					ipOnly : true

				},

				'Tor check' : {

					url : 'https://toolserver.org/~overlordq/scripts/checktor.fcgi?ip='+userName,

					ipOnly : true

				}

			},

			'Contributions' : {

				url : wgScript+'?title=Special:Contributions/'+userName

			},

			'Deleted contributions' : {

				url : wgScript+'?title=Special:DeletedContributions/'+userName,

				userRights : 'sysop'

			},

			'User subpages' : {

				url : wgScript+'?title=Special:PrefixIndex/User:'+userName,

				rights : 'user'

			},

			'Email user' : {

				url : wgScript+'?title=Special:EmailUser/'+userName,

				rights : 'user'

			},

			'User groups' : {

				url : wgScript+'?title=Special:ListUsers&limit=1&username='+userName,

				rights : 'user'

			},

			'User thanks received' : {

				url : wgScript+'?title=Special:Log&type=thanks&user=&page=User:'+userName,

				rights : 'user'

			},

			'User rights changes' : {

				url : wgScript+'?title=Special:Log&type=rights&user=&page=User:'+userName,

				rights : 'user'

			},

			'Change rights' : {

				url : wgScript+'?title=Special:UserRights&user=User:'+userName,

				rights : 'user'],

				userRights : 'sysop','epcoordinator'

			}

		};

	

		addTab('User',menuList);

		

		getUserInfo(menuList);

	}

	

	function addPageMenu() {

		var pageName = encodeURIComponent(mw.config.get('wgPageName')).replace(/[!'()*]/g, escape);

		

		menuList = {

			'Page logs' : {

				'All logs' : {

					url : wgScript+'?title=Special:Log&action=view&page='+pageName

				},

				'Deletion log' : {

					url : wgScript+'?title=Special:Log&action=view&type=delete&page='+pageName

				},

				'Move log' : {

					url : wgScript+'?title=Special:Log&action=view&type=move&page='+pageName

				},

				'Patrol log' : {

					url : wgScript+'?title=Special:Log&action=view&type=patrol&page='+pageName

				},

				'Protection log' : {

					url : wgScript+'?title=Special:Log&action=view&type=protect&page='+pageName

				}

			},

			'Anaylsis' : {

				'Basic statistics' : {

					url : 'https://en.wikipedia.org/?title='+pageName+'&action=info',

					pageExists : true

				},

				'Contributor analysis' : {

					url : 'http://en.wikichecker.com/article/?a='+pageName,

					pageExists : true

				},

				'Search revision history' : {

					url : 'http://wikipedia.ramselehof.de/wikiblame.php?lang=en&article='+pageName,

					pageExists : true

				},

				'Search by contributor' : {

					url : 'https://tools.wmflabs.org/usersearch/index.html?page='+pageName,

					pageExists : true

				},

				'Traffic report' : {

					url : 'http://stats.grok.se/en/latest/'+pageName,

					pageExists : true

				}

			},

			'Tools' : {

				'Disambiguate links' : {

					url : 'http://dispenser.homenet.org/~dispenser/cgi-bin/dablinks.py?page='+pageName+'&lang='+wgPageContentLanguage,

					pageExists : true

				},

				'Check external links' : {

					url : 'http://dispenser.homenet.org/~dispenser/cgi-bin/webchecklinks.py?page='+pageName,

					pageExists : true

				},

				'Copyright vio detector' : {

					url : 'https://tools.wmflabs.org/copyvios?lang='+wgPageContentLanguage+'&project='+wgNoticeProject+'&title='+pageName+'&oldid=&action=search&use_engine=1&use_links=1',

					pageExists : true

				},

				'Peer reviewer' : {

					url : 'http://dispenser.homenet.org/~dispenser/view/Peer_reviewer#page:'+pageName,

					pageExists: true,

					databaseRestrict : 'enwiki'],

					namespaceRestrict : 0,2,118

				},

				'Add titles to bare refs' : {

					url : 'http://dispenser.homenet.org/~dispenser/cgi-bin/reflinks.py?lang=en&page='+pageName+'&autoclick=wpDiff',

					pageExists: true,

					databaseRestrict : 'enwiki'],

					namespaceRestrict : 0,2,118

				}

			},

			'Subpages' : {

				url: wgScript+'?title=Special:PrefixIndex/'+pageName+'&action=view',

			},

			'Move page' : {

				url : wgScript+'?title=Special:MovePage/'+pageName+'&action=view',

				pageExists : true

			},

			'Merge page' : {

				url : wgScript+'?title=Special:MergeHistory&target='+pageName,

				userRights : 'sysop'

			},

			'Protect page' : {

				url : wgScript+'?title='+pageName+'&action=protect',

				userRights : 'sysop'

			},

			'Delete page' : {

				url : wgScript+'?title='+pageName+'&action=delete',

				userRights : 'sysop'],

				pageExists : true

			},

			'Latest diff' : {

				url : wgScript+'?title='+pageName+'&action=view&diff='+wgCurRevisionId,

				pageExists : true

			},

			'Edit into' : {

				url : wgScript+'?title='+pageName+'&action=edit&section=0',

				namespaceRestrict : 0,1,2,3,4,5,118],

				pageExists : true

			},

			'Purge cache' : {

				url : wgScript+'?title='+pageName+'&action=purge',

				pageExists : true

			}

		};

	

		addTab('Page',menuList);

	}

	

	function sanitize(name) {

		return name.toLowerCase().replace(/ /g,'_');

	}

	

	function addListeners() {

		$(".c2-hover-menu").each(function() {

			$(this).hover(function() {

				$el = $(this).find(".submenu");

				$el.css({

					left : $(this).outerWidth(),

					top : '-1px',

					'border-top-width' : 1

				});

				$el.show();

			},function() {

				$(this).find(".submenu").hide();

			});

		});

	}

	

	function addTab(tabName,menuList) {

		var html = 	"<div id='p-"+tabName.toLowerCase()+"2' class='vectorMenu' style='z-index:500'>" +

					"<h3>" +

						"<span>"+tabName+"</span>" +

						"<a href='#'></a>" +

					"</h3>" +

					"<div class='menu'><ul>";

		html += generateMenuContent(menuList);

		html += "</ul></div></div>";

		

		if(skin === "vector") $(html).insertAfter($("#p-cactions"));

	}

	

	function generateMenuContent(menuList) {

		var html = "";

		$.each(menuList, function(name,action) {

			if(action) {

				var newHtml = "";

				if(Object.keys(action).indexOf('url') < 0) {

					newHtml += "<li style='position:relative' id='c2-" + name.toLowerCase().replace(/ /g,'_') +"' class='c2-hover-menu'>" +

								"<a style='font-weight:bold'>" + name + "&hellip;</a>" +

									"<div class='submenu menu' style='display:none; position:absolute'><ul>";

					$.each(action, function(k,v) {

						var namespaceConflict = (v.namespaceRestrict && v.namespaceRestrict.length && v.namespaceRestrict.indexOf(wgNamespaceNumber) < 0)

							|| (v.namespaceExclude && v.namespaceExclude.length && v.namespaceExclude.indexOf(wgNamespaceNumber) > -1);

						var existenceConditional = (v.pageExists && wgArticleId > 0) || (!v.pageExists);

						var isSupportedDatabase = v.databaseRestrict ? v.databaseRestrict.indexOf(wgDBname) !== -1 : true;

						if(!namespaceConflict && !rightsSkip(v.userRights,wgUserGroups) && existenceConditional && isSupportedDatabase) {

							newHtml += "<li id='c2-" + sanitize(k) +"'><a href='" + v.url + "' title='" + (v.title || '') + "'>" + k + "</a></li>";

						}

					});

					newHtml += "</ul></div></li>";

					if($(newHtml).last().find(".submenu li").length === 0) newHtml = "";

				} else {

					var namespaceConflict = (action.namespaceRestrict && action.namespaceRestrict.length && action.namespaceRestrict.indexOf(wgNamespaceNumber) < 0)

						|| (action.namespaceExclude && action.namespaceExclude.length && action.namespaceExclude.indexOf(wgNamespaceNumber) > -1);

					var existenceConditional = (action.pageExists && wgArticleId > 0) || (!action.pageExists);

					if(!namespaceConflict && !rightsSkip(action.userRights,wgUserGroups) && existenceConditional) {

						newHtml += "<li id='c2-" + sanitize(name) +"'><a href='" + action.url + "'>" + name + "</a></li>";

					}

				}

				html += newHtml;

			}

		});

		return html;

	}

	

	function rightsSkip(permittedRights,rights) {

		if(!rights.length) return false;

		var skip = (permittedRights && permittedRights.length);

		if(permittedRights && permittedRights.length) {

			for (var i = 0; i < permittedRights.length; i++) {

			    if (rights.indexOf(permittedRightsi]) > -1) {

			        skip = false;

			        break;

			    }

			}

		}

		return skip;

	}

	

	var api = new mw.Api();

	

	function apiGet(params) {

		debugger;

		return api.get(

			$.extend(params, {

				action: 'query',

				list: 'users'

			})

		);

	}

	

	function getUserInfo(menuList) {

		apiGet({

			list: 'users|blocks',

			ususers: userName,

			bkusers: userName,

			usprop: 'blockinfo|groups',

			bkprop: 'id'

		}).done(function (data) {

			if(data.query.blocks && data.query.blocks.length) {

				$("#c2-block_user").remove();

				$("#c2-view_block").find("a").css('color','#EE1111');

			} else {

				$("#c2-unblock_user").remove();

				$("#c2-view_block").remove();

			}

			

			if(data.query && data.query.users0]) {

				var rights = data.query.users0].groups;



				// if((rights && rights.indexOf("sysop") < 0) || !rights) {

					$.each(menuList, function(name,action) {

						if(action) {

							if(Object.keys(action).indexOf('url') < 0) {

								$.each(action, function(k,v) {

									if((rights && rightsSkip(v.rights,rights)) || (!rights && v.rights) || (rights && v.ipOnly)) {

										$("#c2-"+sanitize(k)).remove();

										$("#c2-"+sanitize(k)).remove(); // FIXME: second time's the charm?

									}

								});

								if($("#c2-"+sanitize(name)).find("li").length === 0) $("#c2-"+sanitize(name)).remove();

							} else {

								if((rights && rightsSkip(action.rights,rights)) || (!rights && action.rights) || (rights && action.ipOnly)) {

									$("#c2-"+sanitize(name)).remove();

								}

							}

						}

					});

				// }

			}

		});

		// $.get(wgScriptPath+'/api.php?format=json&action=query&list=users|blocks&ususers='+userName+'&bkusers='+userName+'&usprop=blockinfo|groups&bkprop=id', function(data) {

			

		// });

		

		if(!admin) $("#c2-blocks").hide();

		$.get(wgScriptPath+'/api.php?format=json&action=query&list=logevents&letype=block&letitle=User:'+userName+'&lelimit=1',function(data) {

			if(data.query.logevents.length === 0) {

				$("#c2-view_block_log").remove();

			} else {

				$("#c2-blocks").show();

			}

		});

		

		$("#c2-rfxs").hide();

		if(wgDBname === "enwiki") {

			$.get(wgScriptPath+'/api.php?format=json&action=query&list=allpages&apprefix=Requests_for_adminship%2F'+userName+'&apnamespace=4&aplimit=10', function(data) {

				if(data.query && data.query.allpages.length) {

					$("#c2-rfxs").show();

				} else {

					$("#c2-rfas").remove();

				}

			});

			$.get(wgScriptPath+'/api.php?format=json&action=query&list=allpages&apprefix=Requests_for_bureaucratship%2F'+userName+'&apnamespace=4&aplimit=10', function(data) {

				if(data.query && data.query.allpages.length) {

					$("#c2-rfxs").show();

				} else {

					$("#c2-rfbs").remove();

				}

			});

			$.get(wgScriptPath+'/api.php?format=json&action=query&titles=Wikipedia:Requests_for_adminship/'+userName+'|Wikipedia:Requests_for_bureaucratship/'+userName+'|Wikipedia:Requests_for_arbitration/'+userName+'|Wikipedia:Requests_for_comment/'+userName+'|Wikipedia:Requests_for_checkuser/Case/'+userName+'|Wikipedia:Sockpuppet_investigations/'+userName+'&letype=block&letitle=User:'+userName+'&prop=info',function(data) {

				for(var i in data.query.pages) switch(data.query.pagesi].title.split('/')[0]) {

					case 'Wikipedia:Requests for arbitration' : if(typeof data.query.pagesi].missing === "undefined"){$("#c2-rfxs").show();} else {$("#c2-rfar").remove();} break;

					case 'Wikipedia:Requests for comment' : if(typeof data.query.pagesi].missing === "undefined"){$("#c2-rfxs").show();} else {$("#c2-rfc").remove();} break;

					case 'Wikipedia:Requests for checkuser' : if(typeof data.query.pagesi].missing === "undefined"){$("#c2-rfxs").show();} else {$("#c2-rfcu").remove();} break;

					case 'Wikipedia:Sockpuppet investigations' : if(typeof data.query.pagesi].missing === "undefined"){$("#c2-rfxs").show();} else {$("#c2-spi").remove();} break;

				}

			});

		}

	}

})();