Jump to content

User:Padenton/DelsortMenu.js

From Wikipedia, the free encyclopedia
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.
//<nowiki>
// Script:         DelsortMenu.js
// Version:        1.0.0
// Author:         Padenton
// Documentation:  [[User:Padenton/DelsortMenu]]
// GitHub:         
// Prerequisites:  MediaWiki version 1.8 or higher
//                 jStorage via ResourceLoader
//                 Any modern broswer or IE8+
//				   Vector css
//
// Text available under the Creative Commons Attribution-ShareAlike License (CC BY-SA 3.0)
//

	// Modifications to add delsort by [[User:Padenton]].  Functions adapted from [[WP:FWDS]]
	function defineLink(category) {
		mw.util.addPortletLink('p-delsort', 'javascript:doDelsort("' + category + '")', category, '', 'delsort XfD into ' + category + '.');
	}

	function delsortIt() {
		x = prompt("Category: ");
		if (x != null) {
			//TODO: Add check to make sure valid category
			doDelsort(x);
		}
		else {
			alert('Delsort cancelled!');
		}
	}

	function doDelsort(cat) {
			var url = "//en.wikipedia.org/w/api.php?action=tokens&format=json&type=edit";
			var xhr = new XMLHttpRequest();
			xhr.open("GET", url); //Code now working, was set to async
			xhr.send();
			xhr.onreadystatechange = function() {
				if (xhr.readyState == 4 && xhr.status == 200) {
					var resp = JSON.parse(xhr.responseText);
					console.log("Token first: ", resp.tokens.edittoken);
					$.each(resp, function(i, v) {
						console.log(i, "=", v);
					});
					var etoken = resp.tokens.edittoken;
					console.log("The token is: ", etoken);
					if (cat != null) {
						var editData = {
							action: "edit",
							format: "json",
							summary: "Listing at [[WP:DELSORT]] under " + cat + " ([[WP:FWDS|FWDS]])",
							token: etoken,
							title: mw.config.get('wgPageName'),
							appendtext: "\{\{subst:Delsort|" + cat + "|\~\~\~\~\}\}"
						};
						$.each(editData, function(i, v) {
							console.log(i, "=", v);
						});
						$.post('//en.wikipedia.org/w/api.php', editData, function(data) {
							jQuery.each(data, function(index, value) {
								console.log("index", index, "value", value);
							});
						});
						// Add to the Delsort page 
						//First, get the content
						$.post('//en.wikipedia.org/w/api.php', {
							action: 'query',
							format: 'json',
							prop: 'revisions',
							rvprop: 'content',
							rvlimit: '1',
							titles: 'Wikipedia:WikiProject Deletion sorting/' + cat
						}, function(data) {
							$.each(data.query.pages, function(i, v) {
								window.editContent = v.revisions[0]['*'].replace('directly below this line -->', 'directly below this line -->\n\{\{' + mw.config.get('wgPageName') + '\}\}');
							});
							var editData = {
								action: "edit",
								format: "json",
								token: etoken,
								summary: "Listing [[" + mw.config.get('wgPageName') + "]] ([[WP:FWDS|FWDS]])",
								title: 'Wikipedia:WikiProject Deletion sorting/' + cat,
								text: window.editContent
							};
							$.each(editData, function(i, v) {
								console.log(i, "=", v);
							});
							$.post('//en.wikipedia.org/w/api.php', editData, function(data) {
								jQuery.each(data, function(index, value) {
									console.log("index", index, "value", value);
								});
							});
							alert('Delsort complete.');
						});
					}
				}
			}
		}
		//end functions adapted from [[WP:FWDS]]
//begin functions adapted from [[User:MusikAnimal/MoreMenu]]

(function() {
	var api = new mw.Api(),
		namespaceNumber = mw.config.get('wgNamespaceNumber'),
		canonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName'),
		isPageProtected = (!!mw.config.get('wgRestrictionEdit') && mw.config.get('wgRestrictionEdit').length) || (!!mw.config.get('wgRestrictionCreate') && mw.config.get('wgRestrictionCreate').length),
		serverName = mw.config.get('wgServerName'),
		siteName = mw.config.get('wgSiteName'),
		userGroups = mw.config.get('wgUserGroups'),
		contentLanguage = mw.config.get('wgContentLanguage'),
		noticeProject = mw.config.get('wgNoticeProject'),
		articleId = mw.config.get('wgArticleId'),
		mwDBname = mw.config.get('wgDBname'),
		pageName = mw.config.get('wgPageName'),
		userName = mw.config.get('wgRelevantUserName'),
		isUserSpace, metaUserGroups, userPermissions, currentDate = new Date();
	var escapedPageName = encodeURIComponent(pageName.replace(/[!'()*]/g, escape)),
		escapedUserName = encodeURIComponent(userName).replace(/[!'()*]/g, escape);
	$('#ca-protect,#ca-unprotect,#ca-delete,#ca-undelete').remove();
	var delsortMenuList = {
		'Delsort': {
			'Manual Entry': {
				url: "#\" onclick=\"delsortIt()"
			},
			'Africa': {
				'Africa': {
					url: "#\" onclick=\"doDelsort('Africa')"
				},
				'Egypt': {
					url: "#\" onclick=\"doDelsort('Egypt')"
				},
				'Ethiopia': {
					url: "#\" onclick=\"doDelsort('Ethiopia')"
				},
				'Kenya': {
					url: "#\" onclick=\"doDelsort('Kenya')"
				},
				'Mauritius': {
					url: "#\" onclick=\"doDelsort('Mauritius')"
				},
				'Morocco': {
					url: "#\" onclick=\"doDelsort('Morocco')"
				},
				'Nigeria': {
					url: "#\" onclick=\"doDelsort('Nigeria')"
				},
				'Somalia': {
					url: "#\" onclick=\"doDelsort('Somalia')"
				},
				'South Africa': {
					url: "#\" onclick=\"doDelsort('South Africa')"
				},
				'Zimbabwe': {
					url: "#\" onclick=\"doDelsort('Zimbabwe')"
				}
			},
			'Asia': {
				'Asia': {
					url: "#\" onclick=\"doDelsort('Asia')"
				},
				'Afghanistan': {
					url: "#\" onclick=\"doDelsort('Afghanistan')"
				},
				'Bangladesh': {
					url: "#\" onclick=\"doDelsort('Bangladesh')"
				},
				'Bahrain': {
					url: "#\" onclick=\"doDelsort('Bahrain')"
				},
				'Brunei': {
					url: "#\" onclick=\"doDelsort('Brunei')"
				},
				'Cambodia': {
					url: "#\" onclick=\"doDelsort('Cambodia')"
				},
				'China': {
					url: "#\" onclick=\"doDelsort('China')"
				},
				'Hong Kong': {
					url: "#\" onclick=\"doDelsort('Hong Kong')"
				},
				'India': {
					url: "#\" onclick=\"doDelsort('India')"
				},
				'Indonesia': {
					url: "#\" onclick=\"doDelsort('Indonesia')"
				},
				'Japan': {
					url: "#\" onclick=\"doDelsort('Japan')"
				},
				'Korea': {
					url: "#\" onclick=\"doDelsort('Korea')"
				},
				'Malaysia': {
					url: "#\" onclick=\"doDelsort('Malaysia')"
				},
				'Maldives': {
					url: "#\" onclick=\"doDelsort('Maldives')"
				},
				'Mongolia': {
					url: "#\" onclick=\"doDelsort('Mongolia')"
				},
				'Nepal': {
					url: "#\" onclick=\"doDelsort('Nepal')"
				},
				'Pakistan': {
					url: "#\" onclick=\"doDelsort('Pakistan')"
				},
				'Philippines': {
					url: "#\" onclick=\"doDelsort('Philippines')"
				},
				'Singapore': {
					url: "#\" onclick=\"doDelsort('Singapore')"
				},
				'Sri Lanka': {
					url: "#\" onclick=\"doDelsort('Sri Lanka')"
				},
				'Taiwan': {
					url: "#\" onclick=\"doDelsort('Taiwan')"
				},
				'Thailand': {
					url: "#\" onclick=\"doDelsort('Thailand')"
				},
				'Vietnam': {
					url: "#\" onclick=\"doDelsort('Vietnam')"
				}
			},
			'Central Asia': {
				'Central Asia': {
					url: "#\" onclick=\"doDelsort('Central Asia')"
				},
				'Kazakhstan': {
					url: "#\" onclick=\"doDelsort('Kazakhstan')"
				},
				'Kyrgyzstan': {
					url: "#\" onclick=\"doDelsort('Kyrgyzstan')"
				},
				'Tajikistan': {
					url: "#\" onclick=\"doDelsort('Tajikistan')"
				},
				'Turkmenistan': {
					url: "#\" onclick=\"doDelsort('Turkmenistan')"
				},
				'Uzbekistan': {
					url: "#\" onclick=\"doDelsort('Uzbekistan')"
				}
			},
			'Middle East': {
				'Middle East': {
					url: "#\" onclick=\"doDelsort('Middle East')"
				},
				'Iran': {
					url: "#\" onclick=\"doDelsort('Iran')"
				},
				'Iraq': {
					url: "#\" onclick=\"doDelsort('Iraq')"
				},
				'Israel': {
					url: "#\" onclick=\"doDelsort('Israel')"
				},
				'Lebanon': {
					url: "#\" onclick=\"doDelsort('Lebanon')"
				},
				'Palestine': {
					url: "#\" onclick=\"doDelsort('Palestine')"
				},
				'Saudi Arabia': {
					url: "#\" onclick=\"doDelsort('Saudi Arabia')"
				},
				'Syria': {
					url: "#\" onclick=\"doDelsort('Syria')"
				},
				'United Arab Emirates': {
					url: "#\" onclick=\"doDelsort('United Arab Emirates')"
				}
			},
			'Europe': {
				'Europe': {
					url: "#\" onclick=\"doDelsort('Europe')"
				},
				'Albania': {
					url: "#\" onclick=\"doDelsort('Albania')"
				},
				'Armenia': {
					url: "#\" onclick=\"doDelsort('Armenia')"
				},
				'Austria': {
					url: "#\" onclick=\"doDelsort('Austria')"
				},
				'Azerbaijan': {
					url: "#\" onclick=\"doDelsort('Azerbaijan')"
				},
				'Belarus': {
					url: "#\" onclick=\"doDelsort('Belarus')"
				},
				'Belgium': {
					url: "#\" onclick=\"doDelsort('Belgium')"
				},
				'Bosnia and Herzegovina': {
					url: "#\" onclick=\"doDelsort('Bosnia and Herzegovina')"
				},
				'Bulgaria': {
					url: "#\" onclick=\"doDelsort('Bulgaria')"
				},
				'Croatia': {
					url: "#\" onclick=\"doDelsort('Croatia')"
				},
				'Cyprus': {
					url: "#\" onclick=\"doDelsort('Cyprus')"
				},
				'Czech Republic': {
					url: "#\" onclick=\"doDelsort('Czech Republic')"
				},
				'Denmark': {
					url: "#\" onclick=\"doDelsort('Denmark')"
				},
				'Estonia': {
					url: "#\" onclick=\"doDelsort('Estonia')"
				},
				'Finland': {
					url: "#\" onclick=\"doDelsort('Finland')"
				},
				'France': {
					url: "#\" onclick=\"doDelsort('France')"
				},
				'Georgia (country)': {
					url: "#\" onclick=\"doDelsort('Georgia (country)')"
				},
				'Germany': {
					url: "#\" onclick=\"doDelsort('Germany')"
				},
				'Greece': {
					url: "#\" onclick=\"doDelsort('Greece')"
				},
				'Hungary': {
					url: "#\" onclick=\"doDelsort('Hungary')"
				},
				'Iceland': {
					url: "#\" onclick=\"doDelsort('Iceland')"
				},
				'Ireland': {
					url: "#\" onclick=\"doDelsort('Ireland')"
				},
				'Italy': {
					url: "#\" onclick=\"doDelsort('Italy')"
				},
				'Jersey': {
					url: "#\" onclick=\"doDelsort('Jersey')"
				},
				'Kosovo': {
					url: "#\" onclick=\"doDelsort('Kosovo')"
				},
				'Latvia': {
					url: "#\" onclick=\"doDelsort('Latvia')"
				},
				'Lithuania': {
					url: "#\" onclick=\"doDelsort('Lithuania')"
				},
				'Luxembourg': {
					url: "#\" onclick=\"doDelsort('Luxembourg')"
				},
				'Macedonia': {
					url: "#\" onclick=\"doDelsort('Macedonia')"
				},
				'Moldova': {
					url: "#\" onclick=\"doDelsort('Moldova')"
				},
				'Montenegro': {
					url: "#\" onclick=\"doDelsort('Montenegro')"
				},
				'Netherlands': {
					url: "#\" onclick=\"doDelsort('Netherlands')"
				},
				'Norway': {
					url: "#\" onclick=\"doDelsort('Norway')"
				},
				'Poland': {
					url: "#\" onclick=\"doDelsort('Poland')"
				},
				'Portugal': {
					url: "#\" onclick=\"doDelsort('Portugal')"
				},
				'Romania': {
					url: "#\" onclick=\"doDelsort('Romania')"
				},
				'Russia': {
					url: "#\" onclick=\"doDelsort('Russia')"
				},
				'Serbia': {
					url: "#\" onclick=\"doDelsort('Serbia')"
				},
				'Slovakia': {
					url: "#\" onclick=\"doDelsort('Slovakia')"
				},
				'Slovenia': {
					url: "#\" onclick=\"doDelsort('Slovenia')"
				},
				'Spain': {
					url: "#\" onclick=\"doDelsort('Spain')"
				},
				'Sweden': {
					url: "#\" onclick=\"doDelsort('Sweden')"
				},
				'Switzerland': {
					url: "#\" onclick=\"doDelsort('Switzerland')"
				},
				'Turkey': {
					url: "#\" onclick=\"doDelsort('Turkey')"
				},
				'Ukraine': {
					url: "#\" onclick=\"doDelsort('Ukraine')"
				},
				'Yugoslavia': {
					url: "#\" onclick=\"doDelsort('Yugoslavia')"
				}
			},
			'United Kingdom': {
				'United Kingdom': {
					url: "#\" onclick=\"doDelsort('United Kingdom')"
				},
				'England': {
					url: "#\" onclick=\"doDelsort('England')"
				},
				'Northern Ireland': {
					url: "#\" onclick=\"doDelsort('Northern Ireland')"
				},
				'Scotland': {
					url: "#\" onclick=\"doDelsort('Scotland')"
				},
				'Wales': {
					url: "#\" onclick=\"doDelsort('Wales')"
				}
			},
			'Oceania': {
				'Oceania': {
					action: "#\" onclick=\"doDelsort('Oceania')"
				},
				'Antarctica': {
					url: "#\" onclick=\"doDelsort('Antarctica')"
				},
				'Australia': {
					url: "#\" onclick=\"doDelsort('Australia')"
				},
				'New Zealand': {
					url: "#\" onclick=\"doDelsort('New Zealand')"
				}
			},
			'Canada': {
				'Canada': {
					url: "#\" onclick=\"doDelsort('Canada')"
				},
				'British Columbia': {
					url: "#\" onclick=\"doDelsort('British Columbia')"
				},
				'Manitoba': {
					url: "#\" onclick=\"doDelsort('Manitoba')"
				},
				'Nova Scotia': {
					url: "#\" onclick=\"doDelsort('Nova Scotia')"
				},
				'Ontario': {
					url: "#\" onclick=\"doDelsort('Ontario')"
				},
				'Quebec': {
					url: "#\" onclick=\"doDelsort('Quebec')"
				}
			},
			'United States A-M': {
				'United States of America': {
					url: "#\" onclick=\"doDelsort('United States of America')"
				},
				'Alabama': {
					url: "#\" onclick=\"doDelsort('Alabama')"
				},
				'Alaska': {
					url: "#\" onclick=\"doDelsort('Alaska')"
				},
				'Arkansas': {
					url: "#\" onclick=\"doDelsort('Arkansas')"
				},
				'Arizona': {
					url: "#\" onclick=\"doDelsort('Arizona')"
				},
				'California': {
					url: "#\" onclick=\"doDelsort('California')"
				},
				'Colorado': {
					url: "#\" onclick=\"doDelsort('Colorado')"
				},
				'Connecticut': {
					url: "#\" onclick=\"doDelsort('Connecticut')"
				},
				'Delaware': {
					url: "#\" onclick=\"doDelsort('Delaware')"
				},
				'Florida': {
					url: "#\" onclick=\"doDelsort('Florida')"
				},
				'Georgia (U.S. state)': {
					url: "#\" onclick=\"doDelsort('Georgia (U.S. state)')"
				},
				'Hawaii': {
					url: "#\" onclick=\"doDelsort('Hawaii')"
				},
				'Idaho': {
					url: "#\" onclick=\"doDelsort('Idaho')"
				},
				'Illinois': {
					url: "#\" onclick=\"doDelsort('Illinois')"
				},
				'Indiana': {
					url: "#\" onclick=\"doDelsort('Indiana')"
				},
				'Iowa': {
					url: "#\" onclick=\"doDelsort('Iowa')"
				},
				'Kansas': {
					url: "#\" onclick=\"doDelsort('Kansas')"
				},
				'Kentucky': {
					url: "#\" onclick=\"doDelsort('Kentucky')"
				},
				'Louisiana': {
					url: "#\" onclick=\"doDelsort('Louisiana')"
				},
				'Maine': {
					url: "#\" onclick=\"doDelsort('Maine')"
				},
				'Maryland': {
					url: "#\" onclick=\"doDelsort('Maryland')"
				},
				'Massachusetts': {
					url: "#\" onclick=\"doDelsort('Massachusetts')"
				},
				'Michigan': {
					url: "#\" onclick=\"doDelsort('Michigan')"
				},
				'Minnesota': {
					url: "#\" onclick=\"doDelsort('Minnesota')"
				},
				'Mississippi': {
					url: "#\" onclick=\"doDelsort('Mississippi')"
				},
				'Missouri': {
					url: "#\" onclick=\"doDelsort('Missouri')"
				},
				'Montana': {
					url: "#\" onclick=\"doDelsort('Montana')"
				}
			},
			'United States N-Z': {
				'United States of America': {
					url: "#\" onclick=\"doDelsort('United States of America')"
				},
				'Nebraska': {
					url: "#\" onclick=\"doDelsort('Nebraska')"
				},
				'Nevada': {
					url: "#\" onclick=\"doDelsort('Nevada')"
				},
				'New Hampshire': {
					url: "#\" onclick=\"doDelsort('New Hampshire')"
				},
				'New Jersey': {
					url: "#\" onclick=\"doDelsort('New Jersey')"
				},
				'New Mexico': {
					url: "#\" onclick=\"doDelsort('New Mexico')"
				},
				'New York': {
					url: "#\" onclick=\"doDelsort('New York')"
				},
				'North Carolina': {
					url: "#\" onclick=\"doDelsort('North Carolina')"
				},
				'North Dakota': {
					url: "#\" onclick=\"doDelsort('North Dakota')"
				},
				'Ohio': {
					url: "#\" onclick=\"doDelsort('Ohio')"
				},
				'Oklahoma': {
					url: "#\" onclick=\"doDelsort('Oklahoma')"
				},
				'Oregon': {
					url: "#\" onclick=\"doDelsort('Oregon')"
				},
				'Pennsylvania': {
					url: "#\" onclick=\"doDelsort('Pennsylvania')"
				},
				'Rhode Island': {
					url: "#\" onclick=\"doDelsort('Rhode Island')"
				},
				'South Carolina': {
					url: "#\" onclick=\"doDelsort('South Carolina')"
				},
				'South Dakota': {
					url: "#\" onclick=\"doDelsort('South Dakota')"
				},
				'Tennessee': {
					url: "#\" onclick=\"doDelsort('Tennessee')"
				},
				'Texas': {
					url: "#\" onclick=\"doDelsort('Texas')"
				},
				'Utah': {
					url: "#\" onclick=\"doDelsort('Utah')"
				},
				'Vermont': {
					url: "#\" onclick=\"doDelsort('Vermont')"
				},
				'Virginia': {
					url: "#\" onclick=\"doDelsort('Virginia')"
				},
				'Washington': {
					url: "#\" onclick=\"doDelsort('Washington')"
				},
				'Washington, D.C.': {
					url: "#\" onclick=\"doDelsort('Washington, D.C.')"
				},
				'West Virginia': {
					url: "#\" onclick=\"doDelsort('West Virginia')"
				},
				'Wisconsin': {
					url: "#\" onclick=\"doDelsort('Wisconsin')"
				},
				'Wyoming': {
					url: "#\" onclick=\"doDelsort('Wyoming')"
				}
			},
			'Latin America': {
				'Latin America': {
					url: "#\" onclick=\"doDelsort('Latin America')"
				},
				'Caribbean': {
					url: "#\" onclick=\"doDelsort('Caribbean')"
				},
				'South America': {
					url: "#\" onclick=\"doDelsort('South America')"
				},
				'Argentina': {
					url: "#\" onclick=\"doDelsort('Argentina')"
				},
				'Barbados': {
					url: "#\" onclick=\"doDelsort('Barbados')"
				},
				'Belize': {
					url: "#\" onclick=\"doDelsort('Belize')"
				},
				'Bolivia': {
					url: "#\" onclick=\"doDelsort('Bolivia')"
				},
				'Brazil': {
					url: "#\" onclick=\"doDelsort('Brazil')"
				},
				'Chile': {
					url: "#\" onclick=\"doDelsort('Chile')"
				},
				'Colombia': {
					url: "#\" onclick=\"doDelsort('Colombia')"
				},
				'Cuba': {
					url: "#\" onclick=\"doDelsort('Cuba')"
				},
				'Ecuador': {
					url: "#\" onclick=\"doDelsort('Ecuador')"
				},
				'El Salvador': {
					url: "#\" onclick=\"doDelsort('El Salvador')"
				},
				'Guatemala': {
					url: "#\" onclick=\"doDelsort('Guatemala')"
				},
				'Haiti': {
					url: "#\" onclick=\"doDelsort('Haiti')"
				},
				'Mexico': {
					url: "#\" onclick=\"doDelsort('Mexico')"
				},
				'Panama': {
					url: "#\" onclick=\"doDelsort('Panama')"
				},
				'Paraguay': {
					url: "#\" onclick=\"doDelsort('Paraguay')"
				},
				'Peru': {
					url: "#\" onclick=\"doDelsort('Peru')"
				},
				'Puerto Rico': {
					url: "#\" onclick=\"doDelsort('Puerto Rico')"
				},
				'Trinidad and Tobago': {
					url: "#\" onclick=\"doDelsort('Trinidad and Tobago')"
				},
				'Uruguay': {
					url: "#\" onclick=\"doDelsort('Uruguay')"
				},
				'Venezuela': {
					url: "#\" onclick=\"doDelsort('Venezuela')"
				}
			},
			'Arts': {
				'Arts': {
					url: "#\" onclick=\"doDelsort('Arts')"
				},
				'Food and drink': {
					url: "#\" onclick=\"doDelsort('Food and drink')"
				},
				'Wine': {
					url: "#\" onclick=\"doDelsort('Wine')"
				},
				'Language': {
					url: "#\" onclick=\"doDelsort('Language')"
				},
				'Literature': {
					url: "#\" onclick=\"doDelsort('Literature')"
				},
				'Poetry': {
					url: "#\" onclick=\"doDelsort('Poetry')"
				},
				'Albums and songs': {
					url: "#\" onclick=\"doDelsort('Albums and songs')"
				},
				'Television': {
					url: "#\" onclick=\"doDelsort('Television')"
				},
				'Music': {
					url: "#\" onclick=\"doDelsort('Music')"
				},
				'Film': {
					url: "#\" onclick=\"doDelsort('Film')"
				},
				'Radio': {
					url: "#\" onclick=\"doDelsort('Radio')"
				},
				'Video Games': {
					url: "#\" onclick=\"doDelsort('Video Games')"
				},
				'Visual arts': {
					url: "#\" onclick=\"doDelsort('Visual arts')"
				},
				'Architecture': {
					url: "#\" onclick=\"doDelsort('Architecture')"
				},
				'Fashion': {
					url: "#\" onclick=\"doDelsort('Fashion')"
				},
				'Photography': {
					url: "#\" onclick=\"doDelsort('Photography')"
				},
				'Comics and animation': {
					url: "#\" onclick=\"doDelsort('Comics and animation')"
				},
				'Anime and manga': {
					url: "#\" onclick=\"doDelsort('Anime and manga')"
				},
				'Webcomics': {
					url: "#\" onclick=\"doDelsort('Webcomics')"
				},
				'Fictional elements': {
					url: "#\" onclick=\"doDelsort('Fictional elements')"
				},
				'Science fiction': {
					url: "#\" onclick=\"doDelsort('Science fiction')"
				}
			},
			'Topical': {
				'Advertising': {
					url: "#\" onclick=\"doDelsort('Advertising')"
				},
				'Aviation': {
					url: "#\" onclick=\"doDelsort('Aviation')"
				},
				'Bibliographies': {
					url: "#\" onclick=\"doDelsort('Bibliographies')"
				},
				'Bilateral relations': {
					url: "#\" onclick=\"doDelsort('Bilateral relations')"
				},
				'Business': {
					url: "#\" onclick=\"doDelsort('Business')"
				},
				'Conservatism': {
					url: "#\" onclick=\"doDelsort('Conservatism')"
				},
				'Conspiracy theories': {
					url: "#\" onclick=\"doDelsort('Conspiracy theories')"
				},
				'Crime': {
					url: "#\" onclick=\"doDelsort('Crime')"
				},
				'Education': {
					url: "#\" onclick=\"doDelsort('Education')"
				},
				'Environment': {
					url: "#\" onclick=\"doDelsort('Environment')"
				},
				'Ethnic groups': {
					url: "#\" onclick=\"doDelsort('Ethnic groups')"
				},
				'Events': {
					url: "#\" onclick=\"doDelsort('Events')"
				},
				'Firearms': {
					url: "#\" onclick=\"doDelsort('Firearms')"
				},
				'Games': {
					url: "#\" onclick=\"doDelsort('Games')"
				},
				'Health and fitness': {
					url: "#\" onclick=\"doDelsort('Health and fitness')"
				},
				'History': {
					url: "#\" onclick=\"doDelsort('History')"
				},
				'Law': {
					url: "#\" onclick=\"doDelsort('Law')"
				},
				'Language': {
					url: "#\" onclick=\"doDelsort('Language')"
				},
				'Logic': {
					url: "#\" onclick=\"doDelsort('Logic')"
				},
				'Magic': {
					url: "#\" onclick=\"doDelsort('Magic')"
				},
				'Management': {
					url: "#\" onclick=\"doDelsort('Management')"
				},
				'Medicine': {
					url: "#\" onclick=\"doDelsort('Medicine')"
				},
				'Military': {
					url: "#\" onclick=\"doDelsort('Military')"
				},
				'News media': {
					url: "#\" onclick=\"doDelsort('News media')"
				},
				'Organisms': {
					url: "#\" onclick=\"doDelsort('Organisms')"
				},
				'Organizations': {
					url: "#\" onclick=\"doDelsort('Organizations')"
				},
				'Paranormal': {
					url: "#\" onclick=\"doDelsort('Paranormal')"
				},
				'Philosophy': {
					url: "#\" onclick=\"doDelsort('Philosophy')"
				},
				'Piracy': {
					url: "#\" onclick=\"doDelsort('Piracy')"
				},
				'Politics': {
					url: "#\" onclick=\"doDelsort('Politics')"
				},
				'Popular culture': {
					url: "#\" onclick=\"doDelsort('Popular culture')"
				},
				'Sexuality and gender': {
					url: "#\" onclick=\"doDelsort('Sexuality and gender')"
				},
				'Terrorism': {
					url: "#\" onclick=\"doDelsort('Terrorism')"
				},
				'Transportation': {
					url: "#\" onclick=\"doDelsort('Transportation')"
				}
			},
			'Science': {
				'Science': {
					url: "#\" onclick=\"doDelsort('Science')"
				},
				'Behavioural science': {
					url: "#\" onclick=\"doDelsort('Behavioural science')"
				},
				'Social science': {
					url: "#\" onclick=\"doDelsort('Social science')"
				}	
			},
			'Religion': {
				'Religion': {
					url: "#\" onclick=\"doDelsort('Religion')"
				},
				'Atheism': {
					url: "#\" onclick=\"doDelsort('Atheism')"
				},
				'Bible': {
					url: "#\" onclick=\"doDelsort('Bible')"
				},
				'Buddhism': {
					url: "#\" onclick=\"doDelsort('Buddhism')"
				},
				'Christianity': {
					url: "#\" onclick=\"doDelsort('Christianity')"
				},
				'Islam': {
					url: "#\" onclick=\"doDelsort('Islam')"
				},
				'Judaism': {
					url: "#\" onclick=\"doDelsort('Judaism')"
				},
				'Hinduism': {
					url: "#\" onclick=\"doDelsort('Hinduism')"
				},
				'Paganism': {
					url: "#\" onclick=\"doDelsort('Paganism')"
				},
				'Sikhism': {
					url: "#\" onclick=\"doDelsort('Sikhism')"
				},
				'Spirituality': {
					url: "#\" onclick=\"doDelsort('Spirituality')"
				}
			},
			'Technology': {
				'Technology': {
					url: "#\" onclick=\"doDelsort('Technology')"
				},
				'Computing': {
					url: "#\" onclick=\"doDelsort('Computing')"
				},
				'Internet': {
					url: "#\" onclick=\"doDelsort('Internet')"
				},
				'Software': {
					url: "#\" onclick=\"doDelsort('Software')"
				},
				'Websites': {
					url: "#\" onclick=\"doDelsort('Websites')"
				}
			},
			'Sports': {
				'Sports': {
					url: "#\" onclick=\"doDelsort('Sports')"
				},
				'American football': {
					url: "#\" onclick=\"doDelsort('American football')"
				},
				'Baseball': {
					url: "#\" onclick=\"doDelsort('Baseball')"
				},
				'Basketball': {
					url: "#\" onclick=\"doDelsort('Basketball')"
				},
				'Bodybuilding': {
					url: "#\" onclick=\"doDelsort('Bodybuilding')"
				},
				'Cricket': {
					url: "#\" onclick=\"doDelsort('Cricket')"
				},
				'Cycling': {
					url: "#\" onclick=\"doDelsort('Cycling')"
				},
				'Football': {
					url: "#\" onclick=\"doDelsort('Football')"
				},
				'Golf': {
					url: "#\" onclick=\"doDelsort('Golf')"
				},
				'Ice hockey': {
					url: "#\" onclick=\"doDelsort('Ice hockey')"
				},
				'Rugby union': {
					url: "#\" onclick=\"doDelsort('Rugby union')"
				},
				'Softball': {
					url: "#\" onclick=\"doDelsort('Softball')"
				},
				'Martial arts': {
					url: "#\" onclick=\"doDelsort('Martial arts')"
				},
				'Wrestling': {
					url: "#\" onclick=\"doDelsort('Wrestling')"
				},
			},
			'People': {
				'People': {
					url: "#\" onclick=\"doDelsort('People')"
				},
				'Academics and educators': {
					url: "#\" onclick=\"doDelsort('Academics and educators')"
				},
				'Actors and filmmakers': {
					url: "#\" onclick=\"doDelsort('Actors and filmmakers')"
				},
				'Authors': {
					url: "#\" onclick=\"doDelsort('Authors')"
				},
				'Bands and musicians': {
					url: "#\" onclick=\"doDelsort('Bands and musicians')"
				},
				'Businesspeople': {
					url: "#\" onclick=\"doDelsort('Businesspeople')"
				},
				'Politicians': {
					url: "#\" onclick=\"doDelsort('Politicians')"
				},
				'Sportspeople': {
					url: "#\" onclick=\"doDelsort('Sportspeople')"
				},
				'Lists of people': {
					url: "#\" onclick=\"doDelsort('Lists of people')"
				}
			},
			'Places': {
				'Shopping malls': {
					url: "#\" onclick=\"doDelsort('Shopping malls')"
				},
				'Museums and libraries': {
					url: "#\" onclick=\"doDelsort('Museums and libraries')"
				},
				'Schools': {
					url: "#\" onclick=\"doDelsort('Schools')"
				}
			},
			'Other': {
				'Disambiguations': {
					url: "#\" onclick=\"doDelsort('Disambiguations')"
				},
				'Lists': {
					url: "#\" onclick=\"doDelsort('Lists')"
				},
				'Islands': {
					url: "#\" onclick=\"doDelsort('Islands')"
				}
			}
		}
	};
	var dependencies = [];
	if (!$.jStorage) dependencies.push('jquery.jStorage');
	if (!Object.keys) dependencies.push('es5-shim');
	// initialize script
	mw.loader.using(dependencies, function() {
		var menus = [];
		if (wgPageName.indexOf('Wikipedia:Articles_for_deletion/') != -1 && wgPageName.indexOf('Wikipedia:Articles_for_deletion/Log/201') == -1) {
			menus.push(delsortMenuList);
			init(menus, function(data) {
				completePageLinks();
			});
		}
	});
	// custom callback functions for these menus
	function completePageLinks() {
		$('#c2-page-xfds').hide();
		if (mwDBname === 'enwiki') {
			apiGet({
				titles: 'Wikipedia:Articles for deletion/' + pageName + '|Wikipedia:Miscellany for deletion/' + pageName,
				prop: 'info'
			}).done(function(data) {
				for (var i in data.query.pages) {
					if (i > -1) {
						if (data.query.pages[i].title.split('/')[0] === 'Wikipedia:Miscellany for deletion') {
							$('#c2-page-xfds').show().find('a').text('MfDs').prop('href', mw.util.getUrl('Special:PrefixIndex/Wikipedia:Miscellany_for_deletion/' + pageName));
						}
						else if (data.query.pages[i].title.split('/')[0] === 'Wikipedia:Articles for deletion') {
							$('#c2-page-xfds').show().find('a').text('AfDs').prop('href', mw.util.getUrl('Special:PrefixIndex/Wikipedia:Articles_for_deletion/' + pageName));
						}
						break;
					}
				}
			});
			if (mw.user.options.get('gadget-edittop') === '1') {
				$('#c2-page-edit_intro').remove();
			}
		}
		if (mwDBname !== 'commonswiki') {
			$('#ca-move').hide();
		}
		$('#p-views ul').on('beforeTabCollapse', function() {
			if ($('#ca-history').hasClass('collapsible')) {
				$('#p-page2').find('ul').append($('#ca-history').detach());
			}
		});
	}

	// everything below is internal functions – should not need to be modified for any customization
	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 apiGet(params) {
		return api.get($.extend(params, {
			action: 'query'
		}));
	}

	function canAddRemoveGroups(groups, permissions) {
			if (permissions && permissions.indexOf('userrights') >= 0) return true;
			var ret = false;
			for (var i = 0; i < groups.length; i++) {
				if (metaUserGroups[groups[i]].addRemoveGroups) {
					ret = true;
					break;
				}
			}
			return ret;
		}
		// scope is an array, returns true if all elements in 'array' exist in scope
	function containsArray(array, index, last) {
		if (!index) {
			index = 0;
			last = 0;
			this.sort();
			array.sort();
		}
		return index === array.length || (last = this.indexOf(array[index], last)) > -1 && containsArray.call(this, array, ++index, ++last);
	}

	function generateMenuContent(tabName, menuList, userData, userPermissions) {
		var html = '';
		$.each(menuList, function(name, action) {
			if (action) {
				var newHtml = '';
				if (!action.url) {
					newHtml += '<li style="position: relative;" id="' + linkId(tabName, name) + '" 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) {
						newHtml += linkHtml(tabName, k, v, name, userData, userPermissions);
					});
					newHtml += '</ul></div></li>';
					if ($(newHtml).last().find('.submenu li').length === 0) {
						newHtml = '';
					}
				}
				else {
					newHtml += linkHtml(tabName, name, action, null, userData, userPermissions);
				}
				html += newHtml;
			}
		});
		return html;
	}

	function hasConditional(permitted, given) {
		permitted = $.makeArray(permitted);
		given = $.makeArray(given);
		if (!permitted.length) {
			return true;
		}
		else if (!given.length) {
			return false;
		}
		else {
			var valid = false;
			for (var i = 0; i < given.length; i++) {
				if ($.inArray(given[i], permitted) >= 0) {
					valid = true;
					break;
				}
			}
			return valid;
		}
	}

	function linkId(tabName, name, parent) {
		return 'c2-' + sanitize(tabName.toLowerCase()) + '-' + (parent ? sanitize(parent) + '-' : '') + sanitize(name);
	}

	function linkHtml(tabName, name, action, parent, userData, userPermissions) {
		var validations =
			/* namespace          */
			(hasConditional(action.namespaceRestrict, namespaceNumber) || !hasConditional(action.namespaceExclude, namespaceNumber)) &&
			/* existence          */
			((action.pageExists && articleId > 0) || (!action.pageExists)) &&
			/* deleted            */
			(action.pageDeleted ? articleId === 0 && mw.config.get('wgIsArticle') === false : true) &&
			/* protected          */
			(action.isProtected ? isPageProtected : true) &&
			/* database           */
			hasConditional(action.databaseRestrict, mwDBname) &&
			/* notice project     */
			hasConditional(action.noticeProjectRestrict, noticeProject) &&
			/* user's user groups */
			hasConditional(action.userGroups, userGroups) &&
			/* user's permissions */
			hasConditional(action.userPermissions, userPermissions) &&
			/* can change groups  */
			(action.userAddRemoveGroups ? canAddRemoveGroups(userGroups, userPermissions) : true);
		if (isUserSpace) {
			// FIXME: find something better than userData.invalid === '' for checking if IP
			validations &=
				/* their user groups  */
				hasConditional(action.groups, userData.groups) &&
				/* their permissions  */
				hasConditional(action.permissions, userData.rights) &&
				/* they're blocked    */
				(action.blocked !== undefined ? !!userData.blockid === action.blocked : true) &&
				/* can change groups  */
				(action.addRemoveGroups ? canAddRemoveGroups(userData.groups, userData.rights) : true) &&
				/* IP                 */
				(action.ipOnly ? userData.invalid === '' : true);
		}
		if (!!validations) {
			return '<li id=' + linkId(tabName, name, parent) + '><a href="' + action.url + '" title="' + (action.title || '') + '" ' + (action.style ? 'style="' + action.style + '"' : '') + '>' + name + '</a></li>';
		}
		else {
			return '';
		}
	}

	function sanitize(name) {
		return name.toLowerCase().replace(/ /g, '_');
	}

	function init(menus, fn) {
		var promises = new Array(3),
			cacheDate = $.jStorage.get('mmCacheDate'),
			expired = cacheDate < currentDate;
		if (isUserSpace) {
			promises[0] = apiGet({
				list: 'users|blocks',
				ususers: userName,
				bkusers: userName,
				usprop: 'blockinfo|groups|rights',
				bkprop: 'id'
			});
		}
		if (expired || !(userPermissions = $.jStorage.get('mmUserRights'))) {
			promises[1] = mw.user.getRights();
		}
		if (expired || !(metaUserGroups = $.jStorage.get('mmMetaUserGroups'))) {
			promises[2] = apiGet({
				meta: 'siteinfo',
				siprop: 'usergroups'
			});
		}
		$.when.apply(this, promises).done(function(data, userRightsData, metaData) {
			var userData;
			if (data) {
				userData = data[0].query.users[0];
				if (!userData) {
					// FIXME: add functionality to only show menu based on custom function;
					//    temporary fix so that script doesn't break on pages of users that don't exist
					isUserSpace = false;
					for (var j = 0; j < menus.length; j++) {
						if (!!menus[j].User) menus.splice(j, 1);
					}
				}
				else if (userData.invalid === '') {
					userData.groups = [];
					userData.rights = [];
					if (data[0].query.blocks.length) {
						userData.blockid = data[0].query.blocks[0].id;
					}
				}
			}
			if (userRightsData) {
				userPermissions = $.jStorage.set('mmUserRights', userRightsData);
			}
			if (metaData) {
				metaUserGroups = {};
				$.each(metaData[0].query.usergroups, function(i, el) {
					metaUserGroups[el.name] = {
						permissions: el.rights,
						addRemoveGroups: !!el.add || !!el.remove
					};
				});
				$.jStorage.set('mmMetaUserGroups', metaUserGroups);
			}
			if (expired) {
				var newDate = new Date();
				$.jStorage.set('mmCacheDate', newDate.setDate(newDate.getDate() + 7));
			}
			for (var i = 0; i < menus.length; i++) {
				var tabName = Object.keys(menus[i])[0];
				var html = '<div id="p-' + tabName.toLowerCase() + '2" class="vectorMenu" style="z-index: 100;">' + '<h3>' + '<span>' + tabName + '</span>' + '<a href="#"></a>' + '</h3>' + '<div class="menu"><ul>';
				html += generateMenuContent(tabName, menus[i][tabName], userData, userPermissions);
				html += '</ul></div></div>';
				if ($('#p-cactions')[0]) {
					$(html).insertAfter($('#p-cactions'));
				}
				else {
					$(html).insertAfter($('#p-views'));
				}
				addListeners();
			}
			if (typeof fn === 'function') fn(data, userPermissions);
		});
	}
})();
//</nowiki>