Zum Inhalt springen

Benutzer:Androl/autoformat.js

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 13. Januar 2010 um 22:40 Uhr durch Androl (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.

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
/**
 * Blendet eine "Auto-Format"-Funktion unter dem Bearbeitungsfenster ein, die
 * viele typische Wikifizierungs-Fehler automatisch korrigiert.
 * Eine ausführliche Beschreibung ist auf der Diskussionsseite zu finden.
 */

function doAutoformat(a)
{
	var e = document.forms["editform"].elements;
	var b = e["wpTextbox1"];
	var t = b.value;

	// Links ohne Leerzeichen
	t = t.replace(/\[\[\s*/g, "[[");
	t = t.replace(/\s*\]\]/g, "]]");

	// Parameter bei Dateieinbindung in einheitlicher Reihenfolge
	t = t.replace(/(Datei:[^\|]*)\|([^\]\n]*\|)?\s*(upright|hochkant)\s*(=\s*[^\|\s]*)?\s*\|/gi, "$1|hochkant$4|$2");
	t = t.replace(/\|hochkant=\s*/gi, "|hochkant=");
	t = t.replace(/(Datei:[^\|]*)\|([^\]\n]*\|)?\s*(left|links)\s*\|/gi, "$1|links|$2");
	t = t.replace(/(Datei:[^\|]*)\|([^\]\n]*\|)?\s*(right|rechts)\s*\|/gi, "$1|rechts|$2");
	t = t.replace(/(Datei:[^\|]*)\|([^\]\n]*\|)?\s*(thumb|miniatur)\s*\|/gi, "$1|miniatur|$2");
	t = t.replace(/\|miniatur\|rechts\|/gi, "|miniatur|");

/*	// Tabellensyntax
	// Leerzeichen um "|"
	t = t.replace(/\|/g, " | ");
	// Leerzeichen entfernen
	t = t.replace(/\|  \|/g, "||");
	t = t.replace(/\n(\s*) \|/g, "\n$1|");
	t = t.replace(/\{ \|/g, "{|");
	t = t.replace(/\| \}/g, "|}");
	t = t.replace(/\| -+/g, "|-");
	t = t.replace(/\[\[([^\|\]]*[^\|\] ]) *\| *([^\]]*)\]\]/g, "[[$1|$2]]");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/\{\{([^\}]*[^\} ])(\s*) \| ([^\}]*)\}\}/g, "{{$1$2|$3}}");
	t = t.replace(/ +\|/g, " |");
	t = t.replace(/\| +/g, "| ");
	t = t.replace(/\| \n/g, "|\n");
*/

	// Leerzeichen vor/nach ||
	t = t.replace(/\|\|/g, " || ");
	t = t.replace(/(\s) *\|\|/g, "$1||");
	t = t.replace(/\|\| *(\s)/g, "||$1");
	// Leerzeichen nach \n| außer |- |+ |} ||
	t = t.replace(/\n\| */g, "\n| ");
	t = t.replace(/\n\| (-|\+|\}|\|[^\|\n])/g, "\n|$1");
	// |---- -> |-
	t = t.replace(/\n\|-+( ?)/g, "\n|-$1");
	t = t.replace(/\n\|- *\n\|-/g, "\n|-");

	// Überschriftszeilen mit "!"
	t = t.replace(/\s*!!\s*/g, " !! ");
	t = t.replace(/\n!\s*/g, "\n! ");

	// Listensyntax
	t = t.replace(/\n([\*#:;]+)\s*(\S)/g, "\n$1 $2");
	t = t.replace(/\n# (WEITER|SORT)/g, "\n#$1");

	// Datum entlinken
	t = t.replace(/\[\[([12]?[0-9]{3})\]\]/g, "$1");
	t = t.replace(/\[\[0?([123]?[0-9]. (Januar|Jänner|Februar|März|April|Mai|Juni|Juli|August|September|Oktober|November|Dezember))\]\]/g, "$1");

	// Formatierung asd="fgh"
	t = t.replace(/(align|span|size|width|color) *= *"? *(#? *\w*) *"? *(;?) */g, "$1=\"$2\" ");
	t = t.replace(/color="#? *(\w{6})"/g, "color=\"#$1\"");
	// Leerzeichen nach asd="fgh" |
	t = t.replace(/(="#?\w*" \|) *([^\n])/g, "$1 $2");
	// !-Zeile ohne align=center
	t = t.replace(/! *([^\n\| ;][^\n\|;]*[^\n\| ;]);? *align="?center"?;? */g, "! $1 ");
	t = t.replace(/! *align="?center"?(;? (\| )?)/g, "! ");
	// !-Zeile ohne '''fett'''
	t = t.replace(/\n! ([^'\n]*)'''([^'\n]*)'''/g, "\n! $1$2");

	// Leerzeile vor und nach Vorlagen
	t = t.replace(/([^\|\{\n])\n+\{\{/gi, "$1\n\n{{");
	t = t.replace(/\}\}\n+([^\|\}\*\n])/gi, "}}\n\n$1");
	t = t.replace(/\}\}\n+{\{/gi, "}}\n{{");

	// Leerzeile vor und nach Bildern
	t = t.replace(/([^\|\n])\n+\[\[Datei:/g, "$1\n\n[[Datei:");
	t = t.replace(/\[\[Datei:(.*)\n+([^\|\n])/g, "[[Datei:$1\n\n$2");
	t = t.replace(/tei:([^\n]*)\n\n\[\[Da/g, "tei:$1\n[[Da");

	// Leerzeile vor und nach Überschriften
	t = t.replace(/\s*\n=/g, "\n\n=");
	t = t.replace(/=\s*\n\s*/g, "=\n");

	// Interwikis ohne Leerzeilen
	t = t.replace(/(\[\[[^\|\]:]{2,}:[^\|\]:]+\]\])\n*/g, "$1\n");

	// circa
	t = t.replace(/(circa|zirka) /g, "etwa ");
	t = t.replace(/(Circa|Zirka) /g, "Etwa ");

	// Vorlagenparameter
	// kein Leerzeichen nach |
	t = t.replace(/\n *\| ([^\n\|=]*)=/g, "\n|$1=");
	t = t.replace(/\n *\|([-\+]?)(\w*(align|span|color|style|width)=")/g, "\n|$1 $2");
	// | an den Zeilenanfang
	t = t.replace(/ *\|\n([\wäöüßÄÖÜ-\/]* *=)/g, "\n|$1");
	t = t.replace(/(\n\|[^\n=-][^\n=]*[^\n= ])= *([^\n\|= ][^\n\|=]*)?\n/g, "$1 = $2\n");
	t = t.replace(/(\n\|[^\n=-][^\n=]*[^\n= ])= *([^\n\|= ][^\n\|=]*)?\n/g, "$1 = $2\n");
	// Leerzeichen nach =
	t = t.replace(/ = *([^=])/g, " = $1");
	// -überfl. |
	t = t.replace(/\|\s*\n\}/g, "\n}");

	t = t.replace(/ +\n/g, "\n");

	// Einzelnachweise
	t = t.replace(/== .* ==\n(<references \/>)/g, "== Einzelnachweise ==\n$1");

	// Kommazahlen
	t = t.replace(/([0-9])\.([0-9]{1,2})( %|&nbsp;)/g, "$1,$2$3");

	// Metadaten Einwohner
	t = t.replace(/#time: j. F Y \| \{\{Metadaten Einwohnerzahl ([A-Z-]*)\|TIMESTAMP/g, "EWD|$1");


	if (t != b.value.replace(/\r+\n/g, "\n"))
	{
		b.value = t;
		a.style.color = "green";
		//e["wpDiff"].click();
	}
	else
		a.style.color = "silver";
	return false;
}

function doAutoformatCH(a)
{
	var e = document.forms["editform"].elements;
	var b = e["wpTextbox1"];
	var t = b.value;


	// Zahlen
	t = t.replace(/\.([0-9]{3})\b/g, "'$1");

	// „“ -> «»
	t = t.replace(/„([^„“]+)“/g, "«$1»");

	// Höhe m.ü.M.
	t = t.replace(/( |&nbsp;)*m(etern?|\.)?( |&nbsp;)*ü(ber|\.)?( |&nbsp;)*M(eer)?\.?/gi, " m ü. M.");
	t = t.replace(/(([0-9])')?([0-9]+) m ü\. M\./g, "{{Höhe|$2$3|CH}}");
	t = t.replace(/(([0-9])')?([0-9]+)( |&nbsp;)*\[\[[\wäöü ]*\| m ü\. M\.\]\]/g, "{{Höhe|$2$3|CH|link=true}}");

	// sbz
	t = t.replace(/(schweizbezogen *-->)\s*\{\{/g, "$1\n{{");

	// BKSK
	t = t.replace(/(Begriffsklärung Schweizer Kanton\|\w\w\|)(Aargau|Appenzell Ausserrhoden|Basel-Landschaft|Basel-Stadt|Bern|Freiburg|Genf|Glarus|Graubünden|Jura|Appenzell Innerrhoden|Luzern|Neuenburg|Nidwalden|Obwalden|Schaffhausen|Schwyz|Solothurn|St. Gallen|Tessin|Thurgau|Uri|Waadt|Wallis|Zug|Zürich)\|/g, "$1");

	// BEZIRK
	t = t.replace(/\|BEZIRK.*kennt keine[^\n]*\n/g, "");
	t = t.replace(/\|BEZIRK = \[\[(.*) \(\w*\)\|.*\]\]\n/g, "|BEZIRK = $1\n");

	// EINWOHNER
	t = t.replace(/(\|GEMEINDE =(.*\n)*)(\|EINWOHNER = *[^\n]*\n)/g, "$1$3$3");
	t = t.replace(/(\|GEMEINDE =(.*\n)*)(\|STAND_EINWOHNER = *[^\n]*\n)/g, "$1$3$3");
	t = t.replace(/(Infobox Ort in der Schweiz(.*\n)*)(\|EINWOHNER = *[^\n]*\n)/g, "$1<!--Einwohner werden automatisch ergänzt-->\n");
	t = t.replace(/(\|EINWOHNER = *[^\n]*\n)<!--Einwohner werden automatisch ergänzt-->\n/g, "$1");
	t = t.replace(/(Infobox Ort in der Schweiz(.*\n)*)(\|STAND_EINWOHNER = *[^\n]*\n)/g, "$1");

	// Kanton
	t = t.replace(/(\\[\[Kanton .Schweiz..Kanton.. ..Kanton ([\w äöü]+)\|([\w äöü]+)\]\]/g, "[[Kanton $1]]");
	t = t.replace(/(\\[\[Kanton .Schweiz..Kantons.. ..Kanton ([\w äöü]+)\|([\w äöü]+)\]\]/g, "[[Kanton $1|Kantons $1]]");


	if (t != b.value.replace(/\r+\n/g, "\n"))
	{
		b.value = t;
		a.style.color = "green";
		//e["wpDiff"].click();
	}
	else
		a.style.color = "silver";
	return false;
}

addOnloadHook(function()
{
	var vForm = document.getElementById("editform");
	if (!vForm) return;

	var vLink = document.createElement("A");
	vLink.href = "#";
	vLink.onclick = function() { return doAutoformat(this); }
	vLink.appendChild(document.createTextNode("Autoformat"));

	var vLinkCH = document.createElement("A");
	vLinkCH.href = "#";
	vLinkCH.onclick = function() { return doAutoformatCH(this); }
	vLinkCH.appendChild(document.createTextNode("CH"));

	var vElemente = vForm.getElementsByTagName("SPAN");
	for (var i = vElemente.length - 1; i >= 0; i--)
		if (vElemente[i].className === "editHelp")
		{
			vElemente = vElemente[i];
			break;
		}
	vElemente.appendChild(document.createTextNode(" | "));
	vElemente.appendChild(vLink);
	vElemente.appendChild(document.createTextNode(" | "));
	vElemente.appendChild(vLinkCH);
});