Jump to content

User:Cobaltcigs/NavboxStuff.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Cobaltcigs (talk | contribs) at 12:18, 19 October 2019. The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
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 NavboxStuff() {
	if(wgAction=="view") {
		var getRedirectTitles = function(nav) {
			var rLinks = nav.getElementsByClassName("mw-redirect");
			if(rLinks.length == 0) return;
			var rPipe = Array.from(rLinks, r => r.title).join("|");
			var rQuery = "&redirects=" + encodeURIComponent(rPipe);
			if(navEdit = nav.getElementsByClassName("nv-edit")[0])
				navEdit.getElementsByTagName("a")[0].href += rQuery;
			if(wgNamespaceNumber == 10)
				document.getElementById("ca-edit").getElementsByTagName("a")[0].href += rQuery;
			};
		Array.from(document.getElementsByClassName("navbox")).forEach(getRedirectTitles);
		}
	if(wgAction=="edit") {
		var textbox = document.getElementById("wpTextbox1");
		if(textbox.getAttribute("readonly")) return;
		var rQuery = new URLSearchParams(location.href).get("redirects");
		if(!rQuery) return;
		var rPipe = decodeURIComponent(rQuery);
		var url = "/w/api.php?action=query&prop=revisions&rvprop=content&rvslots=main&format=json&formatversion=2&titles=" + rPipe;
		var f1 = function(r) { return r.json(); }
		var targets = { }
		var mapTarget = function(p) {
			targets[p.title] = p.revisions[0].slots.main.content.match(/(?<=\[\[)[^\[\]]+(?=\]\])/)[0]; }
		var f2 = function(r) {
			r.query.pages.forEach(mapTarget);
			replaceLinks(textbox, targets);
			}
		fetch(url).then(f1).then(f2);
		}
	}
function replaceLinks(textbox, dict) {
	var keys = Object.keys(dict);
	var t = textbox.value;
	for(var i = 0; i < keys.length; i++) {
		var k = keys[i];
		var v = dict[k];
		if(v.includes('#')) continue; 
		var p = ((FF = k[0].toUpperCase()) != (ff = k[0].toLowerCase()))? [`[${FF}${ff}]`, k.substring(1)] : ['', k];
		var q = p[0] + p[1].replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
		var r = '[\\s_]*' + q.replace(/ /g, '[\\s_]+') + '[\\s_]*';
		var a = new RegExp("(?<=\\[\\[)" + r + "(?=[\\|\\]])", "g");
		var b = v.replace(/[\s_]+/g, " ").trim();
		t = t.replace(a, b);
		}
	if(t != textbox.value) {
		textbox.value = t;
		document.getElementById("wpDiff").click();
		}
	}
NavboxStuff();