مدیاویکی:Gadget-checkAbusefilter.js
نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.
- فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلیدهای Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-R)
- گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانههای اپل مکینتاش کلیدهای ⌘-Shift-R)
- اینترنت اکسپلورر/ Edge: کلید Ctrl را نگهدارید و روی دکمهٔ Refresh کلیک کنید، یا کلیدهای Ctrl-F5 را با هم فشار دهید
- اپرا: Ctrl-F5 را بفشارید.
/*global jQuery, mediaWiki */
//user:Yamaha5 @ fa.wikipedia.org
(function($, mw) {
'use strict';
function getAbusFilters() {
return (new mw.Api()).get({
action: 'query',
list: 'abusefilters',
abfshow: 'private',
format: 'json',
abfprop:'id|pattern'
}).then(function(data) {
return data.query.abusefilters;
});
}
function markWord(node, text, word, preparedId) {
var pos, len, newnodes = 0;
var newnode, middlenode, endnode;
// textnode - search for word
if (node.nodeType == 3) {
pos = node.data.search(text);
if (pos >= 0) {
// create new span-element
newnode = $('<span>', {
class: 'AbuseFilter-marked AbuseFilter-marked-' + word.replace(/ /g, '_'),
id: preparedId
}).css('border', "4px solid red")[0];
// get length of the matching part
len = node.data.match(text)[0].length;
// splits content in three parts: begin, middle and end
middlenode = node.splitText(pos);
endnode = middlenode.splitText(len);
// appends a copy of the middle to the new span-node
newnode.appendChild(middlenode.cloneNode(true));
// replace middlenode with the new span-node
middlenode.parentNode.replaceChild(newnode, middlenode);
newnodes = 1;
}
} else if ((node.nodeType == 1) // element node
&&
(node.hasChildNodes()) // with child nodes
&&
(node.tagName.toLowerCase() != "script") // no script, style and form
&&
(node.tagName.toLowerCase() != "style") && (node.tagName.toLowerCase() != "form")) {
var this_child;
for (this_child = 0; this_child < node.childNodes.length; this_child++) {
this_child = this_child + markWord(node.childNodes[this_child], text, word, preparedId);
}
}
return newnodes;
}
function checkForText(){
var abusNumPage=$('a[title^=ویژه')[8].href.substr(-4,4).split('/')[1].trim()
getAbusFilters().then(function(abusRegxAPIResult) {
for (var i=0; i<abusRegxAPIResult.length; i++){
if (abusRegxAPIResult[i]['id'].toString()==abusNumPage){
var pattern=abusRegxAPIResult[i]['pattern']
var regexPattern=pattern.match(/\"\\b[^\n]+\\b\)?\"/)[0]
regexPattern=regexPattern.replace(/\\-/ig,'-').replace(/\\_/ig,'_').replace(/"/ig,'').replace(/\\b/ig,'')// todo: javascript doesn't have \b and it should be replaced
regexPattern=new RegExp(regexPattern,'ig')
if ($('.mw-abuselog-details-edit_diff.mw-abuselog-value')[0]){
var addedTextByUser=$('.mw-abuselog-details-edit_diff.mw-abuselog-value')[0]['innerHTML']
}else{
var addedTextByUser=$('*')[0]['innerHTML']
}
var words= addedTextByUser.match(regexPattern)
if (words==null){
var addedTextByUser=$('.mw-abuselog-details')[0]['innerHTML']
console.log(addedTextByUser.match(regexPattern))
var words= addedTextByUser.match(regexPattern)
}
if (words!=null){
words = [...new Set(words)];
if (words.length>1){
//mw.notify('مواردی که پالایهٔ '+abusNumPage+' دریافت کردهاست ← '+words.join('\n'),{ autoHide: false });
mw.notify('چند مورد یافت شد');
}else{
//mw.notify('موردی که پالایهٔ '+abusNumPage+' دریافت کردهاست ← '+words.join('\n'),{ autoHide: false });
mw.notify('یک مورد یافت شد');
}
words.forEach(function(word) {
word=word.replace(/↵/gi,'').replace(/\+/gi,'')
var arabic_diacritics = "ًٌٍَُِّْٔ"
var main_regex = '\[؛؟\\s\\n\\r\\•●⚫⬤\\„\\”\\‚\\’\\‘\\“\\[\\]\\{\\}\\t\\<\\>\\.\\,\\"' + "\\'\\+\\!\\?\\-\\/\\»«،\\:\\|\\(\\)\۰۱۲۳۴۵۶۷۸۹]";
var start_regex = '\(\^\|' + main_regex + '\)';
var end_regex = '\(\$\|[' + arabic_diacritics + ']*' + main_regex + '\)';
var articleBody = $('#bodyContent, #article')[0];
//var articleBody = $('*')[0]['innerHTML'];
var replacements = [];
var markedItems = [];
var preparedId = 'tool-' + encodeURI(word).replace(/%/g, '.');
var regexp = new RegExp(start_regex + '(' +
word.substring(0, word.length - 1).replace(/[ء-يٓ-ٕپچژگکكڪﻙﻚیﻱﻲكﮑﮐﮏﮎﻜﻛﻚﻙىﻯيہەھﻰ-ﻴ]/g, '$&\[ً-ِّْٰٔ\]\*') + word.slice(-1) +
')' + end_regex,
'g'
);
markWord(articleBody, regexp, word, preparedId);
});
}else{
mw.notify('موردی یافت نشد! ممکن است پالایهٔ '+abusNumPage+' ویرایش یا اصلاح شدهباشد یا کد جاواسکریپت توانایی پیدا کردن نداشتهباشد',{ autoHide: false });
}
};
};
});
};
if (mw.config.get('wgNamespaceNumber') ==-1 && ["ویژه:سیاههٔ_خرابکاری"].indexOf(mw.config.get('wgPageName').split('/')[0]) != -1) {
checkForText();
};
})(jQuery, mediaWiki);