Zum Inhalt springen

Wikipedia:Technik/Skin/JS/VisualEditor

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. März 2017 um 16:51 Uhr durch PerfektesChaos (Diskussion | Beiträge) (Setup). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Vorlage:Überschriftensimulation 1 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 Prpogrammierungsabsichten 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 1747356881.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: 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

Hooks

mw.hook

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 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

(in der Regel englischsprachig)

MediaWiki: VisualEditor/Gadgets – Freie Wikisoftware (englisch)

Fehler bei Vorlage * Parametername unbekannt (Vorlage:MediaWiki): "3"