User:Guywan/Scripts/ListAlpha.js

$(function {	if(mw.config.get("wgAction") != "view")	{		return;	}	var version = "02.06.19";	var text;	// Store line and section numbers.	var lineList = ;	$("#p-cactions ul").append("List Alphabetizer");	$("#ca-listalpha").on("click", function {		mw.notify("Starting alphabetization.", "info"); text = getWikitext(mw.config.get("wgPageName"), "?action=raw"); // Split the page into lines of text. text = text.split("\n"); // Run a regex over each line. var listFound = false, curSection = 0; for(var i = 0; i < text.length; i++) {			if(text[i].match(/^==+.+==+$/g)) {				// We've reached a new section. curSection++; lineList.push([i]); }			else if(text[i].match(/^\*.*/g)) {				lineList[curSection].push(i); if(!listFound) {					listFound = true; }			}		}		// If no list was found, abort. if(!listFound) {			mw.notify("No lists to alphabetize!", "warn"); return; }		mw.notify("Completed. Showing preview."); var pext = ""; for(var y = 0; y < lineList.length; y++) {			if(lineList[y].length > 1) {				pext += text[lineList[0][0]] + " Remove all items in section\n\n"; for(var x = 1; x < lineList[y].length; x++) {					pext += text[lineList[y][x]] + "Remove item\n"; }			}		}		// Setup the preview. api = new mw.Api; /*		 * Very WET. Suggestions are welcome. */		api.parse(pext) .fail(function(result) { mw.notify("Failed to parse preview: " + result, "error"); } ) .done(function(data)		{			// ==================			// PRE-PREVIEW (^_^.)			// ==================			$("#mw-content-text").html(data).prepend(" " + " The following is an overview of the items that will be alphabetized " + " Remove items that you do not wish to be alphabetized " + "Proceed " + "Cancel ");			$("#listalpha-submit").on("click", function {				// Put it back together! text = text.join("\n"); api.parse(text) .fail(function(result) { mw.notify("Failed to parse preview: " + result, "error"); } ) .done(function(data)				{					// ===============					// PREVIEW \(^o^)/					// ===============					$("#mw-content-text").html(data).prepend(" " + " This is a preview of the changes you will make. " + "Submit " + "Cancel ");					$("#listalpha-submit").on("click", function {						// Post edited text. api.post(						{							"action" : "edit",							"title" : mw.config.get("wgPageName"),							"text" : text,							"summary" : "Alphabetizing lists with ListAlpha V" + version + ".",							"token" : mw.user.tokens.get("csrtToken")						}) .fail(function(result) { mw.notify("Failed to post: " + result, "error"); }) .done(function						{							mw.notify("Success! Refreshing.", "info");							window.location.href = mw.util.getUrl(mw.config.get("wgPageName"));						}); });					$("#listalpha-cancel").on("click", function {						window.location.href = mw.util.getUrl(mw.config.get("wgPageName")); });				});			});			$("#listalpha-cancel").on("click", function {				window.location.href = mw.util.getUrl(mw.config.get("wgPageName")); });		});	});	function getWikitext(page, params)	{		// Get page wikitext.		return $.ajax( {			url : mw.util.getUrl(page) + params, data : "text", async : false }).responseText;	} });