Benutzer:Prog/EditExtension

Aus Wikibooks
Number Namensraum
0 Standard
1 Standard Diskussion
2 Benutzer
3 Benutzer Diskussion
4 Borpex
5 Borpex Diskussion
6 Datei
7 Datei Diskussion
8 MediaWiki
9 MediaWiki Diskussion
10 Vorlage
11 Vorlage Diskussion
12 Hilfe
13 Hilfe Diskussion
14 Kategorie
15 Kategorie Diskussion
102 Regal
103 Regal Diskussion

Mein EditTool (Benutzer:Prog/EditExtension.js) erweitert, in Abhängigkeit vom Namen einer Seite, die Möglichkeiten zur Editierung. Neben dem Einfügen von Texten sind auch Aufrufe eigener Funktionen möglich. Weiterhin können allen Befehlen Tastenkürzel zugewiesen werden. Die Einrichtung erfolgt in einem Eingabeformat, dass die Syntax von JavaScript ausnutzt.

Eingabeformat[Bearbeiten]

Nachfolgend ist schematisch das Format für die Konfiguration aufgeführt. Alle Angaben sind Optional, wobei die Default-Werte gesetzt werden, wenn die entsprechende Eigenschaft 'undefined', also nicht definiert ist.

function EditExtensionConfig(){
    return [
        {
            'Namespace': [  // Default: []
                INTEGER,
                // ...
            ],
            'Position':    STRING, // Default: 'JSEditExtensionStandard'
            'Titleprefix': STRING, // Default: ''
            'Elements': [ // Default: []
                {
                    'Name':    STRING, // Default: ''
                    'Summary': STRING, // Default: ''
                    'Begin':   STRING, // Default: ''
                    'End':     STRING, // Default: ''
                    'Pre':     STRING, // Default: ''
                    'Post':    STRING, // Default: ''
                    'Action':  STRING, // Default: '', Mögliche Angaben: 'Save', 'Preview', 'Diff'
                    'Key':     STRING, // Default: ''
                    'Call': {
                        'PreBegin': [ // Default: []
                            FUNCTION,
                            // ...
                        ],
                        'PostBegin': [ // Default: []
                            FUNCTION,
                            // ...
                        ],
                        'Middle': [ // Default: []
                            FUNCTION,
                            // ...
                        ],
                        'PreEnd': [ // Default: []
                            FUNCTION,
                            // ...
                        ],
                        'PostEnd': [ // Default: []
                            FUNCTION,
                            // ...
                        ]
                    }
                },
                // ...
            ]
        },
        // ...
    ];
}

Sinnvollerweise sollte man direkt nach der Definition dieser Funktion die Datei Benutzer:Prog/EditExtension.js einbinden. Innerhalb von EditExtensionConfig() können neben der Rückgabe des Konfigurationsobjekts natürlich auch gleich noch andere Aktion durchgeführt werden, die vor der Initialisierung des EditTools erfolgen sollen.

Grundgerüst[Bearbeiten]

Das Grundgerüst besteht aus einer beliebigen Anzahl Gruppen. Jede Gruppe besitzt die Eigenschaften 'Namespace', 'Position', 'Titleprefix' und 'Elements'. Die Gruppe wird nur verarbeitet, wenn der aktuelle Namensraum in 'Namespace' enthalten und der Titel mit 'Titleprefix' beginnt. Falls 'Namespace' keine Elemente enthält wird die Gruppe für alle Namensräume verarbeitet.

Die Eigenschaft 'Elements' beinhaltet eine beliebige Anzahl von Elementen. Alle Elemente einer Gruppe werden in einer Zeile dargestellt. Die Eigenschaft 'Position' enthält eine gültige HTML-ID. Die Zeile wird innerhalb des Elements mit dieser ID angehängt.

Elemente[Bearbeiten]

Jedes Element beinhaltet die Eigenschaften 'Name', 'Summary', 'Begin', 'End', 'Pre', 'Post', 'Action', 'Key' und 'Call'. Die Eigenschaft Name wird als Beschriftung angezeigt. 'Name' darf auch HTML enthalten. Der Text in 'Summary' wird als Zusammenfassung eingetragen. Sofern die Zusammenfassung bereits einen von 'Summary' verschiedenen Text enthält, wird 'Summary' mit ' & ' als Trennzeichen angehängt.

Das einfügen von Text in die Textbox erfolgt in folgender Reihenfolge: 'Begin', 'Pre', 'Post', 'End'. Der Text von 'Begin' wird am Anfang der Textbox eingefügt. 'Pre' wird vor und 'Post' nach der aktuellen Markierung eingefügt. 'End' wird am Ende der Textbox eingefügt. Der Cursor befindet sich nach dem Einfügen hinter dem eingefügten 'Post'-Text.

'Action' kann genutzt werden, um automatisch einen der drei Buttons unter dem Formular anzuklicken. Der Wert 'Save' speichert die Seite, was jedoch nicht gemacht werden sollte, denn ein Script kann immer Fehler machen. 'Preview' zeigt die Vorschau an und 'Diff' die Unterschiede zur aktuellen Version.

'Key' erlaubt die Angabe einer Zeichenkette, welche mit der Tastenkombination 'Meta + Alt + (Nacheinander die Zeichenfolge, anschließend loslassen von Meta und Alt)' als Tastenkürzel genutzt werden kann. Die Zeichenfolge wird als 'title'-Attribut für das 'span'-Tag mit der Klasse 'JSEditExtensionLink' zur Verfügung gestellt.

Funktionsaufrufe[Bearbeiten]

Über die Elementeigenschaft 'Call' können fortgeschrittene Benutzer eigene Funktionen aufrufen lassen. Die Untereigenschaften 'PreBegin', 'PostBegin', 'Middle', 'PreEnd' und 'PostEnd' enthalten alle ein Array von Funktionen, die keine Parameter übernehmen. Funktionen in 'PreBegin' werden vor, solche in 'PostBegin' nach dem Einfügen des Textes aus der Elementeigenschaft 'Begin' aufgerufen. Funktionen in 'Middle' werden nach dem einfügen von 'Pre' und vor dem einfügen von 'Post' aufgerufen. 'PreEnd' und 'PostEnd' werden entsprechen vor, bzw. nach dem Einfügen des Textes aus 'End' aufgerufen.

Falls Sie Funktionen mit Parametern aufrufen möchten, definieren Sie einfach ein Funktionsobjekt, das keine Parameter übernimmt und lassen dieses Ihre Funktion aufrufen. Über den Funktionsnamen können Sie außerdem die Eigenschaften 'id' und 'element' ansprechen. Ein Beispiel dazu könnte wie folgt aussehen:

function EditExtensionConfig(){
// ...
'Call': {
    'PreBegin': [
        ihre_funktion_1,
        function(){ ihre_funktion_2("mit Parameter"); },
        function param(){ ihre_funktion_3(param.id, param.element); }
    ]
}
// ...

Die Eigenschaft 'id' enthält das 'id'-Attribut des 'span'-Tags mit der Klasse 'JSEditExtensionLink'. Das 'element'-Eigenschaft ist eine Referenz auf das von Ihnen erstellte Element. Sie können also alle Eigenschaften innerhalb der Funktion auslesen, aber auch schreiben. Seien Sie daher bei der Verwendung vorsichtig.

Ausgabeformat[Bearbeiten]

<div id="Position">
  <div class="JSEditExtensionSeperator">
    <span class="JSEditExtensionElement">
      <span class="JSEditExtensionLink" id="random_id" title="Key">Name</span>
    </span>
    &lt;!-- ... --&gt;
  </div>
  &lt;!-- ... --&gt;
</div>

Real existieren keine Zeilenumbrüche und Leerzeichen zwischen den Tags. Das 'title'-Attribut wird nur eingefügt, wenn auch ein 'Key' existiert. 'random_id' ist die ID, die in Funktionen genutzt werden kann.

Beispielkonfiguration[Bearbeiten]

Meine Konfiguration kann als Beispiel verwendet werden: Benutzer:Prog/EditExtensionConfig.js

Die Einbindung dieser Seite muss natürlich von meiner Benutzer:Prog/common.js aus erfolgen.