Benutzer:Revolus/Datei-syntax-updater.js
Zur Navigation springen
Zur Suche springen
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
/**
* Aus [[:de:Benutzer:Revolus/Datei-syntax-updater.js]]
* Einbinden mit importScript("Benutzer:Revolus/Datei-syntax-updater.js"); in deine [[Spezial:Mypage/monobook.js]]
*/
function rev_syntax() {
var eb = document.getElementById("wpTextbox1");
if(!eb || eb.getAttribute("readonly")) return;
function vllt(s) { return "(?:" + s + ")?"; }
function trim(s) { return "\\s*" + s + "\\s*"; }
function link(s) { return "\\[\\[" + s + "\\]\\]"; }
function extl(s) { return "\\[" + s + "\\]"; }
function oder(a) { return "(?:" + a.join("|") + ")"; }
var plainZeichen = "[^\\|\\[\\]\\{\\}]";
var htmlZeichen = "[^\\|\\[\\]\\{\\}]";
var dateiPattern = "[ _]*"+ oder(["[Dd][Aa][Tt][Ee][Ii]", "[Ff][Ii][Ll][Ee]", "[Bb][Ii][Ll][Dd]", "[Ii][Mm][Aa][Gg][Ee]"]) + "[ _]*:[ _]*" + "(" + plainZeichen + "+?)[ _]*";
var extlinkPattern = extl(plainZeichen+"+" + vllt(" " + plainZeichen+"*"));
var wikilinkPattern = link(plainZeichen+"+" + vllt("\\|" + plainZeichen+"*"));
var paramPattern = oder([plainZeichen+"*?", wikilinkPattern, extlinkPattern]);
var innerRegex = new RegExp(trim("(" + paramPattern + "*?)") + "(\\||$)", "g");
var outerRegex = new RegExp(link(dateiPattern + vllt("\\|(" + vllt(oder(["\\|", paramPattern])+"*") + ")")), "g");
function bildHandler(_, file, attrs) {
var nowiki = false;
var texts = [];
var attribute = {
"miniatur": false,
"gerahmt": false,
"rahmenlos": false,
"rand": false,
"links": false,
"rechts": false,
"ohne": false,
"zentriert": false,
"pixel": "",
"seite": "",
"hochkant" : "",
"verweis": "",
"alternativtext": ""
};
function deepReplace(_, str, delim) {
if((str.length <= 0) || nowiki) {
return "";
}
if(str.indexOf("<nowiki") >= 0) {
nowiki = true;
return "";
}
switch(str) {
case("thumb"): case("thumbnail"): case("miniatur"):
attribute["miniatur"] = true;
return "";
case("left"): case("links"):
attribute["links"] = true;
return "";
case("right"): case("rechts"):
attribute["rechts"] = true;
return "";
case("none"): case("ohne"):
attribute["ohne"] = true;
return "";
case("center"): case("centre"): case("zentriert"):
attribute["zentriert"] = true;
return "";
case("frame"): case("framed"): case("enframed"): case("gerahmt"):
attribute["gerahmt"] = true;
return "";
case("frameless"): case("rahmenlos"):
attribute["rahmenlos"] = true;
return "";
case("border"): case("rand"):
attribute["rand"] = true;
return "";
case("upright"): case("hochkant"):
attribute["hochkant"] = true;
return "";
default: {
var e = /^(page|seite|upright|hochkant|alt(?:ernativtext)?|link|verweis)=\s*(.*?)\s*$/.exec(str);
if(e) {
switch(e[1]) {
case("page"):
case("seite"):
// ignorieren: ich konnte noch nicht herausfinden,
// was das überhaupt ist ...
break;
case("upright"):
case("hochkant"):
attribute["hochkant"] = "hochkant=" + e[2];
return "";
case("alt"):
case("alternativtext"):
attribute["alternativtext"] = "alternativtext=" + e[2];
return "";
case("link"):
case("verweis"):
attribute["verweis"] = "verweis=" + e[2];
return "";
}
}
e = /^\s*(\d*x?\d+px)\s*$/.exec(str);
if(e) {
attribute["pixel"] = e[1];
return "";
}
}
}
texts.push(str);
return "";
}
if(!attrs || (attrs.length == 0)) {
return "[[Datei:" + file + "]]";
} else {
attrs.replace(innerRegex, deepReplace);
if(nowiki) {
return "[[Datei:" + file + "|" + attrs + "]]";
} else {
var mitte = "";
if(attribute["miniatur"]) {
attribute["rechts"] = false;
}
for(var i in attribute) {
var mitteAlt = mitte;
switch(typeof(attribute[i])) {
case("boolean"): if(attribute[i]) {
mitte += "|" + i;
} break;
case("string"): if(attribute[i].length > 0) {
mitte += "|" + attribute[i];
} break;
}
}
var rechts = "";
for(var i = 0; i < texts.length; ++i) {
rechts += "|" + texts[i];
}
return "[[Datei:" + file + mitte + rechts + "]]";
}
}
}
eb.value = eb.value.replace(outerRegex, bildHandler);
}
if(
(mw.config.get('wgAction') === "edit") &&
(mw.config.get('wgNamespaceNumber') === 0) &&
("x".replace(/x/, function() {
/* schlechte IE-Versionen verstehen das evtl. nicht */
return "y";
}) === "y")
) {
$(rev_syntax);
}