Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
var remSpamSummary = {
        'bs' :  'Uklonjen vanjski link: __LINK__ -- po osnovi __REPORT__.',
        'ca' :  'Llevant l\'enllaç extern: __LINK__ -- per __REPORT__.',
        'cs' :  'Odstranění externího odkazu __LINK__ -- na základě __REPORT__.',
        'da' :  'Fjerner ekstern henvisning __LINK__ jf. __REPORT__.',
        'de' :  'Externer Link __LINK_ gemäß __REPORT__ entfernt.',
        'el' :  'Αφαίρεση εξ. συνδ.: __LINK__ -- κατά το __REPORT__.',
        'en' :  'Removing external link: __LINK__ -- per __REPORT__.',
        'es' :  'Eliminando enlace externo __LINK__ por __REPORT__.',
        'eu' :  '__LINK__ kanpo lotura kendu da arrazoi honegatik: __REPORT__.',
        'fa' :  'حذف پیوند به بیرون: __LINK__ بر طبق __REPORT__.',
        'fr' :  'Lien externe __LINK__ enlevé par __REPORT__.',
        'fy' :  'Keppeling om utens __LINK__ fuorthelle oerienkomstich __REPORT__.',
        'he' :  'מסיר קישור חיצוני: __LINK__ -- לפי __REPORT__.',
        'id' :  'Membuang pranala luar: __LINK__ -- per __REPORT__.',
        'ja' :  '不適切な外部リンクの除去: __LINK__ (関連ページ: __REPORT__)',
        'ms' :  'Mengeluarkan pautan luar: __LINK__ -- per __REPORT__.',
        'nb' :  'Fjerner ekstern lenke __LINK__ per __REPORT__.',
        'nl' :  'Link naar __LINK__ verwijderd per __REPORT__.',
        'nn' :  'Fjernar utlenkja __LINK__ per __REPORT__.',
        'no' :  'Fjerner ekstern lenke __LINK__ per __REPORT__.',
        'pt' :  'Removendo ligação externa __LINK__ por __REPORT__.',
        'ru' :  'Удалена внешняя ссылка __LINK__ согласно __REPORT__.',
        'sk' :  'Odstránenie externého odkazu __LINK__ -- na základe __REPORT__.',
        'uk' :  'Вилучена зовнішня посилання __LINK__ згідно __REPORT__.'
    	};

if(wgCanonicalNamespace == "Special" && wgCanonicalSpecialPageName == "Linksearch") {
    addOnloadHook(function() {
        mw.util.addPortletLink('p-cactions', "javascript:rem_spam()", "Remove external links", 'ca-remspam', 'Alter all the links on this page to automatically remove the given external link from the linked page.');
    });
}

if(wgAction == 'edit' && location.href.indexOf('remspam=') != -1) {
    addOnloadHook(function() {
        var tag = query_get('remspam');
        var box = document.getElementById('wpTextbox1');
        var txt = box.value;
        var reg = tag.replace('http://', '').replace(/\./g, '\\.').replace(/\*\\?\./g, '(?:.*?\\.)?');
        var newtext = ''+txt;
        if(!query_get('options') || (',' + query_get('options') + ',').indexOf(',lines,') != -1) newtext = newtext.replace(new RegExp('^\\s*\\*.*?\\[?https?\\://'+reg+'/?.+?(?:\\s+(.+?)\\]|.*?)\n', 'igm'), '');
        if(!query_get('options') || (',' + query_get('options') + ',').indexOf(',citeweb,') != -1) newtext = newtext.replace(new RegExp('(?:<ref(?:\\s*name=["\'].*?["\'])?>\\s*)?\\{\\{\\s*cite[_ ]web\\s*\\|(?:.*?\\|)*\\s*url\\s*=\\s*https?\\://'+reg+'/?.*?\\s*(?:\\|.*?)?\\}\\}(?:\\s*<\/ref>)?', 'ig'), '');
        if(!query_get('options') || (',' + query_get('options') + ',').indexOf(',inline,') != -1) newtext = newtext.replace(new RegExp('(?:<ref(?:\\s*name=["\'].*?["\'])?>\\s*)?\\[?https?\\://'+reg+'/?.+?(?:\\s+(.+?)\\]|(\\s))(?:\\s*<\/ref>)?', 'ig'), '$1');
        box.value = newtext;
        
        if (query_get('usesummary')) {
            summary = query_get('usesummary').replace(/__LINK__/g, tag);
        } else if (query_get('remspam') && query_get('report')) {
            summary = remSpamSummary[wgContentLanguage] || 'Removing external link: __LINK__ -- per __REPORT__. [[:m:RemSpam|Translate this summary]].';
            summary = summary.replace(/__LINK__/g, tag)
            summary = summary.replace(/__REPORT__/g, '[[:m:' + query_get('report') + ']]');
        } else {
             summary = 'Removing external link: '+tag+' per [[m:Talk:Spam_blacklist]]';
        }
        
        document.getElementById('wpSummary').value = summary;
        document.getElementById('wpMinoredit').checked = true;
        document.getElementById('wpWatchthis').checked = false;
        document.getElementById('wpDiff').click();
    });
}
 
function rem_spam() {
    var targ = query_get('target') || unescape(location.href).split('/').reverse()[0].split('?')[0].split('#')[0];
    var tag = prompt('Please insert a link (without http://) to remove from\nall pages listed here. Example (and default if textbox is blank):\n'+targ);
    if(tag == null) { alert('Action canceled.'); return; }
    if(tag == "") tag = targ;
    var options = prompt('Please enter the option modes you would want.\nEnter each one in the textbox (without any seperation marker)\ne=Remove lines that contain the link\ni=Remove links inline in text\nc=Remove Cite_web templates using the link\nExample: ci\nLeave the box blank for all modes');
    if(options == null) { alert('Action canceled.'); return; }
    if(options == "") options = 'eic';
    options = options.split(new RegExp(''));
    var opt = '';
    for(var x in options) {
        var y = options[x];
        if(y == 'c') opt += ',citeweb';
        if(y == 'i') opt += ',inline';
        if(y == 'e') opt += ',lines';
    }
    opt = opt.substring(1);
    options = opt;
    var usesummary = prompt('Please enter a summary to use\nDefault: Removing external link: __LINK__ per [[m:Talk:Spam blacklist]]');
    if(usesummary == null) { alert('Action canceled.'); return; }
    if(usesummary == '') usesummary = 'Removing external link: __LINK__ -- per [[m:Talk:Spam blacklist]]';
    var links = getElementsByClassName(document, 'ol', 'special')[0].getElementsByTagName('a');
    for(var i=0; i<links.length; i++) {
        var link = links[i];
        if (link.className.indexOf('external') != -1) {
            continue;
        }
        var cha = (link.href.indexOf('?') != -1) ? '&' : '?';
        link.href += cha + 'linkmodified=yes&action=edit&remspam='+escape(tag)+'&options='+escape(options)+'&usesummary='+escape(usesummary);
        link.style.color = "green";
        link.onmouseup = function() { this.style.color = 'orange'; }; 
        link.innerHTML = link.innerHTML.replace(/(<([^>]+)>)/g, '');
    }
    var btn = document.getElementById('ca-remspam').firstChild;
    btn.href = 'javascript:unrem_spam();';
    btn.innerHTML = 'Un-highlight links';
    btn.title = '';
}
 
function unrem_spam() {
    var links = document.getElementById('bodyContent').getElementsByTagName('a');
    for(var i=0; i<links.length; i++) {
        var link = links[i];
        link.href = link.href.split('linkmodified=yes')[0];
        link.style.color = "";
    }
    alert('All links will now be safe to click...');
    var btn = document.getElementById('ca-remspam').firstChild;
    btn.href = 'javascript:rem_spam();';
    btn.innerHTML = 'Remove external links';
    btn.title = '';
}
 
//parse paramName out of query string
//stolen from Lupin's popups
function query_get(paramName) {
  var cmdRe=RegExp('[&?]'+paramName+'=([^&]*)');
  var h=document.location;
  var m;
  if (m=cmdRe.exec(h)) {
    try { 
      return unescape(m[1]);
    } catch (someError) {}
  }
  return null;
};
//</nowiki></pre>