User:Epicgenius/sortcategories.js

/* See User:Alex 21/script-categoriessort.js, original script by User:Alex 21

The main script page is User:Epicgenius/sortcategories.js. mw.loader.using("mediawiki.util", function {	// Only run script if user is editing an article	if (!document.forms.editform || (mw.config.get("wgAction") !== "edit" && mw.config.get("wgAction") !== "submit")) {		return;	}	$(function($) { /*		if (				config.mw.wgNamespaceNumber == 1 || //talk page				config.mw.wgArticleId === 0 || // Page doesn't exist		) { return; } else (		) */		mw.loader.using( ['mediawiki.util'] ).then( function {			var portletlink = mw.util.addPortletLink('p-tb', '#', 'Sort categories');			$(portletlink).click( function(e) { e.preventDefault; // Get textbox value var wpTextbox1 = document.getElementById('wpTextbox1'); var wpTextbox1_V = wpTextbox1.value; // Categories to check var category = "[[Category:";					var categoryA = category+"A ";					var categoryAn = category+"An ";					var categoryThe = category+"The ";					var categoryEnd = "]]"; // This might match to both categories and links var categoryEponymous = category+mw.config.get("wgTitle"); var defaultSort = ""; var someTemplateEnd = "}}"; // Get the text up to the start of the categories, and then all of the text with the categories. var categoriesStart = wpTextbox1_V.indexOf(category); var categoriesEnd = wpTextbox1_V.lastIndexOf(categoryEnd); var textBeforeCategories = wpTextbox1_V.substr(0, categoriesStart).trim; var textWithCategories = wpTextbox1_V.substr(categoriesStart,categoriesEnd-categoriesStart+2).trim; var textAfterCategories = wpTextbox1_V.substr(categoriesEnd+2).trim; // Categories should be on new lines, so split by new line, sort alphabetically with a few checks, then join again with new lines. // Checks: eponymous categories are listed first; categories are sorted without preceding "The" var splitCategories = textWithCategories.split("\n"); splitCategories.sort(function(a, b) {						if (a.substr(0, categoryEponymous.length) == categoryEponymous) return -1e8;						if (b.substr(0, categoryEponymous.length) == categoryEponymous) return 1e8;						if (a.substr(0, categoryThe.length) == categoryThe) a = a.replace(categoryThe, category);						if (b.substr(0, categoryThe.length) == categoryThe) b = b.replace(categoryThe, category);						if (a.substr(0, categoryA.length) == categoryA) a = a.replace(categoryA, category);						if (b.substr(0, categoryA.length) == categoryA) b = b.replace(categoryA, category);						if (a.substr(0, categoryAn.length) == categoryAn) a = a.replace(categoryAn, category);						if (b.substr(0, categoryAn.length) == categoryAn) b = b.replace(categoryAn, category);						return a.localeCompare(b);					}); textWithCategories = splitCategories.join("\n"); if (wpTextbox1_V.indexOf(defaultSort) < 0) { textWithCategories = "\n"+textWithCategories; } else { textWithCategories = textWithCategories; }					if (wpTextbox1_V.indexOf(stubTag) < 0) { textWithCategories = textWithCategories; } else { textWithCategories = textWithCategories+"\n\n\n"; }					// Merge pre-category text back with the sorted and joined category text, place back in textbok and add summary. wpTextbox1.value = textBeforeCategories+"\n"+textWithCategories+textAfterCategories; setoptions(minor = 'true'); setreason('sorted categories alphabetically via script', 'append'); doaction('diff'); });		});	}); });