Wikipedia:Technik/Skin/JS/VisualEditor
VisualEditor und JavaScript
Auf dieser Seite wird dargestellt, wie sich der VisualEditor (VE) von Programmierern ansprechen lässt, um zusätzliche Funktionen anzubieten, auch während der Bearbeitung den momentanen Wikitext auszulesen oder zu ersetzen.
Dokumentation
Eine geschlossene Dokumentation gibt es derzeit nicht. MW empfiehlt, den (minimierten) Quellcode des VE herunterzuladen, mittels Hilfswerkzeugen in eine zeilenweise durch Menschen lesbare Form zu bringen (ohne Kommentarzeilen). Statt des minimierten Codes könne man auch ?debug=1
an die URL anhängen, um auch die Kommentarzeilen und die Entwicklerversion des Quellcodes zu erhalten; dies solle jedoch eine schlechte Idee sein, weil dann das Herunterladen mehrere Minuten dauern könne. Welche URL zu verwenden sei, möge man durch Debuggen einer Wiki-Seite herausfinden, in der der VE voll aktiv sei.
Danach wären in einem interaktiven Debugger Breakpoints in den Quellcode zu setzen, mit deren Hilfe sich herausfinden ließe, welche Aktivität im VE welche Stellen des Quellcodes aktivieren würden. Daraus ließen sich dann Schlüsse für die eigenen Programmierungsabsichten ziehen.
Die Aussicht auf eine Dokumentation wäre düster – “Since there is no good documentation yet for VisualEditor, and may never be”. Wie die Entwickler ihr Wirken koordinieren und effizient arbeiten können, bleibt ebenso im Dunkeln.
VE-Objekt
Das Anwendungsobjekt für den VE residiert global und trägt den Bezeichner ve
(also window.ve
).
Ein weiteres Objekt mw.libs.ve
residiert in der Bibliothekssammlung des mediaWiki-Objekts.
Existenz und Aktivitätsstatus
Das VE-Objekt müsste immer vorhanden sein; ebenso mw.libs.ve
.
Ob seines kurzen Namens ist jedoch dringend ratsam, zunächst Typ- und Plausibilitätsüberprüfungen vorzunehmen. Ein nicht gekapseltes Benutzerskript könnte es mit einer Variablen für Verkehrserhebung, Verpackungseinheit oder Vereins… überschrieben haben.
if ( typeof ve === "object" && ve && typeof ve.now === "function" ) {
// Go on.
} else {
console.error( "VisualEditor object unavailable" );
}
Komponenten ve
Die Komponenten sind in der Regel erst vorhanden, nachdem der VE für einen Wikitext aktiviert wurde.
- api
- Objekt
- ve.api.registerAnnotation( key, descriptor )
- dm
- Objekt
- Datenmodell
- ve.dm.SurfaceFragment( surface, range )
- init
- Objekt
- VE wurde vollständig initialisiert
ve.init.target
Es soll etwas bearbeitet werden.ve.init.target.active
Es wird momentan etwas mit VisualEditor bearbeitet.
- now()
- Initial vorhanden
- Liefert Gleitkommazahl mit Sekunden.Millisekunden
- Unixzeit, zu der das Startpaket aufgebaut worden war; etwa
1733577990.123
- track()
- trackSubscribe()
- trackSubscribeAll()
- Initial vorhanden
- Vergleiche
mw.track()
usw.
Komponenten mw.libs.ve
- activateVe(mode)
- Initial vorhanden
- addPlugin(plugin)
- Initial vorhanden
- Eigenes Skript laden, wenn VE zur Bearbeitung gestartet wird.
plugin=
moduleID eines Projekt-Gadgets.mw.libs.ve.addPlugin( "ext.gadget.projektGadget" );
plugin=
function, die eine Ressourcen-URL zurükgibt.mw.libs.ve.addPlugin( function () { return "https://URL.of/user.js"; } );
- blacklist
- Objekt
- Initial vorhanden
- Ungeeignete Browser-Typen
android
:[ [ "<"], 3 ]
blackberry
: nullfirefox
:[ [ "<"], 11 ]
msie
:[ [ "<="], 8 ]
opera
:[ [ "<"], 12 ]
safari
:[ [ "<="], 6 ]
silk
: null
- isAvailable
- Initial vorhanden
- true
- isSingleEditTab
- Initial vorhanden
- false
- isUnmodifiedLeftClick(e)
- Initial vorhanden
- isVisualAvailable
- Initial vorhanden
- false
- isWikitextAvailable
- Initial vorhanden
- false
- onEditSectionLinkClick(mode,e,section)
- Initial vorhanden
- onEditTabClick(mode,e)
- Initial vorhanden
- setEditorPreference(editor)
- Initial vorhanden
- setupMultiSectionLinks()
- Initial vorhanden
- setupMultiTabSkin()
- Initial vorhanden
- setupMultiTabs()
- Initial vorhanden
- targetLoader
- Objekt
- Initial vorhanden
Konfigurationsvariablen
Mittels mw.config
sind zwei Objekte zugänglich:
wgVisualEditor
mit den Komponenten- magnifyClipIconURL
- pageLanguageCode
- pageLanguageDir
wgVisualEditorConfig
mit den Komponenten- enableExperimentalCode
- enableSectionEditLinks
- isPageWatched
- reportProblemURL="http://parsoid.wmflabs.org/_bugs/"
- Letztere schrieb bis zur Entwicklerversion Anfang Juni 2013 automatisch auf die genannte URL einen Bericht mit den Benutzerdaten, -Aktivitäten sowie dem vollständigen Inhalt der HTML-Seite (zunächst nur der BODY; Erweiterung auf den HEAD gewünscht) – über ein ungesichertes Protokoll) nebst allen benutzerseitig vorgenommenen Anpassungen der Seite; mutmaßlich wenn ⧼visualeditor-savedialog-label-review-wrong⧽ gedrückt wird – vielleicht auch in sonstigen Problemsituationen. Dieser Bericht ist nicht einsehbar; eine Rückfrage erfolgt nicht.
- Am 7. Juni 2013 wurde dies aus der Entwicklung genommen.
Hooks
- ve.activationComplete
- Run code when VisualEditor is activated and ready to use
target, surface, model, fragment
target
ist ein Objekt, das Informationen über die Arbeitsumgebung des VE enthält.- Die surface ist darin enthalten.
target
ist Komponente vonve.init
(nach der ersten Aktivierung des VE).
- surface ist ein Objekt, das document, selection und history of transactions eines Editiervorgangs enthält.
- Das model ist darin enthalten.
- model ist ein Objekt, das den bearbeiteten Text in strukturierter Form enthält.
- Das fragment und die momentane selection sind darin enthalten.
- Das model wird simultan und synchronisiert in zwei Strukturen bereitgehalten:
- Baumstruktur
- Lineare Anordnung
- selection ist ein Objekt, das den markierten Textbereich enthält; die Cursor-Position ist ansonsten ein Textbereich, bei dem Anfangs- und Endposition gleich sind.
- fragment ist ein Objekt, das einen gerade interessanten Textbereich enthält; somit auch die in diesem Bereich enthaltenen Textkomponenten.
- Skripte können dies verändern.
var surfaceModel = ve.init.target.getSurface().getModel();
Weitere Informationen
(in der Regel englischsprachig)
- mw:VisualEditor/API – zurzeit sehr spärlich
- Data Model/Annotations – Datenmodell zur Erweiterung von VE-Textkomponenten um benutzerdefinierte Zusatzinformationen
- Data Model/Surface – Datenmodell zur Verwaltung der Änderungen am Text
- User Interface – Elemente der Benutzeroberfläche