Jump to content

User:Terasail/Edit Request Tool.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Terasail (talk | contribs) at 14:19, 24 December 2020 (Created). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
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.
function execute(header, replyStr) {
	var sections = document.getElementsByClassName("mw-headline");
	pageTitle = document.getElementsByTagName("title")[0].innerText.replace(" - Wikipedia", "");
	for (j = 0; j < sections.length; j++) {
		if (sections[j].parentElement == header) {
			var api = new mw.Api();
			var editSummary = "/* " + header.children[0].id + " */ ";
			api.get( {
				action: "parse",
				page: pageTitle,
				prop: "wikitext",
				section: j + 1
			} ).done( function(data) {
				wikitext = data.parse.wikitext["*"];
				console.log(curAns.value);
				if (curAns.value) {
					var tStart = wikitext.search("{{edit");
					var preTemplate = wikitext.slice(0, tStart);
					wikitext = wikitext.slice(tStart);
					var tEnd = wikitext.search("}}");
					var editTemplate = wikitext.slice(0, tEnd);
					wikitext = wikitext.slice(tEnd);
					editTemplate = editTemplate.replace("no", "yes");
					wikitext = preTemplate + editTemplate + wikitext;
				}
				editSummary += protection + "protected edit request reply ([[User:Terasail/EditRequestCloser|Edit Request Closer]])";
				wikitext = wikitext + replyStr;
				console.log(editSummary);
				console.log(wikitext);
				api.postWithEditToken({
					action: 'edit',
					title: pageTitle,
					text: wikitext,
					section: j + 1,
					summary: editSummary
				});
				location.reload();
			} );
		}
	}
}

function dropDown(currentBox) {
	var dropMenu = new OO.ui.DropdownWidget( {
		label: "Select reply option",
		menu: {
			items: [
				new OO.ui.MenuOptionWidget( {
					id: "comment",
					label: 'Comment (No template)',
					icon: 'speechBubble'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "d",
					label: 'Done',
					icon: 'checkAll'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "pd",
					data: "2",
					label: 'Partly done:',
					icon: 'check'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "a",
					label: "Already done.",
					icon: 'clock'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "q",
					label: "Question:",
					icon: 'help'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "note",
					label: "Note:",
					icon: 'ellipsis'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "n",
					label: 'Not done:',
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "nfn",
					label: 'Not done for now:',
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "c",
					label: 'Not done for now: please establish a consensus for this alteration.',
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "rs",
					label: 'ND: please provide reliable sources that support the change you want to be made.',
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "xy",
					label: 'ND: Changes are unclear. Mention the specific changes in a "change X to Y" format.',
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "sb",
					label: "ND: please make your requested changes to the template's sandbox first.",
					icon: 'notice'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "mis",
					label: 'ND: this is the talk page for the template {{EP}}. Make your request at the article talk page.',
					icon: 'ongoingConversation'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "tp",
					label: "ND: this is the talk page for the template {{EP}}. Make your request at the article talk page. If you cannot edit the talk page..",
					icon: 'ongoingConversation'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "hr",
					label: "ND: According to the page's protection level you should be able to edit the page yourself.",
					icon: 'unLock'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "nlp",
					label: "ND: The page's protection level has changed since this request was placed. You should now be able to edit.",
					icon: 'unLock'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "doc",
					label: "ND: {{edit protected}} is usually not required for edits to the documentation or categories of templates.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "drv",
					label: "ND: requests for recreating deleted pages protected against creation should be made at WP:Deletion review.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "r",
					label: "ND: requests for increases to the page protection level should be made at Wikipedia:Requests.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "ru",
					label: "ND: requests for decreases to the page protection level should be directed to Wikipedia:Requests.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "ffu",
					label: "ND: Please make your request for a new image to be uploaded to Files For Upload.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "p",
					label: "ND: this is not the right page to request additional user rights.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "m",
					label: "ND: page move requests should be made at Wikipedia:Requested moves.",
					icon: 'newWindow'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "udp",
					label: "Undone: This request has been partially undone.",
					icon: 'undo'
				} ),
				new OO.ui.MenuOptionWidget( {
					id: "ud",
					label: "Undone: This request has been undone.",
					icon: 'undo'
				} )
			]
		}
	});
	$(currentBox.children[2].children[0]).append(dropMenu.$element);
	return dropMenu;
}

function messageInput(currentBox) {
	var inputBox = new OO.ui.MultilineTextInputWidget( {
		autosize: true,
		label: "'[[User:Terasail|<span style="color:DarkCyan; font-weight:800;">Terasail</span>]][[User talk:Terasail|<sup><span style="color:Black;">'''&#91;✉&#93;'''</span></sup>]] 14:18, 24 December 2020 (UTC)' is automatically added"
	} );
	$(currentBox.children[2].children[0]).append(inputBox.$element);
	return inputBox;
}

function done(currentBox, outputStr) {
	var dB = new OO.ui.ButtonWidget( { 
		label: 'Done',
		flags: ["primary", "progressive"]
	} );
	$(currentBox.children[1].children[0]).append(dB.$element);
	dB.setIcon("checkAll");
	dB.on("click", function() {
		var header = currentBox.parentNode.previousElementSibling;
		if (dB.getLabel() == "Submit") {
			var toFind = curSelect.getLabel();
			var items = curSelect.menu.items;
			for (i = 0; i < items.length; i++) {
				if (items[i].getLabel() === toFind) {
					outputStr += items[i].elementId + "}}";
					if (inputText.value != "") {
						outputStr += " " + inputText.value + " [[User:Terasail|<span style="color:DarkCyan; font-weight:800;">Terasail</span>]][[User talk:Terasail|<sup><span style="color:Black;">'''&#91;✉&#93;'''</span></sup>]] 14:18, 24 December 2020 (UTC)";
					}
					execute(header, outputStr);
				}
			}
		} else {
			outputStr += "d}} [[User:Terasail|<span style="color:DarkCyan; font-weight:800;">Terasail</span>]][[User talk:Terasail|<sup><span style="color:Black;">'''&#91;✉&#93;'''</span></sup>]] 14:18, 24 December 2020 (UTC)";
			execute(header, outputStr);
		}
	} );
	return dB;
}

function remove(currentBox) {
	var remove = new OO.ui.ButtonWidget( { 
		label: "Remove",
		flags: ["primary", "destructive"]
	} );
	$(currentBox.children[1].children[0]).append(remove.$element);
	remove.setIcon("trash");
	remove.on("click", function() {
		console.log("REMOVE");
	});
}

function answer(currentBox) {
	var toggleAns = new OO.ui.ToggleButtonWidget( {
        label: 'Close request',
		value: true
    } );
	toggleAns.setIcon("check");
	$(currentBox.children[1].children[0]).append(toggleAns.$element);
	toggleAns.on("click", function() {
		if (toggleAns.value == true) {
			toggleAns.setIcon("check");
		} else {
			toggleAns.setIcon("close");
		}
	} );
	return toggleAns;
}

function respond(currentBox, curDone, curAns) {
	var respondB = new OO.ui.ButtonWidget( { 
		label: 'Respond'
	} );
	respondB.setIcon("add");
	$(currentBox.children[1].children[0]).append(respondB.$element);
	respondB.on("click", function() {
		$(currentBox).append('<tr><td colspan=2 style="padding:0px 25px 10px"></td></tr>');
		curSelect = dropDown(currentBox);
		inputText = messageInput(currentBox);
		if (respondB.getIcon() == "add") {
			curDone.setLabel("Submit");
			respondB.setIcon("subtract");
		} else {
			curDone.setLabel("Done");
			respondB.setIcon("add");
			currentBox.children[2].remove();
			currentBox.children[2].remove();
		}
	});
}

var editRequestBoxes = document.getElementsByClassName("plainlinks tmbox tmbox-notice editrequest");
for (i = 0; i < editRequestBoxes.length; i++) {
	var boxType = editRequestBoxes[i].id.slice(4, 8);
	if (boxType == "semi" || boxType == "exte" || boxType == "temp" || boxType == "prot") {
		var protTemp = "\n:{{subst:";
		protection = "Fully ";
		if (boxType == "semi") {
			protTemp += "ESp|";
			protection = "Semi-";
		} else if (boxType == "exte") {
			protTemp += "EEp|";
			protection = "Extended ";
		} else if (boxType == "temp") {
			protTemp += "ETp|";
			protection = "Template ";
		} else {
			protTemp += "EP|";
			
		}
		var currentBox = editRequestBoxes[i].children[0];
		$(currentBox).append('<tr><td colspan=2 style="padding:0px 25px 10px"></td></tr>');
		var curDone = done(currentBox, protTemp);
		var curAns = answer(currentBox);
		respond(currentBox, curDone, curAns);
		remove(currentBox);
	}
}