User:Innv/Scripts/Removespam.js
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, ru-version
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;
document.getElementById('wpSummary').value = query_get('usesummary').replace(/__LINK__/g, tag) || 'Удалена внешняя ссылка: '+tag+' согласно [[m:Talk:Spam_blacklist]]';
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('Пожалуйста введите внешнюю ссылку (без http://) для удаления\nall её из страниц, перечисленных здесь. Пример (и вариант по умолчанию, если текстовое поле будет пустым):\n'+targ);
if(tag == null) { alert('Действие завершено.'); return; }
if(tag == "") tag = targ;
var options = prompt('Пожалуйста, введите варианты опций, которые бы вы хотели.\nВведите в каждое текстовое поле (без разделения маркером)\ne=Удалить строки внешних ссылок, которые содержат ссылку\ni=Удалить ссылки в тексте\nc=Удалить шаблоны Cite_web, которые используют ссылку\nExample: ci\nОставить поле пустым для всех режимов');
if(options == null) { alert('Действие завершено.'); 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('Пожалуйста, введите краткое описание правки\nПо умолчанию: Удалена внешняя ссылка: __LINK__ согласно [[m:Talk:Spam blacklist]]');
if(usesummary == null) { alert('Action canceled.'); return; }
if(usesummary == '') usesummary = 'Удалена внешняя ссылка: __LINK__ -- согласно [[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()", "фильтровать ссылки", 'ca-filter', 'Фильтр всех страниц здесь только для пространств имён');
}
function addrem_spam() {
mw.util.addPortletLink('p-cactions', "javascript:rem_spam()", "удалить внешние ссылки", 'ca-remspam', 'Создать ссылки для удаления определённых ссылок из статей');
}
if(location.href.indexOf('action=edit') != -1 && location.href.indexOf('remspam=') != -1) addOnloadHook(dorem_spam);
if(wgCanonicalSpecialPageName == "LinkSearch") {
addOnloadHook(addrem_spam);
addOnloadHook(addfilter_main);
}
//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;
}