User:Mike.lifeguard/removeSpam.js

From Meta, a Wikimedia project coordination wiki

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.
//removespam.js
var remSpamSummary = {
	'ar' :  'إزالة وصلة خارجية: __LINK__ -- بسبب __REPORT__.',
	'bg' :  'Премахване на външна препратка: __LINK__ съгласно __REPORT__.',
	'bn' :  'বহিঃসংযোগ অপসারণ করা হয়েছে: __LINK__ -- দেখুন __REPORT__.',
	'bs' :  'Uklanjanje eksternog linka: __LINK__ -- prema __REPORT__.',
	'ca' :  'Llevant l\'enllaç extern: __LINK__ -- per __REPORT__.',
	'ckb':  'سڕینەوەی بەستەری دەرەکی: __LINK__ بەپێی __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__.',
	'et' :  'Välislink eemaldatud: __LINK__. Põhjus: __REPORT__.',
	'eu' :  '__LINK__ kanpo lotura kendu da arrazoi honegatik: __REPORT__.',
	'fa' :  'حذف پیوند به بیرون: __LINK__ بر طبق __REPORT__.',
	'fi' :  'Poistetaan aiheesta muualla -linkki: __LINK__ -- per __REPORT__.',
	'fr' :  'Lien externe __LINK__ enlevé par __REPORT__.',
	'fy' :  'Keppeling om utens __LINK__ fuorthelle oerienkomstich __REPORT__.',
	'he' :  'מסיר קישור חיצוני: __LINK__ -- לפי __REPORT__.',
	'hu' :  'Külső link eltávolítása (__LINK__) -- indoklás: __REPORT__.',
	'id' :  'Membuang pranala luar: __LINK__ -- per __REPORT__.',
	'it' :  'Rimuovo collegamento esterno: __LINK__ -- vedi __REPORT__.',
	'ja' :  '掲載すべきでない外部リンク「__LINK__」を除去) (理由:__REPORT__).',
	'ko' :	'외부 링크 __LINK__ 제거 (이유:__REPORT__).',
	'min':  'Hapuih pautan lua: __LINK__ -- sasuai jo __REPORT__.',
	'mk' :  'Отстранета надворешна врска: __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__.',
	'pl' :  'Usuwanie linku zewnętrznego sprzecznego z [[Wikipedia:Zasady wstawiania linków zewnętrznych]]: __LINK__ -- na podstawie __REPORT__.',
	'pt' :  'Removendo ligação externa __LINK__ por __REPORT__.',
	'ro' :  'Legătura externă __LINK__ a fost ștearsă cu motivul: __REPORT__.',
	'ru' :  'Удалена внешняя ссылка __LINK__ согласно __REPORT__.',
	'sh' :  'Uklanjanje eksternog linka: __LINK__ -- prema __REPORT__.',
	'sk' :  'Odstránenie externého odkazu __LINK__ -- na základe __REPORT__.',
	'sl' :  'Odstranjena zunanja povezava __LINK__ -- v skladu z __REPORT__.',
	'sq' :  'Largimi i lidhjes së jashtme: __LINK__ -- për __REPORT__.',
	'sr' :  'Уклањам спољашњу везу __LINK__ на основу __REPORT__.',
	'sv' :  'Tar bort den externa länken: __LINK__ -- enligt __REPORT__.',
	'th' :  'ลบลิงก์ภายนอก: __LINK__ -- ตาม __REPORT__.',
	'tr' :  '__REPORT__ \'a göre __LINK__ dış bağlantısını kaldırıyor.',
	'uk' :  'Вилучено зовнішнє посилання __LINK__ згідно з __REPORT__.',
	'vi' :  'Xóa liên kết ngoài: __LINK__ -- theo __REPORT__.',
	'zh' :  '移除外部链接: __LINK__,根据__REPORT__。',
};

function dorem_spam() {
	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;
	//var elreg = /.*\s*={1,6}external\s*links?={1,6}\s*.*/ig;
	//var elreg2 = /(\s*={1,6}external\s*links?={1,6}.*)$/
	//if(elreg.test(newtext)) {
	//	alert('MATCHED');
	//	var elsect = newtext.replace(elreg, '$1');
	//	document.getElementById('content').appendChild(document.createTextNode(elreg));
	//	document.getElementById('content').appendChild(document.createElement('br'));
	//	document.getElementById('content').appendChild(document.createTextNode(elsect));
	//	fuu();
	//	elsect = elsect.replace(new RegExp('^\\s*\\*.*?\\[?https?\\://'+reg+'/?.+?(?:\\s+(.+?)\\]|(\\s)).*?$', 'igm'), '');
	//	newtext = newtext.replace(elreg, elsect);
	//}
	if(!query_get('options') || (',' + query_get('options') + ',').indexOf(',lines,') != -1) newtext = newtext.replace(new RegExp('^\\s*\\*.*?\\[?https?\\://'+reg+'/?.+?(?:\\s+(.+?)\\]|.*?)$', '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[mw.config.get( '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 of External Links 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 = document.getElementById('bodyContent').getElementsByTagName('a');
	for(var i=0; i<links.length; i++) {
		var link = links[i];
		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 = '';
}
function filter_main() {
	var lis = document.getElementById('bodyContent').getElementsByTagName('li');
	var len = lis.length;
	for(var i=0; i<len; i++) {
		var li = lis[i];
		if(li.getElementsByTagName('a')[1].innerHTML.indexOf(':') != -1) {
			//li.parentNode.removeChild(li);
			li.style.display = 'none';
		}
	}
}
function addfilter_main() {
	mw.util.addPortletLink('p-cactions', "javascript:filter_main()", "filter links", 'ca-filter', 'Filter all pages on here to only be for mainspace');
}
function addrem_spam() {
	mw.util.addPortletLink('p-cactions', "javascript:rem_spam()", "remove external links", 'ca-remspam', 'Alter all the links on this page to autorem the external link on the page when clicked');
}

if(location.href.indexOf('action=edit') != -1 && location.href.indexOf('remspam=') != -1) $(dorem_spam);
if(mw.config.get( 'wgCanonicalSpecialPageName' ) == "LinkSearch") {
	$(addrem_spam);
	$(addfilter_main);
}

//parse paramName out of query string
//stolen from Lupin's popups
function query_get(paramName) {
	return mw.util.getParamValue(paramName);
}