Benutzer:PerfektesChaos/js/WikiSyntaxTextMod/usage/advanced
WikiSyntaxTextMod → Benutzung → Fortgeschritten
Erweiterte Möglichkeiten bestehen, um das Skript interaktiv auszuführen.
Ferner gibt es eine API.
Anwendungsobjekt
Zuerst wäre die Grundstruktur für das Anwendungsobjekt einzurichten, damit einzelne Komponenten zugewiesen werden können:
mw.libs.WikiSyntaxTextMod = { config: { format: { },
lang: { },
load: { },
mod: { },
page: { },
portlet: { },
warn: { } } };
Danach stehen die Komponenten format
, lang
, load
, mod
, page
, portlet
und warn
zur Verfügung und können auch detailliert belegt werden.
Beispiel:
mw.libs.WikiSyntaxTextMod.config.page.oldid = true;
Alternativ können Kenner der JavaScript-Syntax die einzelnen Werte auch gleich in der Objektdefinition zuweisen.
Bei modernen Browserversionen (seit 2011) ist es theoretisch vorstellbar, dass die Lade-Anweisung mw.loader.load()
gleichzeitig und parallel zum aktuellen Skript wirksam wird. Dann könnte es zum gegenseitigen Überschreiben des Anwendungsobjekts und zum Datenverlust kommen. Deshalb sollte vorsorglich das mw.loader.load()
erst nach vollständiger Ausstattung des Anwendungsobjekts erfolgen.
Globale Variablen
Bis Mitte 2012 wurden auch einfache globale Variablen var XYZ = true;
eingesetzt. Dies wird zugunsten der einheitlichen Anwendung und überschaubarer Anzahl globaler Variablen in der Benutzerumgebung nicht mehr unterstützt.
Benutzerdefinierte Warnungen
Es lässt sich vor verdächtigen Elementen warnen.
Wenn das oben dargestellte Anwendungsobjekt zuvor vereinbart wurde, lässt sich vereinbaren:
mw.libs.WikiSyntaxTextMod.config.warn.url = [
];
mw.libs.WikiSyntaxTextMod.config.warn =
{ attribute: [ [ "class", "\\bprettytable\\b" ] ],
entity: [ "shy", "thinsp", "#8209" ],
property: [ "align", "bgcolor", "border", "clear", "compact", "height", "valign" ],
tag: [ "big", "blockquote", "center", "font", "h1", "samp", "u", "var" ],
template: { },
url: [ "\\btagesschau\\.de/",
"\\bard\\.de/"
]
};
Kommt ein externes Link vor, das in der URL irgendwo einen dieser Ausdrücke enthält, wird dies wie eine Fehlermeldung angezeigt.
Zurzeit ist nur attribute entity property tag url
implementiert. Es ist geplant, das auch nach und nach zu implementieren für: builtin char plain template wikilink
Doppelte Parameter in Vorlageneinbindung
Dieser Fehler wird in der Regel nur durch eine intensivierte Analyse gefunden, wenn er sich nicht in einer Standardsituation zufällig herausstellt.
Betroffene Seiten sind auf Kategorie:Wikipedia:Seite mit mehrfachem Parameter in Vorlageneinbindung aufgelistet, sofern die Seite das bereits ausgelöst hatte.
Mit der nachstehenden Anweisung unter Beachtung der voranstehenden Deklarationen lässt sich die vertiefte Untersuchung einschalten, und einfache Fälle werden auch sofort bereinigt:
mw.libs.WikiSyntaxTextMod.config.warn.templateParamDup = true;
Formatierungsspezifikationen
Es lassen sich ab 2015 Details zur Formatierung von Elementen spezifizieren, wenn wie oben die Komponente format
definiert wurde:
mw.libs.WikiSyntaxTextMod.config.format.galleryIndent = 3;
- Die einzelnen Zeilen innerhalb einer
<gallery>
sollen mindestens um die angegebene Zahl von Leerzeichen eingerückt werden (maximal 8).
- Die einzelnen Zeilen innerhalb einer
Weitere Namensräume und/oder Seitentitel einbeziehen oder solche ausschließen
Standardmäßig wird das Skript nur im Artikel-Namensraum des Projektes automatisch aktiv.
Es lassen sich Seiten von der Bearbeitung durch das Skript ausschließen, und es lassen sich Namensräume einbeziehen.
Diskussions-Namensräume bleiben dabei stets ausgeschlossen und lassen sich auf diesem Weg weder versehentlich einbeziehen noch absichtlich erzwingen. Die .js
und .css
der Benutzer sind ebenfalls immer ausgenommen.
Die zu verfeinernden Syntaxkonstruktionen zielen vorrangig auf den Artikel-Namensraum ab. Beim Bearbeiten beispielsweise von Vorlagen, aber auch von Hilfetexten können beabsichtigte Konstrukte (so auch Beispiele für fehlerhafte Syntax) auftreten, die dann zwangsläufig ebenfalls richtiggestellt werden; sie müssten entsprechend formatiert werden (etwa mit <nowiki>).
Diskussions-artige Meinungsäußerungen anderer Benutzer sollte man nicht verändern. Die Wikipedia:Fragen zur Wikipedia muss also ggf. manuell ausgeschlossen werden, und viele andere Seiten aus dem Wikipedia-Namensraum enthalten ebenfalls Stellungnahmen, Meinungsbilder usw.
Es stehen zwei Steuerparameter für die automatische Ausführung zur Verfügung:
.config.page.include
Namensräume und Titel-RE einbeziehen.config.page.exclude
Namensräume und Titel-RE ausschließen
Sie werden in dieser Reihenfolge betrachtet; die Ausschlusskriterien wirken also auch auf gerade eingeschlossene Seiten.
Format
Das Format ist für beide Parameter identisch:
- Es ist ein Feld (Array) mit Ausdrücken (Zeichenkette), die auf den Titel der Seite angewendet werden.
- Jede Zeichenkette wird als Regulärer Ausdruck interpretiert.
- Beginnt die Zeichenkette mit "
:
", dann sichert man die voll qualifizierte Angabe eines Projekt-Namensraums.
Der Beginn ist dann:
DB:
NS:
Dabei istDB
das Projekt; für die deutschsprachige Wikipedia wäre esdewiki
undcommonswiki
für Wikimedia Commons oder auchsvwikisource
.
NS ist die (expandierte) Bezeichnung des Namensraums – also etwaBenutzer
– in der Landessprache. - Groß- und Kleinschreibung werden soweit möglich ignoriert – mindestens im englischsprachigen A–Z der jeweiligen JavaScript-Einbindung des Browsers.
Beispiel
mw.libs.WikiSyntaxTextMod.config.page.include = [
":dewiki:Benutzer:PerfektesChaos/js/",
":dewiki:Benutzer:PerfektesChaos/test/.*richt",
":dewiki:Hilfe:",
":dewiki:Datei:",
":dewiki:Wikipedia:Spielwiese",
"Vorlage:.+/(Doku|Meta)"
];
mw.libs.WikiSyntaxTextMod.config.page.exclude = [
":dewiki:Wikipedia:Fragen zur Wikipedia",
":dewiki:Wikipedia:.*Redundanz/",
":dewiki:Wikipedia:.*Abstimmung",
":dewiki:Wikipedia:Umfrage",
"Löschkandidaten",
"Meinungsbild"
];
bewirkt:
- alle Unterseiten wie gerade diese hier werden einbezogen,
- alle Unterseiten dieses Benutzers unter
test
, die die Zeichenkettericht
enthalten, werden einbezogen, - der Namensraum
Hilfe
der deutschsprachigen Wikipedia wird einbezogen, außerdem die Spielwiese, - die Doku- und Meta-Unterseiten von Vorlagen werden einbezogen, die Vorlagen selbst aber nicht – da sie die Bestandteile der Wikisyntax erst noch kombinieren sollen, würde eine Syntaxpolitur früher oder später zu Bruch führen.
- Die WP:FZW usw. werden ausdrücklich ausgeschlossen (deren Namensraum war aber ohnehin nicht einbezogen), so auch Diskussionen über Redundanz und jegliche „Abstimmung“.
- Jede Seite in irgendeinem Namensraum, in deren Titel eines der Wörter „Löschkandidaten“ oder „Meinungsbild“ vorkommt, wird ausgeschlossen.
Frühere Artikelversionen einbeziehen
In den meisten Fällen soll nur an der aktuellen Artikelversion eine Modifizierung erfolgen.
Enthält die URL der Seite also &oldid=
, wird das Skript nicht aktiv.
Mit der Konfiguration
mw.libs.WikiSyntaxTextMod.config.page.oldid = true;
kann die (manuelle) Aktivierung auf spezifizierte Artikelversionen ausgedehnt werden. Ob &oldid=
zufällig auch die aktuelle Version beschreibt, wird übrigens nicht geprüft.
Manueller Start
Schaltelement definieren
Wer ohnehin selbst definierte Schaltelemente verwendet, kann einen solchen Button mit dem Skript belegen.
Damit lassen sich Probleme bei der ständigen Bindung an zusätzliche Namensräume vermeiden und ein wiederholter Aufruf während der Bearbeitung im Bedarfsfall realisieren.
Dies würde in etwa folgendermaßen aussehen:
if (! mw.config.get("wgIsArticle")) { // Keine Zeitvergeudung beim bloßen Gucken
mw.loader.load("//de.wikipedia.org/w/index.php?title=Benutzer:mirselbst/meiKnopferl.js&action=raw&ctype=text/javascript");
}
Das eigene Benutzerskript mirselbst/meiKnopferl.js
enthält die Vereinbarung der Knöpfe, darunter auch etwas wie
- MeinObjekt
.button_syntaxTM.action = WikiSyntaxTextMod_Run;
Dabei ist WikiSyntaxTextMod_Run eine Funktion, die für genau diese Aktion geeignet und vorgesehen ist.
WikiSyntaxTextMod_Run
gibt den Wert void(0)
zurück. Dies ist für bestimmte Aktionen wichtig.
Das eigene Skript mirselbst/meiKnopferl.js
sollte unter Bedingungen moderner Browser dann auch die loader.load
-Anweisung für WikiSyntaxTextMod enthalten, weil WSTM ansonsten möglicherweise bereits fertig ausgeführt worden ist, bevor meiKnopferl zum Zuge käme. Weil aber die Funktionsdefinition von WikiSyntaxTextMod_Run
erst nach dem Laden von WikiSyntaxTextMod verfügbar ist, muss auf geeignete Weise das beendete Laden abgewartet werden. Es würde sich mw.hook() anbieten.
Automatischen Start unterdrücken
Wenn eine Möglichkeit zum manuellen Start gegeben ist, kann es sinnvoll sein, den automatischen Start durch das Laden zu verhindern, so dass das Skript zunächst nur geladen wird, ohne irgendeine Aktion auszuführen (auch ein Portlet-Link würde nicht ohne ausdrücklichen Wunsch generiert).
mw.libs.WikiSyntaxTextMod.config.load.inhibit = true;
verhindert die Textbearbeitung, die sonst beim Öffnen zum Bearbeiten (action=edit
) erfolgt.
Hat man weder eine eigene manuelle Aktivierung noch API-Aufrufe, so kann das Skript nie tätig werden und das Laden wird sinnlos.
Diese Option ist dafür vorgesehen, dass Benutzer vollständig die Kontrolle über den Skriptablauf übernehmen.
Zusätzliche Seiten manuell bearbeiten
Standardmäßig unterliegt WikiSyntaxTextMod_Run
denselben Freigaben und Einschränkungen wie beim automatischen Aufruf. Mit dem Steuerparameter
.config.page.support
lässt sich analog zu .config.page.include
das zugelassene Spektrum für manuelle Auslösung erweitern. Das Format ist identisch. Die Ausschlussbedingungen .config.page.exclude
haben weiterhin Vorrang.
Wiederholter Aufruf
Automatisch ausgeführt wird das Skript nur beim erstmaligen Öffnen eines Artikels zum Bearbeiten (action=edit
).
Denkbar wäre es, sich selbst einen automatischen Aufruf zu schreiben, der dies während des Bearbeitungsvorgangs wiederholt – beim Anzeigen der Vorschau oder der Änderungen (action=submit
). Dies könnte allerdings durch die umschichtig gezeigten Änderungsseiten ziemlich verwirrend sein.
Von einer automatischen Ausführung beim Speichern (action=save
) ist abzuraten, da dann keine Eingriffsmöglichkeiten mehr bestehen.
Laden ohne Ausführung
Um Funktionen in selbstgeschriebenen Skripten nutzen zu können, muss das JS-Skript geladen werden.
Dabei würde normalerweise automatisch („AutoRun“) die Analyse des Inhaltes eines Editierfensters erfolgen. Um diesen automatischen Ablauf zu vermeiden, sollte dies zunächst wie folgt unterbunden werden:
.config.load.inhibit = true;
Danach kann mit mw.loader.load()
das Skript geladen werden. Dieses enthält nur ein „Kopfmodul“ mit einigen wenigen Basisfunktionen zu Verwaltungszwecken.
Es gibt weitere Module, die die eigentlich am Wikitext arbeitenden Funktionen enthalten. Sie müssen nun erst abgefordert werden:
Dabei ist callback eine benutzerdefinierte Funktion, die nach Abschluss des Ladens aufgerufen wird und innerhalb der dann alle folgenden Aktivitäten stattfinden.
Skript-Aktualisierung
Die Variable .config.load.updater
kann auf eine Zeichenkette mit Regulärem Ausdruck gesetzt werden, der bestimmte Seitentitel beschreibt. Sieht man sich dann eine derart vereinbarte Seite an, wird der Cookie aktualisiert, der im Browser-Cache Modulversionen unterscheidet.
Wenn man beim Einloggen regelmäßig auf eine bestimmte Seite kommt, kann man bereits vor der ersten Bearbeitung sicherstellen, dass der Cookie aktuelle Versionsnummern enthält. Genauso könnte dies an die Beobachtungsliste geknüpft werden:
mw.libs.WikiSyntaxTextMod.config.load.updater = "Beobachtungsliste";