Benutzer:Codeispoetry/regengine.js
Erscheinungsbild
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
/*global DOM, SimpleAjax, addOnloadHook, wgCanonicalNamespace, wgScript */
var RegEngine = {
regexe: [],
init: function () {
if(typeof SimpleAjax !== 'undefined') {
SimpleAjax.get(wgScript + '?title=Benutzer:Codeispoetry/Kosmetika&action=raw', null, RegEngine.parseRegex);
} else {
mw.log.error('There is a dependency problem in how this gadget is loaded.');
}
},
parseRegex: function (req) {
var lines = req.responseText.split('\n');
var curReg = null;
for (var n = 0 ; n < lines.length ; ++n) {
var line = lines[n].match(/^\s*(<\/?\s*[Pp][Rr][Ee]\s*>\s*|#.+|([^\s#]+):\s+(.+))?$/);
if (!line) {
throw "Error parsing file at line " + n + " (" + lines[n] + ')';
} else if (line[2] && line[3]) {
if (line[2] === 'RE') {
var regmatch = line[3].match(/^\/(.*)\/(.*)$/);
if (!regmatch) {
throw "Error parsing file at line " + n + " (" + lines[n] + ')';
}
curReg = {};
RegEngine.regexe.push(curReg);
curReg.re = new RegExp(regmatch[1], regmatch[2]);
} else if (line[2] === 'KO') {
if (!curReg) {
throw "no regex while trying to add target from line " + n;
}
regmatch = line[3].match(/^'(.*)'\s*$/);
if (!regmatch) {
throw "Error parsing file at line " + n + " (" + lines[n] + ')';
}
curReg.ko = regmatch[1].replace(/\\n/g, '\n');
} else if (line[2] === 'QA') {
if (!curReg) {
throw "no regex while trying to add qa from line " + n;
}
curReg.qa = RegEngine.qaToHash(line[3]);
} else {
throw 'unidentified line at ' + n;
}
}
}
RegEngine.firstJob();
},
executeRegex: function (target, qa) {
target = target || DOM.get('wpTextbox1');
qa = qa || {auto: false};
if (typeof qa.target === 'undefined')
qa.target = (['', 'Category', 'Image'].indexOf(wgCanonicalNamespace) > -1) ? 0 : 1;
for (var n = 0 ; n < RegEngine.regexe.length ; ++n) {
if (RegEngine.regexe[n].qa.target >= qa.target && (!qa.auto || RegEngine.regexe[n].qa.auto)) {
target.value = target.value.replace(RegEngine.regexe[n].re, RegEngine.regexe[n].ko);
}
}
},
qaToHash: function (str) {
var items = str.split(', ');
var hash = {};
if (items.indexOf('seite') > -1) {
hash.target = 1; //alle seiten
} else {
hash.target = 0; //textseiten
}
if (items.indexOf('automatisch') > -1) {
hash.auto = true;
} else {
hash.auto = false;
}
return hash;
},
firstJob: function () {
RegEngine.executeRegex(DOM.get('wpTextbox1'), {auto: true});
}
};
$(RegEngine.init);