Участник:Lingüista/AbusePrevent.js
Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.
- Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
- Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
- Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
- Opera: Нажмите Ctrl+F5.
/***
@author Lingüista
@date 02-04-17
***/
var AbusePrevent = new Object();
AbusePrevent.diffFuncs = new Object();
// settings
AbusePrevent.settings = new Object();
AbusePrevent.settings.clearStorageAfter = 300;
AbusePrevent.settings.maxAnonEditsCount = 10; // between reloads
AbusePrevent.settings.maxPersonalEditCount = 4; // between reloads
AbusePrevent.settings.defaultProtectionEditCount = 2;
AbusePrevent.settings.defaultProtectionType = 'edit=sysop|move=sysop';
AbusePrevent.settings.defaultBlockExpiry = '20 minutes';
// filter rules
AbusePrevent.filterRules = function () {
var oldid = AbusePrevent.oldid;
// common rules
AbusePrevent.do_if(
'affected_pages', AbusePrevent.diffBase.properties.title,
'>=', AbusePrevent.settings.defaultProtectionEditCount, AbusePrevent.truncheon.protect
);
if (AbusePrevent.diffBase.properties.title == 'Викисловарь:Сообщения об ошибках') {
return AbusePrevent.done(0);
}
// filter 1
AbusePrevent.filterNumber = 1;
AbusePrevent.filterName = 'Добавление неформатных значений';
var dff = AbusePrevent.diffFuncs.getByLocus('meaning');
var dff2 = AbusePrevent.diffFuncs.getByLocus('onyms');
dff = dff.concat(dff2);
for ( var j = 0; j < dff.length; j ++ ) {
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) { return a.match(/#[^А-ЯЁЙа-яёйA-Za-z]*$/) !== null },
function (b) { return (b.match(/#[^\[\]]+$/) !== null && b.match(/#.*[А-ЯЁЙа-яёйA-Za-z]+.*$/) !== null) }
)) {
AbusePrevent.truncheon.rollback(oldid);
//AbusePrevent.truncheon.block();
return AbusePrevent.done(1);
}
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) { return a === null },
function (b) { return (b.match(/#[^\[\]]+$/) !== null && b.match(/#.*[А-ЯЁЙа-яёйA-Za-z]+.*$/) !== null) }
)) {
AbusePrevent.truncheon.rollback(oldid);
// AbusePrevent.truncheon.block(); // temporary disabled
return AbusePrevent.done(1);
}
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) { return true },
function (b) { return b.match(/\d*\.*\s*[А-ЯЁЙа-яёйA-Za-z]+/) !== null }
)) {
AbusePrevent.truncheon.rollback(oldid);
// AbusePrevent.truncheon.block(); // temporary disabled
return AbusePrevent.done(1);
}
}
// filter 2
AbusePrevent.filterNumber = 2;
AbusePrevent.filterName = 'Добавление мусорных строк (кириллица)';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) {
return (
(a.match(/[^ёуеыпоэяию]/g) !== null ? a.match(/[^ёуеыпоэяию]/g) : []).length /
(a.match(/[ёуеыпоэяию]/g) !== null ? a.match(/[^ёуеыпоэяию]/g) : []).length
) < 4
},
function (b) {
return (
(b.match(/[^ёуеыпоэяию]/g) !== null ? b.match(/[^ёуеыпоэяию]/g) : []).length /
(b.match(/[ёуеыпоэяию]/g) !== null ? b.match(/[^ёуеыпоэяию]/g) : []).length
) > 4}
)) {
AbusePrevent.truncheon.rollback(oldid);
return AbusePrevent.done(2);
}
}
// filter 3
var obscene = [
'(?:\w*(?:[хxh](?:[уyu][иiu])|[пnp][еиeiu](?:[з3z][дd]|[дd](?:[еаоeoa0][рpr]|[рpr]))|[бb6][лl]я[дd]|[оo0][хxh][уyu][еe]|[мm][уyu][дd][еоиаeioau0]|[дd][еe][рpr][ьb]|[гrg][аоoa0][вbv][нhn]|[уyu][еёe][бb6])|[хxh][\W_]*(?:[уyu][\W_]*[йиеёяeiju])|[пnp][\W_]*[еиeiu][\W_]*(?:[з3z][\W_]*[дd]|[дd][\W_]*(?:[еаоeoa0][\W_]*[рpr]|[рpr]))|[бb6][\W_]*[лl][\W_]*я[\W_]*[дd]|[оo0][\W_]*[хxh][\W_]*[уyu][\W_]*[еe]|[мm][\W_]*[уyu][\W_]*[дd][\W_]*[еоиаeioau0]|[дd][\W_]*[еe][\W_]*[рpr][\W_]*[ьb]|[гrg][\W_]*[аоoa0][\W_]*[вbv][\W_]*[нhn]|[уyu][\W_]*[еёe][\W_]*[бb6]|[ёеe][бb6])\w+',
'ж[\W_]*(?:[оo0][\W_]*[пnp][\W_]*(?:[аa]|[oо0](?:[\W_]*[хxh])?|[уеыeyiuё]|[оo0][\W_]*[йj])\w*)',
'[дd][\W_]*[еe][\W_]*[рpr][\W_]*(?:[ьb][\W_]*)?[мm][\W_]*[оуеаeoya0u](?:[\W_]*[мm])?',
'[чc][\W_]*[мm][\W_]*(?:[оo0]|[ыi][\W_]*[рpr][\W_]*[еиьяeibu])',
'[сsc][\W_]*[уuy][\W_]*(?:(?:[чc][\W_]*)?[кk][\W_]*[ауиiyau](?:[\W_]*[нhn](?:[\W_]*[оo0][\W_]*[йj]|[\W_]*[уаыyiau])?)?|[чc][\W_]*(?:(?:[ьb][\W_]*)?(?:[еёяиeiu]|[еиeiu][\W_]*[йj])|[аa][\W_]*[рpr][\W_]*[ыауеeyiau]))',
'[гrg][\W_]*(?:[аоoa0][\W_]*(?:[нhn][\W_]*[дd][\W_]*[аоoa0][\W_]*[нhn](?:[\W_]*[ыуyiu])?|[вbv][\W_]*[нhn][\W_]*[оаoa0](?:[\W_]*(?:[мm]|[еe][\W_]*[дd](?:[\W_]*[ыуаеeyiau]|[\W_]*[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?)?))?)|[нhn][\W_]*(?:[иiu][\W_]*[дd][\W_]*(?:[ыуеаeyiau]|[оo0][\W_]*[йj])|[уyu][сsc](?:[\W_]*[аыуyiau]|[\W_]*[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?)?))',
'(?:[нhn][\W_]*[еe][\W_]*)?(?:(?:[з3z][\W_]*[аa]|[оo0][тt]|[пnp][\W_]*[оo0]|[пnp][\W_]*(?:[еe][\W_]*[рpr][\W_]*[еe]|[рpr][\W_]*[оеиeiou0]|[иiu][\W_]*[з3z][\W_]*[дd][\W_]*[оo0])|[нhn][\W_]*[аa]|[иiu][\W_]*[з3z]|[дd][\W_]*[оo0]|[вbv][\W_]*[ыi]|[уyu]|[рpr][\W_]*[аa][\W_]*[з3z]|[з3z][\W_]*[лl][\W_]*[оo0]|[тt][\W_]*[рpr][\W_]*[оo0]|[уyu])[\W_]*)?(?:[вbv][\W_]*[ыi][\W_]*)?(?:[ъьb][\W_]*)?(?:[еёe][\W_]*[бb6](?:(?:[\W_]*[оеёаиуeioyau0])?(?:[\W_]*[нhn](?:[\W_]*[нhn])?[\W_]*[яуаиьiybau]?)?(?:[\W_]*[вbv][\W_]*[аa])?(?:(?:[\W_]*(?:[иеeiu]ш[\W_]*[ьb][\W_]*[сsc][\W_]*я|[тt][\W_]*(?:(?:[ьb][\W_]*)?[сsc][\W_]*я|[ьb]|[еe][\W_]*[сsc][\W_]*[ьb]|[еe]|[оo0]|[иiu][\W_]*[нhn][\W_]*[уыеаeyiau])|(?:щ[\W_]*(?:[иiu][\W_]*[йj]|[аa][\W_]*я|[иеeiu][\W_]*[еe]|[еe][\W_]*[гrg][\W_]*[оo0])|ю[\W_]*[тt])(?:[\W_]*[сsc][\W_]*я)?|[еe][\W_]*[мтmt]|[кk](?:[\W_]*[иаiau])?|[аa][\W_]*[лl](?:[\W_]*[сsc][\W_]*я)?|[лl][\W_]*(?:[аa][\W_]*[нhn]|[оаoa0](?:[\W_]*[мm])?|(?:[иiu][\W_]*)?[сsc][\W_]*[ьяb]|[иiu]|[аa][\W_]*[сsc][\W_]*[ьb])|[рpr][\W_]*[ьb]|[сsc][\W_]*[яьb]|[нhn][\W_]*[оo0]|[чc][\W_]*(?:[иiu][\W_]*[хxh]|[еe][\W_]*[сsc][\W_]*[тt][\W_]*[ьиibu](?:[\W_]*ю)?)|(?:[тt][\W_]*[еe][\W_]*[лl][\W_]*[ьb][\W_]*[сsc][\W_]*[кk][\W_]*|[сsc][\W_]*[тt][\W_]*|[лl][\W_]*[иiu][\W_]*[вbv][\W_]*|[чтtc][\W_]*)?(?:[аa][\W_]*я|[оo0][\W_]*[йемejm]|[ыi][\W_]*[хйеejxh]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[иiu][\W_]*[еe]|[оo0][\W_]*[мm][\W_]*[уyu]|[иiu][\W_]*[йj]|[еe][\W_]*[вbv]|[иiu][\W_]*[мm](?:[\W_]*[иiu])?)|[чтыйилijltcu]))?)|[\W_]*[ыi](?:(?:[\W_]*[вbv][\W_]*[аa]|[\W_]*[нhn](?:[\W_]*[нhn])?)(?:(?:[\W_]*(?:[иеeiu]ш[\W_]*[ьb][\W_]*[сsc][\W_]*я|[тt][\W_]*(?:[ьb][\W_]*[сsc][\W_]*я|[ьb]|[еe][\W_]*[сsc][\W_]*[ьb]|[еe]|[иiu][\W_]*[нhn][\W_]*[уыеаeyiau])|(?:щ[\W_]*(?:[иiu][\W_]*[йj]|[аa][\W_]*я|[иеeiu][\W_]*[еe]|[еe][\W_]*[гrg][\W_]*[оo0])|ю[\W_]*[тt])(?:[\W_]*[сsc][\W_]*я)?|[еe][\W_]*[мтmt]|[лl][\W_]*(?:(?:[иiu][\W_]*)?[сsc][\W_]*[ьяb]|[иiu]|[аa][\W_]*[сsc][\W_]*[ьb])|(?:[сsc][\W_]*[тt][\W_]*|[лl][\W_]*[иiu][\W_]*[вbv][\W_]*|[чтtc][\W_]*)?(?:[аa][\W_]*я|[оo0][\W_]*[йемejm]|[ыi][\W_]*[хйеejxh]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[иiu][\W_]*[еe]|[оo0][\W_]*[мm][\W_]*[уyu]|[иiu][\W_]*[йj]|[еe][\W_]*[вbv]|[иiu][\W_]*[мm](?:[\W_]*[иiu])?))))|[рpr][\W_]*[ьb]))|я[\W_]*[бb6](?:[\W_]*[оеёаиуeioyau0])?(?:(?:[\W_]*[нhn](?:[\W_]*[нhn])?[\W_]*[яуаиьiybau]?)?(?:(?:[\W_]*(?:[иеeiu]ш[\W_]*[ьb][\W_]*[сsc][\W_]*я|[тt][\W_]*(?:[ьb][\W_]*[сsc][\W_]*я|[ьb]|[еe][\W_]*[сsc][\W_]*[ьb]|[еe]|[иiu][\W_]*[нhn][\W_]*[уыеаeyiau])|(?:щ[\W_]*(?:[иiu][\W_]*[йj]|[аa][\W_]*я|[иеeiu][\W_]*[еe]|[еe][\W_]*[гrg][\W_]*[оo0])|ю[\W_]*[тt])(?:[\W_]*[сsc][\W_]*я)?|[еe][\W_]*[мтmt]|[кk](?:[\W_]*[иаiau])?|[аa][\W_]*[лl](?:[\W_]*[сsc][\W_]*я)?|[лl][\W_]*(?:[аa][\W_]*[нhn]|[оаoa0](?:[\W_]*[мm])?|(?:[иiu][\W_]*)?[сsc][\W_]*[ьяb]|[иiu])|[рpr][\W_]*[ьb]|[сsc][\W_]*[яьb]|[нhn][\W_]*[оo0]|[чc][\W_]*(?:[иiu][\W_]*[хxh]|[еe][\W_]*[сsc][\W_]*[тt][\W_]*[ьиibu](?:[\W_]*ю)?)|(?:[тt][\W_]*[еe][\W_]*[лl][\W_]*[ьb][\W_]*[сsc][\W_]*[кk][\W_]*|[сsc][\W_]*[тt][\W_]*|[лl][\W_]*[иiu][\W_]*[вbv][\W_]*|[чтtc][\W_]*)?(?:[аa][\W_]*я|[оo0][\W_]*[йемejm]|[ыi][\W_]*[хйеejxh]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[иiu][\W_]*[еe]|[оo0][\W_]*[мm][\W_]*[уyu]|[иiu][\W_]*[йj]|[еe][\W_]*[вbv]|[иiu][\W_]*[мm](?:[\W_]*[иiu])?)|[чмйилijlmcu]))|(?:[\W_]*[нhn](?:[\W_]*[нhn])?[\W_]*[яуаиьiybau]?)))|я[\W_]*[бb6][\W_]*(?:[еёаиуeiyau][\W_]*)?(?:[нhn][\W_]*(?:[нhn][\W_]*)?(?:[яуаиьiybau][\W_]*)?)?[тt])',
'\w*[вbv][\W_]*([ыиiu]+[\W_]*[еёe]+[\W_]*[бb6][\W_]*[аоoa0][\W_]*[нhn])\w*',
'([сsc]|[оo0][\W_]*[бb6])[\W_]*[ьъb][\W_]*[еяёe][\W_]*[бb6][\W_]*(?:([уyu]|[оo0][\W_]*[сз3szc])|(?:[еиёауeiyau](?:[\W_]*[лl](?:[\W_]*[иоаioau0])?|[\W_]*ш[\W_]*[ьb]|[\W_]*[тt][\W_]*[еe])?(?:[\W_]*[сsc][\W_]*[ьяb])?))',
'[еe][\W_]*(?:[бb6][\W_]*(?:[уyu][\W_]*[кk][\W_]*[еe][\W_]*[нhn][\W_]*[тt][\W_]*[иiu][\W_]*[йj]|[еe][\W_]*[нhn][\W_]*(?:[ьb]|я(?:[\W_]*[мm])?)|[иiu][\W_]*(?:[цc][\W_]*[кk][\W_]*[аa][\W_]*я|[чc][\W_]*[еe][\W_]*[сsc][\W_]*[кk][\W_]*[аa][\W_]*я)|[лl][\W_]*[иiu][\W_]*щ[\W_]*[еe]|[аa][\W_]*(?:[лl][\W_]*[ьb][\W_]*[нhn][\W_]*[иiu][\W_]*[кk](?:[\W_]*[иаiau])?|[тt][\W_]*[оo0][\W_]*[рpr][\W_]*[иiu][\W_]*[йj]|[нhn][\W_]*(?:[тt][\W_]*[рpr][\W_]*[оo0][\W_]*[пnp]|[аa][\W_]*[тt][\W_]*[иiu][\W_]*(?:[кk]|[чc][\W_]*[еe][\W_]*[сsc][\W_]*[кk][\W_]*[иiu][\W_]*[йj]))))|[дd][\W_]*[рpr][\W_]*[иiu][\W_]*[тt])',
'[нhn][\W_]*[еe][\W_]*[вbv][\W_]*[рpr][\W_]*[оo0][\W_]*[тt][\W_]*ъ[\W_]*[еe][\W_]*[бb6][\W_]*[аa][\W_]*[тt][\W_]*[еe][\W_]*[лl][\W_]*[ьb][\W_]*[сsc][\W_]*[кk][\W_]*[иiu][\W_]*(?:[ыиiu][\W_]*[йj]|[аa][\W_]*я|[оo0][\W_]*[ейej]|[ыi][\W_]*[хxh]|[ыi][\W_]*[еe]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu])',
'[уyu][\W_]*(?:[ёеe][\W_]*[бb6][\W_]*(?:[иiu][\W_]*щ[\W_]*[еаea]|[аa][\W_]*[нhn](?:[\W_]*[тt][\W_]*[уyu][\W_]*[сsc])?(?:[\W_]*[аоoa0][\W_]*[вмbmv]|[\W_]*[ыуеаeyiau])?)|[рpr][\W_]*[оo0][\W_]*[дd](?:[\W_]*[аоoa0][\W_]*[вмbmv]|[\W_]*[ыуеаeyiau])?|[бb6][\W_]*[лl][\W_]*ю[\W_]*[дd][\W_]*(?:[оo0][\W_]*[кk]|[кk][\W_]*(?:[аоoa0][\W_]*[вмbmv](?:[\W_]*[иiu])?|[иуеаeiyau])?))',
'[мm][\W_]*(?:[уyu][\W_]*[дd][\W_]*(?:[оo0][\W_]*[хxh][\W_]*[аa][\W_]*(?:[тt][\W_]*[ьb][\W_]*[сsc][\W_]*я|ю[\W_]*[сsc][\W_]*[ьb]|[еe][\W_]*ш[\W_]*[ьb][\W_]*[сsc][\W_]*я)|[аa][\W_]*(?:[кk](?:[\W_]*[иаiau]|[оo0][мвbmv])?|[чc][\W_]*(?:[ьb][\W_]*[еёe]|[иiu][\W_]*[нhn][\W_]*[уыаyiau]|[кk][\W_]*(?:[аиеуeiyau]|[оo0][\W_]*[йj])))|[еe][\W_]*[нhn][\W_]*[ьb]|[иiu][\W_]*[лl](?:[\W_]*[аеоыeoia0]?))|[аa][\W_]*[нhn][\W_]*[дd][\W_]*[уаyau]|[лl][\W_]*(?:[иiu][\W_]*[нhn]|я))',
'(?:[мm][\W_]*(?:[оo0][\W_]*[з3z][\W_]*[гrg]|[уyu][\W_]*[дd])|[дd][\W_]*(?:[оo0][\W_]*[лl][\W_]*[бb6]|[уyu][\W_]*[рpr])|[сsc][\W_]*[кk][\W_]*[оo0][\W_]*[тt])[\W_]*[аоoa0][\W_]*(?:[хxh][\W_]*[уyu][\W_]*[ийяiju]|[ёеe][\W_]*[бb6](?:[\W_]*[еоeo0][\W_]*[вbv]|[\W_]*[ыаia]|[\W_]*[сsc][\W_]*[тt][\W_]*[вbv][\W_]*[оуoy0u](?:[\W_]*[мm])?|[иiu][\W_]*[з3z][\W_]*[мm])?)',
'(?:[нhn][\W_]*[еe][\W_]*|[з3z][\W_]*[аa][\W_]*|[оo0][\W_]*[тt][\W_]*|[пnp][\W_]*[оo0][\W_]*|[нhn][\W_]*[аa][\W_]*|[рpr][\W_]*[аa][\W_]*[сз3szc][\W_]*)?(?:[пnp][\W_]*[иiu][\W_]*[з3z][\W_]*[дd][\W_]*[ияеeiu]|(?:ъ)?[еёe][\W_]*[бb6][\W_]*[аa])[\W_]*(?:(?:([тt][\W_]*[ьb]|[лl])[\W_]*[сsc][\W_]*я|[тt][\W_]*[ьb]|[лl][\W_]*[иiu]|[аa][\W_]*[лl]|[лl]|c[\W_]*[ьb]|[иiu][\W_]*[тt]|[иiu]|[тt][\W_]*[еe]|[чc][\W_]*[уyu]|ш[\W_]*[ьb])|(?:[йяиiju]|[иеeiu][\W_]*[мm](?:[\W_]*[иiu])?|[йj][\W_]*[сsc][\W_]*(?:[кk][\W_]*(?:[ыиiu][\W_]*[йеej]|[аa][\W_]*я|[оo0][\W_]*[еe]|[ыi][\W_]*[хxh]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu])|[тt][\W_]*[вbv][\W_]*[оуаoya0u](?:[\W_]*[мm])?)))',
'[пnp][\W_]*[еиыeiu][\W_]*[дd][\W_]*[аеэоeoa0][\W_]*[рpr](?:(?:[\W_]*[аa][\W_]*[сз3szc](?:(?:[\W_]*[тt])?(?:[\W_]*[ыi]|[\W_]*[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?|[\W_]*[кk][\W_]*[аиiau])?|(?:[\W_]*[ыуаеeyiau]|[\W_]*[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?|[\W_]*[оo0][\W_]*[вbv])))|[\W_]*(?:[ыуаеeyiau]|[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?|[оo0][\W_]*[вbv]|[нhn][\W_]*я))?',
'[пnp][\W_]*[иiu][\W_]*[з3z][\W_]*(?:[ьb][\W_]*)?[дd][\W_]*(?:[ёеe][\W_]*(?:[нhn][\W_]*[ыi][\W_]*ш(?:[\W_]*[ьb])?|[шнжhn](?:[\W_]*[ьb])?)|[уyu][\W_]*(?:[йj](?:[\W_]*[тt][\W_]*[еe])?|[нhn](?:[\W_]*[ыi])?)|ю[\W_]*(?:[кk](?:[\W_]*(?:[аеуиeiyau]|[оo0][\W_]*[вbv]|[аa][\W_]*[мm](?:[\W_]*[иiu])?))?|[лl](?:[ьиibu]|[еe][\W_]*[йj]|я[\W_]*[хмmxh]))|[еe][\W_]*[цc]|[аоoa0][\W_]*(?:[нhn][\W_]*[уyu][\W_]*)?[тt][\W_]*(?:[иiu][\W_]*[йj]|[аa][\W_]*я|[оo0](?:[\W_]*[ейej])?|[ыi][\W_]*[ейхejxh]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu]|[еe][\W_]*[еe]|[ауьеыeyibau])|[аa][\W_]*[нhn][\W_]*[уyu][\W_]*[лl](?:[\W_]*[аиiau])?|[ыеуиаeiyau]|[оаoa0][\W_]*(?:[йj]|[хxh][\W_]*[уyu][\W_]*[йj]|[еёe][\W_]*[бb6]|(?:[рpr][\W_]*[оo0][\W_]*[тt]|[гrg][\W_]*[оo0][\W_]*[лl][\W_]*[оo0][\W_]*[вbv])[\W_]*(?:[ыиiu][\W_]*[йj]|[аa][\W_]*я|[оo0][\W_]*[ейej]|[ыi][\W_]*[хxh]|[ыi][\W_]*[еe]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu])|[бb6][\W_]*(?:[рpr][\W_]*[аa][\W_]*[тt][\W_]*[иiu][\W_]*я|[оo0][\W_]*[лl](?:[\W_]*[аыуyiau])?)))',
'[пnp][\W_]*(?:[аa][\W_]*[дd][\W_]*[лl][\W_]*[аоыoia0]|[оаoa0][\W_]*[сsc][\W_]*[кk][\W_]*[уyu][\W_]*[дd][\W_]*(?:[ыуаеeyiau]|[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?)|[иеeiu][\W_]*[дd][\W_]*(?:[иiu][\W_]*[кk]|[рpr][\W_]*[иiu][\W_]*[лl](?:[\W_]*[лl])?)(?:[\W_]*[оаoa0][\W_]*[мвbmv]|[\W_]*[иуеоыаeioyau0])?|[рpr][\W_]*[оo0][\W_]*[бb6][\W_]*[лl][\W_]*я[\W_]*[дd][\W_]*[оo0][\W_]*[мm])',
'(?:[з3z][\W_]*[аa][\W_]*|[оo0][\W_]*[тt][\W_]*|[нhn][\W_]*[аa][\W_]*)?[сsc][\W_]*[рpr][\W_]*(?:[аa][\W_]*[тt][\W_]*[ьb]|[аa][\W_]*[лl](?:[\W_]*[иiu])?|[eуиiyu])',
'[сsc][\W_]*[рpr][\W_]*[аa][\W_]*(?:[кk][\W_]*(?:[аеиуeiyau]|[оo0][\W_]*[йj])|[нhn](?:[\W_]*[нhn])?(?:[ьb]|(?:[\W_]*[ыi][\W_]*[йеej]|[\W_]*[аa][\W_]*я|[\W_]*[оo0][\W_]*[еe]))|[лl][\W_]*[ьb][\W_]*[нhn][\W_]*[иiu][\W_]*[кk](?:[\W_]*[иiu]|[\W_]*[оаoa0][\W_]*[мm])?)',
'(?:[з3z][\W_]*[аa][\W_]*)?[тt][\W_]*[рpr][\W_]*[аa][\W_]*[хxh][\W_]*(?:[нhn][\W_]*(?:[уyu](?:[\W_]*[тt][\W_]*[ьb](?:[\W_]*[сsc][\W_]*я)?|[\W_]*[сsc][\W_]*[ьb]|[\W_]*[лl](?:[\W_]*[аиiau])?)?|[еиeiu][\W_]*ш[\W_]*[ьb][\W_]*[сsc][\W_]*я)|[аa][\W_]*(?:[лl](?:[\W_]*[аоиioau0])?|[тt][\W_]*[ьb](?:[\W_]*[сsc][\W_]*я)?|[нhn][\W_]*(?:[нhn][\W_]*)?(?:[ыиiu][\W_]*[йj]|[аa][\W_]*я|[оo0][\W_]*[йеej]|[ыi][\W_]*[хxh]|[ыi][\W_]*[еe]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu])))',
'(?:[нhn][\W_]*[иеeiu][\W_]*|[пnp][\W_]*[оo0][\W_]*|[нhn][\W_]*[аa][\W_]*|[оаoa0][\W_]*(?:[тt][\W_]*)?|[дd][\W_]*[аоoa0][\W_]*|[з3z][\W_]*[аa][\W_]*)?(?:(?:[хxh][\W_]*(?:[еиeiu][\W_]*(?:[йj][\W_]*)?[рpr]|[уyu](?:[\W_]*[йj])?))(?:[\W_]*[еоёeo0][\W_]*[вbv](?:[\W_]*[аa][\W_]*ю[\W_]*щ|[\W_]*ш)?)?(?:[\W_]*[аиеeiau][\W_]*[лнlhn])?(?:[нhn])?(?:[\W_]*(?:[иаоёяыеeioau0][юяиевмйbeijmvu]|я[\W_]*(?:[мm](?:[\W_]*[иiu])?|[рpr][\W_]*(?:ю|[иiu][\W_]*(?:[тt](?:[\W_]*[ьеeb][\W_]*[сsc][\W_]*[яьb])?|[лl](?:[\W_]*[иоаioau0])?))|[чc][\W_]*(?:[аиiau][\W_]*[тt](?:[\W_]*[сsc][\W_]*я)|[иiu][\W_]*[лl](?:[\W_]*[иоаioau0])?)|[чc](?:[\W_]*[ьb])?)|[еe][\W_]*(?:[тt][\W_]*(?:[оo0][\W_]*[йj]|[аьуybau])|[еe][\W_]*(?:[тt][\W_]*[еe]|ш[\W_]*[ьb]))|[аыоуяюйиijoyau0]|[лl][\W_]*[иоiou0]|[чc][\W_]*[уyu])))',
'(?:[хxh][\W_]*(?:[еиeiu][\W_]*(?:[йj][\W_]*)?[рpr]|[уyu][\W_]*[йj]))',
'[хxh][\W_]*[уyu][\W_]*(?:[еёиeiu][\W_]*(?:[сsc][\W_]*[оo0][\W_]*[сsc]|[пnp][\W_]*[лl][\W_]*[еe][\W_]*[тt]|[нhn][\W_]*[ыi][\W_]*ш)(?:[\W_]*[аыуyiau]|[\W_]*[оаoa0][\W_]*[мm](?:[\W_]*[иiu])?|[нhn][\W_]*(?:[ыиiu][\W_]*[йj]|[аa][\W_]*я|[оo0][\W_]*[йеej]|[ыi][\W_]*[хxh]|[ыi][\W_]*[еe]|[ыi][\W_]*[мm](?:[\W_]*[иiu])?|[уyu][\W_]*ю|[оo0][\W_]*[мm][\W_]*[уyu]))?|[дd][\W_]*[оo0][\W_]*ё[\W_]*[бb6][\W_]*[иiu][\W_]*[нhn][\W_]*(?:[оo0][\W_]*[йj]|[аеыуeyiau]))',
'[бb6][\W_]*[лl][\W_]*(я|[еe][аa])(?:[\W_]*[дтdt][ьъ]?[\W_]*(?:[ьb]|[иiu]|[кk][\W_]*[иiu]|[сsc][\W_]*[тt][\W_]*[вbv][\W_]*[оo0]|[сsc][\W_]*[кk][\W_]*(?:[оo0][\W_]*[ейej]|[иiu][\W_]*[еe]|[аa][\W_]*я|[иiu][\W_]*[йj]|[оo0][\W_]*[гrg][\W_]*[оo0])))?',
'[вbv][\W_]*[ыi][\W_]*[бb6][\W_]*[лl][\W_]*я[\W_]*[дd][\W_]*(?:[оo0][\W_]*[кk]|[кk][\W_]*(?:[иуаеeiyau]|[аa][\W_]*[мm](?:[\W_]*[иiu])?))',
'(?:[з3z][\W_]*[аоoa0][\W_]*)(?:[пnp][\W_]*[аоoa0][\W_]*[дd][\W_]*[лl][\W_]*[оыаoia0]|[лl][\W_]*[уyu][\W_]*[пnp][\W_]*(?:[оo0][\W_]*[йj]|[аеыуeyiau]))',
'ш[\W_]*[лl][\W_]*ю[\W_]*[хxh][\W_]*(?:[ауеиeiyau]|[оo0][\W_]*[йj])',
'[аa][\W_]*[нhn][\W_]*[уyu][сsc](?:[\W_]*[еаыуeyiau]|[\W_]*[оo0][\W_]*[мm])?',
'г[ао]вн.*|g[ao]vn.*'
];
AbusePrevent.filterNumber = 3;
AbusePrevent.filterName = 'Обсценная лексика';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
for ( var o = 0; o < obscene.length; o ++ ) {
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) { return a.match(new RegExp(obscene[o], 'gi')) === null },
function (b) { return b.match(new RegExp(obscene[o], 'gi')) !== null }
)) {
AbusePrevent.truncheon.rollback(oldid);
// AbusePrevent.truncheon.block(); // temporary disabled
return AbusePrevent.done(3);
}
}
}
// filter 4
AbusePrevent.filterNumber = 4;
AbusePrevent.filterName = 'Морфологическая деструкция';
if (AbusePrevent.diffBase.properties.marker !== false) {
if (AbusePrevent.diffBase.properties.marker == 'изменение подтверждённого морфемного разбора') {
AbusePrevent.truncheon.rollback(oldid);
return AbusePrevent.done(4);
}
}
// filter 5
AbusePrevent.filterNumber = 5;
AbusePrevent.filterName = 'Вандализм устойчивых выражений';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
if (dff[j].common_locus == 'phrases') {
AbusePrevent.truncheon.rollback(oldid);
// AbusePrevent.truncheon.block(); // temporary disabled
return AbusePrevent.done(5);
}
}
// filter 6
AbusePrevent.filterNumber = 6;
AbusePrevent.filterName = 'Неоформленный шаблон Википедии';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
console.log(dff[j]);
if (AbusePrevent.diffFuncs.diffPlainMatch(dff[j],
function (a) {
return true
},
function (b) {
return b.match(/\{\{[Вв]икипедия\|/g).length > 0
}
)) {
AbusePrevent.truncheon.correct(function (c) {
return c.replace(/\{\{[Вв]икипедия\|[^\}]+\}\}/g, '{{википедия}}');
});
return AbusePrevent.done(6);
}
}
// filter 7
AbusePrevent.filterNumber = 7;
AbusePrevent.filterName = 'Вандализм этимологии';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
if (dff[j].common_locus == 'etymology') {
AbusePrevent.truncheon.rollback(oldid);
// AbusePrevent.truncheon.block(); // temporary disabled
return AbusePrevent.done(7);
}
}
// filter 8
AbusePrevent.filterNumber = 8;
AbusePrevent.filterName = 'Проблемы при редактировании нижней части статьи';
var dff = AbusePrevent.diffBase.changes;
for ( var j = 0; j < dff.length; j ++ ) {
if (dff[j].common_locus == 'bottom') {
AbusePrevent.truncheon.rollback(oldid);
return AbusePrevent.done(8);
}
}
return AbusePrevent.done(0);
};
AbusePrevent.diffFuncs.getByLocus = function (locus) {
AbusePrevent.returnedDiffs = new Array();
for ( var i = 0; i < AbusePrevent.diffBase.changes.length; i ++ ) {
if (AbusePrevent.diffBase.changes[i].common_locus == locus) {
AbusePrevent.returnedDiffs.push(AbusePrevent.diffBase.changes[i]);
}
}
return AbusePrevent.returnedDiffs;
};
AbusePrevent.diffFuncs.diffPlainMatch = function (diff, part1_func, part2_func) {
try {
if ( part1_func(diff.plain_text[0] !== null ? diff.plain_text[0] : '')
&& part2_func(diff.plain_text[1] !== null ? diff.plain_text[1] : '')
) {
return true;
}
} catch (e) { return false; }
return false;
};
AbusePrevent.truncheon = new Object();
AbusePrevent.truncheon.messages = new Object();
AbusePrevent.truncheon.messages.sign = '[[User talk:Lingüista/AbusePrevent.js|AbusePrevent]]: ';
AbusePrevent.truncheon.messages.rollback = function () {
return AbusePrevent.truncheon.messages.sign + 'автоматический откат некорректной правки';
};
AbusePrevent.truncheon.messages.block = function () {
return AbusePrevent.truncheon.messages.sign + 'автоматическая блокировка нарушителя';
};
AbusePrevent.truncheon.messages.correct = function () {
return AbusePrevent.truncheon.messages.sign + 'автоматическая коррекция неоформленной правки, код ' + AbusePrevent.filterNumber;
};
AbusePrevent.truncheon.messages.protect = function () {
return AbusePrevent.truncheon.messages.sign + 'автоматическая защита затронутой страницы';
};
AbusePrevent.truncheon.protect = function () {
try {
var page = AbusePrevent.diffBase.properties.title;
} catch (e) { return; }
$.get('/w/api.php?action=query&meta=tokens&format=json', function(data) {
$.post('/w/api.php', {
action: 'protect',
title: AbusePrevent.diffBase.properties.title,
protections: AbusePrevent.settings.defaultProtectionType,
expiry: '3 hours',
reason: AbusePrevent.truncheon.messages.protect(),
token: data.query.tokens.csrftoken
});
});
};
AbusePrevent.truncheon.correct = function (correct_func) {
// todo: possibility of using oldid raw for correction
$.get('/wiki/' + encodeURIComponent(AbusePrevent.diffBase.properties.title) + '?action=raw', function (data) {
$.post('/w/api.php', {
action: 'edit',
title: AbusePrevent.diffBase.properties.title,
summary: AbusePrevent.truncheon.messages.correct(),
text: correct_func(data),
token: mw.user.tokens.get('editToken')
});
});
};
AbusePrevent.truncheon.rollback = function (oldid) {
$.get('/w/index.php', {
action: 'edit',
oldid: oldid
}, function (data) {
AbusePrevent.requestedValue = $(data).find('#wpTextbox1').val();
$.post('/w/api.php', {
action: 'edit',
title: $(data).find('#firstHeading').text().substr(16),
summary: AbusePrevent.truncheon.messages.rollback() + ', фильтр ' + AbusePrevent.filterNumber,
text: AbusePrevent.requestedValue,
token: mw.user.tokens.get('editToken')
});
});
};
AbusePrevent.truncheon.block = function () {
try {
var user = AbusePrevent.diffBase.properties.user;
} catch (e) { return; }
$.get('/w/api.php?action=query&meta=tokens&format=json', function(data) {
$.post('/w/api.php', {
action: 'block',
user: user,
expiry: AbusePrevent.settings.defaultBlockExpiry,
reason: AbusePrevent.truncheon.messages.block(),
nocreate: 1,
noemail: 1,
token: data.query.tokens.csrftoken
});
});
};
AbusePrevent.htmlDiff = function (data, oldSource) {
if (arguments.length > 2) AbusePrevent.hook = arguments[2]
else AbusePrevent.hook = function () {};
AbusePrevent.diff = $(data);
AbusePrevent.diffColumn = AbusePrevent.diff.find('.diff-contentalign-left tbody');
AbusePrevent.diffStrSplit = new RegExp (
'<tr>.*\n.+diff-lineno">.+\n.+diff-lineno.+\n.*<\/tr>.*'
,'g');
AbusePrevent.diffLineTags = AbusePrevent.diff.find('.diff-lineno');
AbusePrevent.diffLines = new Array();
for ( var a = 0; a < AbusePrevent.diffLineTags.length; a += 2 ) {
AbusePrevent.diffLines.push (
Number ( $(AbusePrevent.diffLineTags[a]).text().match(/\d+/)[0] )
);
}
AbusePrevent.diffBase = new Object();
AbusePrevent.diffBase.properties = new Object();
AbusePrevent.diffBase.changes = new Array();
if (AbusePrevent.diff.find('#mw-diff-ntitle2').length > 0) {
/* ---------------------- */
AbusePrevent.diffBase.properties.title = AbusePrevent.diff.find('#firstHeading').text().substr(25).replace(/.$/, '');
if (AbusePrevent.diffBase.properties.title.match(/^[А-ЯЁЙ][а-яёй]+:/g, AbusePrevent.diffBase.properties.title)) {
AbusePrevent.diffBase.properties.namespace = AbusePrevent.diffBase.properties.title.match(/^[А-ЯЁЙ][а-яёй]+/g)[0];
} else AbusePrevent.diffBase.properties.namespace = 0;
AbusePrevent.diffBase.properties.user = AbusePrevent.diff.find('#mw-diff-ntitle2 a bdi').text();
AbusePrevent.diffBase.properties.date = AbusePrevent.diff.find('#mw-diff-ntitle1 strong')
AbusePrevent.diffBase.properties.date = AbusePrevent.diffBase.properties.date.text().replace(/^Версия\s|\s\(.+$/g, '');
AbusePrevent.diffBase.properties.summary = AbusePrevent.diff.find('#mw-diff-ntitle3 .comment').text().replace(/^[\(\)]|[\(\)]$/g, '');
if ($('.mw-tag-marker').length > 0) {
AbusePrevent.diffBase.properties.marker = $('.mw-tag-marker').text()
} else AbusePrevent.diffBase.properties.marker = false;
if (AbusePrevent.diff.find('#differences-nextlink').length > 0) {
return AbusePrevent.done(0);
}
/* ---------------------- */
}
AbusePrevent.diffStrings = AbusePrevent.diffColumn.html().split(AbusePrevent.diffStrSplit).slice(1);
AbusePrevent.locusField = AbusePrevent.extractLoci(oldSource);
for ( var i = 0; i < AbusePrevent.diffStrings.length; i ++ ) {
AbusePrevent.diffString = AbusePrevent.diffStrings[i];
AbusePrevent.stringColumns = $(AbusePrevent.diffString);
for ( var j = 0; j < AbusePrevent.stringColumns.length; j += 2 ) {
AbusePrevent.sch = $(AbusePrevent.stringColumns[j]).html();
if (AbusePrevent.sch === undefined) break;
if ( AbusePrevent.sch.match('<td class="diff-marker"> </td>') ) {
AbusePrevent.diffBase.changes.push (
{
plain_text: [null, null],
removed_parts: null,
added_parts: null,
ra_pairs: null,
common_line: AbusePrevent.diffLines[i],
common_locus: AbusePrevent.determineLocus (
AbusePrevent.locusField,
AbusePrevent.diffLines[i]
)
}
);
}
else if (
!AbusePrevent.sch.match('<td class="diff-marker"> </td>')
&& AbusePrevent.sch.match(/<td class="diff-marker">[−+]<\/td>/g).length == 1
) {
AbusePrevent.lonelySign = AbusePrevent.sch.match(/<td class="diff-marker">[−+]<\/td>/g)[0]
AbusePrevent.lonelySign = AbusePrevent.lonelySign.replace('<td class="diff-marker">', '')[0]
AbusePrevent.scannedClass = AbusePrevent.lonelySign == '+' ? '.diff-addedline' : '.diff-deletedline';
AbusePrevent.addedText = $(AbusePrevent.stringColumns[j]).find(AbusePrevent.scannedClass).text();
AbusePrevent.diffBase.changes.push (
{
plain_text: [ null, AbusePrevent.addedText ],
removed_parts: null,
added_parts: AbusePrevent.addedText,
ra_pairs: new Array(['', AbusePrevent.addedText]),
common_line: AbusePrevent.diffLines[i],
common_locus: AbusePrevent.determineLocus (
AbusePrevent.locusField,
AbusePrevent.diffLines[i]
)
}
);
}
else {
AbusePrevent.dbPush = new Object();
AbusePrevent.dbPush.plain_text = [
$(AbusePrevent.stringColumns[j]).find('.diff-deletedline').text(),
$(AbusePrevent.stringColumns[j]).find('.diff-addedline').text()
];
AbusePrevent.dbPush.removed_parts = new Array();
AbusePrevent.dbPush.added_parts = new Array();
AbusePrevent.dbPush.ra_pairs = new Array();
AbusePrevent.dbPush.common_line = AbusePrevent.diffLines[i];
AbusePrevent.dbPush.common_locus = AbusePrevent.determineLocus (
AbusePrevent.locusField,
AbusePrevent.diffLines[i]
);
AbusePrevent.deletedParts = $(AbusePrevent.stringColumns[j]).find('td div del.diffchange-inline');
AbusePrevent.addedParts = $(AbusePrevent.stringColumns[j]).find('td div ins.diffchange-inline');
for ( var q = 0; q < AbusePrevent.deletedParts.length; q ++ ) {
AbusePrevent.dbPush.removed_parts.push (
$(AbusePrevent.deletedParts[q]).text()
);
}
for ( var e = 0; e < AbusePrevent.addedParts.length; e ++ ) {
AbusePrevent.dbPush.added_parts.push (
$(AbusePrevent.addedParts[e]).text()
);
}
AbusePrevent.dbPartsMax = null;
if (AbusePrevent.dbPush.added_parts.length > AbusePrevent.dbPush.removed_parts.length) {
AbusePrevent.dbPartsMax = AbusePrevent.dbPush.added_parts.length;
}
else if (AbusePrevent.dbPush.added_parts.length < AbusePrevent.dbPush.removed_parts.length) {
AbusePrevent.dbPartsMax = AbusePrevent.dbPush.removed_parts.length;
}
else if (AbusePrevent.dbPush.added_parts.length == AbusePrevent.dbPush.removed_parts.length) {
AbusePrevent.dbPartsMax = AbusePrevent.dbPush.added_parts.length;
}
for ( var c = 0; c < AbusePrevent.dbPartsMax; c ++ ) {
AbusePrevent.dbPush.ra_pairs.push (
new Array (
(AbusePrevent.dbPush.removed_parts[c] !== undefined ? AbusePrevent.dbPush.removed_parts[c] : ""),
(AbusePrevent.dbPush.added_parts[c] !== undefined ? AbusePrevent.dbPush.added_parts[c] : "")
)
)
}
AbusePrevent.diffBase.changes.push (AbusePrevent.dbPush);
}
}
}
AbusePrevent.hook();
};
AbusePrevent.getDiff = function (from, to) {
AbusePrevent.oldid = from;
$.get('/w/index.php', {diff: to, oldid: from}, function (data) {
AbusePrevent.diffData = data;
AbusePrevent.getOldidRaw(from, AbusePrevent.htmlDiff, data);
});
};
AbusePrevent.extractLoci = function (source) {
AbusePrevent.sourceSplitted = source.split(/\n/g);
AbusePrevent.extractedLoci = new Object();
for ( var i = 0; i < AbusePrevent.sourceSplitted.length; i ++ ) {
if ( AbusePrevent.sourceSplitted[i].match(/={2,}/g) ) {
AbusePrevent.stitle = AbusePrevent.sourceSplitted[i].match(/={2,}[^=]+={2,}/g)[0];
AbusePrevent.stitle = AbusePrevent.stitle.replace(/={2,}\s*|\s*={2,}/g, '');
AbusePrevent.stitleCodes = {
'Морфологические и синтаксические свойства' : 'morpho-syntax',
'Произношение' : 'pronunciation',
'Семантические свойства' : 'semantic',
'Значение' : 'meaning',
'Синонимы' : 'onyms',
'Антонимы' : 'onyms',
'Гиперонимы' : 'onyms',
'Гипонимы' : 'onyms',
'Родственные слова' : 'cognats',
'Этимология' : 'etymology',
'Фразеологизмы и устойчивые сочетания' : 'phrases',
'Пословицы и поговорки' : 'phrases',
'Перевод' : 'translation',
'Библиография' : 'bottom'
};
AbusePrevent.stitlePriority = [
'morpho-syntax', 'pronunciation', 'semantic', 'meaning', 'onyms', 'cognats', 'etymology',
'phrases', 'translation', 'bottom'
];
if (AbusePrevent.stitleCodes[AbusePrevent.stitle] !== undefined) {
AbusePrevent.extractedLoci[i] = AbusePrevent.stitleCodes[AbusePrevent.stitle];
}
}
}
return AbusePrevent.extractedLoci;
};
AbusePrevent.getOldidRaw = function (oldid, hook, data_sent) {
AbusePrevent.oldid = oldid;
$.get('/w/api.php', {
action: 'query',
prop: 'revisions',
rvprop: 'content',
format: 'json',
revids : oldid
}, function (data) {
for (var id in data.query.pages) {
//hook(data_sent, data.query.pages[id].revisions[0]['*']);
hook(data_sent, data.query.pages[id].revisions[0]['*'], AbusePrevent.filterRules);
}
});
};
// TODO: if there is a {{-lang-}} separator between the locus and the diff string, the diff string should not be confused with the locus
AbusePrevent.determineLocus = function(locField, stringIndex) {
AbusePrevent.majorIndices = new Array();
for (var index in locField) {
if (stringIndex >= index) {
AbusePrevent.majorIndices.push(index);
}
}
AbusePrevent.majorIndices.sort (function(a, b){
return b - a
});
return locField[AbusePrevent.majorIndices[0]];
};
if ( ! window.localStorage.AbusePrevent ) {
window.localStorage.setItem('AbusePrevent', JSON.stringify({
done_iterations : 0,
user_edits : {},
affected_pages : {}
}));
}
AbusePrevent.do_if = function (section, name, op, value, func) {
return;
/*if ( ['<', '==', '>', '<=', '>=', '==='].indexOf(op) === -1 ) return;
if ( eval(
"JSON.parse(window.localStorage.getItem('AbusePrevent'))[section][name]" + op + "value"
)) {
func();
} else return;*/
};
AbusePrevent.done = function (code) {
/*AbusePrevent.wls = JSON.parse(window.localStorage.getItem('AbusePrevent'));
if (code !== 0) {
var incr = function (section, name) {
if ( ! AbusePrevent.wls[section][name] ) AbusePrevent.wls[section][name] = 1
else AbusePrevent.wls[section][name] ++;
};
incr('affected_pages', AbusePrevent.diffBase.properties.title);
incr('user_edits', AbusePrevent.diffBase.properties.user);
}
if ( AbusePrevent.wls.done_iterations > AbusePrevent.settings.clearStorageAfter ) {
window.localStorage.removeItem('AbusePrevent');
} else {
AbusePrevent.wls.done_iterations ++;
window.localStorage.setItem('AbusePrevent', JSON.stringify(AbusePrevent.wls));
}*/
AbusePreventHandler.done();
};
try {
if (AbusePreventHandler == 1) {
throw "AbusePrevent Fatal Error: No final function was specified!";
}
} catch (e) {
throw "AbusePrevent Fatal Error: No final function was specified!";
}