User:MusikAnimal/MoreMenu-core-sandbox.js
Appearance
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:MusikAnimal/MoreMenu-core-sandbox. |
(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§ion=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 + "…</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(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;
}
});
}
}
})();