User:MusikAnimal/MoreMenu-core-sandbox.js

(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/w/index.php?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 = 	"" + " " +						" "+tabName+" " + "" + " " +					" "; html += generateMenuContent(menuList); html += " "; 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 += "" +								"" + name + "&hellip;" +									" ";					$.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 += "" + k + ""; }					});					newHtml += " ";					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 += "<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(permittedRights[i]) > -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.users[0]) {				var rights = data.query.users[0].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.pages[i].title.split('/')[0]) { case 'Wikipedia:Requests for arbitration' : if(typeof data.query.pages[i].missing === "undefined"){$("#c2-rfxs").show;} else {$("#c2-rfar").remove;} break; case 'Wikipedia:Requests for comment' : if(typeof data.query.pages[i].missing === "undefined"){$("#c2-rfxs").show;} else {$("#c2-rfc").remove;} break; case 'Wikipedia:Requests for checkuser' : if(typeof data.query.pages[i].missing === "undefined"){$("#c2-rfxs").show;} else {$("#c2-rfcu").remove;} break; case 'Wikipedia:Sockpuppet investigations' : if(typeof data.query.pages[i].missing === "undefined"){$("#c2-rfxs").show;} else {$("#c2-spi").remove;} break; }			});		}	} });