User:Alex 21/script-redlinks.js

$(document).ready( function () {

// Remove redlinks if they exist upon pageload

redlinks_removeall();

});

$(function($) {

mw.loader.using( ['mediawiki.util'] ).then( function () {

var portletlink = mw.util.addPortletLink('p-tb', '#', 'Remove redlinks');

$(portletlink).click( function(e) {

e.preventDefault();

// Default parameters, and begin script on regular view of article

var loc = window.location.href;

var redlinks; var i;

// Gather all redlinks with class "new"

redlinks = [];

var a = document.getElementsByTagName('a');

for (i = 0; i < a.length; i++) {

if (a[i].getAttribute('class') == "new") {

redlinks[redlinks.length] = a[i].href.replace('https://en.wikipedia.org/w/index.php?title=',).replace('&action=edit&redlink=1',);

redlinks[redlinks.length-1] = redlinks[redlinks.length-1].replace(/_/g,' ');

redlinks[redlinks.length-1] = decodeURIComponent(redlinks[redlinks.length-1]);

}

}

// Save all redlinks

if (redlinks.length > 0) {

localStorage.redlinks = JSON.stringify(redlinks);

// If we are in the edit page, then remove redlinks automatically; if we are on the reading page, then go to the edit page

if (window.location.href.indexOf('action') >= 0) redlinks_removeall();

else {

var pageTitle;

if (window.location.href.indexOf('?title=') >= 0) {

var regex = /\?title=(.+?)&/;

var regexMatch = window.location.href.match(regex);

pageTitle = regexMatch[1];

} else {

pageTitle = window.location.href;

if (window.location.href.indexOf('#') >= 0) pageTitle = pageTitle.substr(0, pageTitle.indexOf('#'));

pageTitle = pageTitle.substr(window.location.href.indexOf('/wiki/')+6);

}

window.location.href = "https://en.wikipedia.org/wiki/"+pageTitle+"?action=edit";

}

} else {

alert('No redlinks!');

}

});

});

});

function redlinks_removeall() {

var wpTextbox1 = document.getElementById('wpTextbox1');

if(!wpTextbox1) return;

// Automatic removal of redlinks when stored.

if (localStorage.redlinks !== "" && localStorage.redlinks !== undefined) {

// Gather saved redlinks

try { var redlinks = JSON.parse(localStorage.redlinks); } catch (e) {return;}

// Regular expression to escape special characters

var totalredlinks = 0;

RegExp.quote = function(str) { return str.replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&"); };

for (i = 0; i < redlinks.length; i++) {

// Regular expression for piped links and direct links

var reglink1 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i]).replace(/\s/g, "[\\s\\_]*")+')\\s*\\|\\s*([^\\]]*)\\s*\\]\\]','gi');

var reglink2 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i]).replace(/\s/g, "[\\s\\_]*")+')\\s*\\]\\]','gi');

// Add total number of matches for both

if (wpTextbox1.value.match(reglink1) !== null) totalredlinks += wpTextbox1.value.match(reglink1).length;

if (wpTextbox1.value.match(reglink2) !== null) totalredlinks += wpTextbox1.value.match(reglink2).length; // Includes categories

// Remove category rather than simply convert it to unlinked text

if (redlinks[i].substr(0,9) == "Category:") {

var reglink3 = new RegExp('\\[\\[\\s*('+RegExp.quote(redlinks[i])+')\\s*\\]\\]\\n','gi');

wpTextbox1.value = wpTextbox1.value.replace(reglink3,"");

}

// Remove redlinks and convert to unlinked text

wpTextbox1.value = wpTextbox1.value.replace(reglink1,"$2");

wpTextbox1.value = wpTextbox1.value.replace(reglink2,"$1");

}

// Alert for summary of removed redlinks; total in edit summary

if (totalredlinks > 0) {

document.getElementById('wpSummary').value += "Removed "+totalredlinks+" redlink"+(totalredlinks==1?"":"s")+" via script.";

alert("Automatically removed "+totalredlinks+" redlink"+(totalredlinks==1?"":"s")+"!");

} else {

// Redlinks were seen in the article but none were found in the wikicode - check the nevigational boxes for these redlinks

alert('No redlinks in the article! (Check transcluded templates and the navigational boxes.)');

}

// Remove the template(s)

wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Cc]leanup-?\s*[Rr]ed\s*[Ll]inks?[^\}]*\}\}/g, "");

wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Rr]ed\s*links?[^\}]*\}\}/g, "");

wpTextbox1.value = wpTextbox1.value.replace(/\{\{[Tt]oo many red links[^\}]*\}\}/g, "");

// Clear all saved redlinks

localStorage.redlinks = '';

}

}