Benutzer:Codeispoetry/regengine.js

aus Wikipedia, der freien Enzyklopädie

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
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*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);