Wikipedia:Technik/Skin/JS/VisualEditor

(Weitergeleitet von Wikipedia:JS/VE)

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

Bearbeiten

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

Bearbeiten

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

Bearbeiten

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

Bearbeiten

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 1733049791.123
track()
trackSubscribe()
trackSubscribeAll()
Initial vorhanden
Vergleiche mw.track() usw.

Komponenten mw.libs.ve

Bearbeiten
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: null
  • firefox: [ [ "<"], 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

Bearbeiten

Mittels mw.config sind zwei Objekte zugänglich:

  1. wgVisualEditor mit den Komponenten
    • magnifyClipIconURL
    • pageLanguageCode
    • pageLanguageDir
  2. 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.

mw.hook

ve.activationComplete
Run code when VisualEditor is activated and ready to use

target, surface, model, fragment

Bearbeiten
  • target ist ein Objekt, das Informationen über die Arbeitsumgebung des VE enthält.
    • Die surface ist darin enthalten.
    • target ist Komponente von ve.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:
      1. Baumstruktur
      2. 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

Bearbeiten

(in der Regel englischsprachig)

MediaWiki: VisualEditor/Gadgets – Freie Wikisoftware (englisch)