Hilfe:Helferlein/Bearbeitungstoolbar/Konfiguration: Unterschied zwischen den Versionen

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche
(Revert: Vandalismus)
K
 
(48 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 1: Zeile 1:
 
<html>
 
<html>
<textarea id="bla" rows="20"></textarea>
+
<noscript>Dieses Gerät funktioniert nur bei aktiviertem JavaScript.</noscript>
<div id="pEBC-container">
+
<form name="pEBC" id="pEBC" class="jq-tabs" style="display: none;">
 +
    <p>Mit diesem Gerät kannst du deine Editbuttons konfigurieren.</p>
 +
    <p>Du klickst einfach einen der Buttons an und kannst dann über die Tabs die allgemeinen Einstellungen, die jeweilige Gruppe und den Button selbst bearbeiten. Während der Bearbeitung passt sich die Buttonleiste automatisch deinen Änderungen an.</p>
 +
    <p>Neben den meisten Einstellungen findest du ein Auswahlfeld mit zwei Optionen, „Standard“ und „Wie definiert:“. Solange eine Einstellung auf „Standard“ steht, wird sie beim Speichern übersprungen und bleibt auf dem im Helferlein definierten Wert. Änderst du die Einstellung im nebenstehenden Eingabefeld, springt die Auswahl automatisch auf „Wie definiert:“ und würde beim nächsten Speichervorgang übernommen werden.</p>
 +
    <p>Zuerst werden nur einige wenige Einstellungen angezeigt, nämlich die wichtigsten. Unten im Formular findest du eine mit „Erweiterte Optionen anzeigen “ beschriftete Checkbox. Wenn du die anhakst, werden alle Einstellungen angezeigt. Das sind z. B. Konditionen zur Anzeige des Buttons, in welchen Namensräumen er auftauchen soll usw. Auch kannst du den Button oder die Gruppe optisch freier gestalten und sogar eigene CSS-Regeln einpflegen.</p>
 +
    <p>Unter dieser Checkbox findest du vier Knöppe. Der erste übernimmt deine Einstellungen und speichert sie auf dem Server. Dabei wird die Seite nicht verlassen oder neu geladen und falls du was vergessen hast, kannst du es direkt wieder ändern. Neben dem Speicherbutton findest du den Knopp zum Zurücksetzen. Der vernichtet alle deine Änderungen und selbst erstellten Buttons und Gruppen. Aber keine Sorge: Solltest du versehentlich auf den Knopp kommen und bestätigen, kannst du gleich danach auf den Speicherbutton drücken und alles ist wieder da.</p>
 +
    <p>Über den dritten Knopp von links kannst du eine neue Gruppe anlegen. Die wird automatisch hinten angehängt und ist zuerst noch nicht sichtbar und auch nicht auswählbar. Du kannst sie jedoch bearbeiten. Direkt daneben findest du den Knopp zum Erstellen eines neuen Buttons. Der wird automatisch an die zuletzt gewählte Gruppe angehängt, du kannst ihn jedoch über ein Auswahlfeld im Buttontab in eine andere verschieben. Sobald du eine Gruppe oder einen Button anlegst, fragt dich das Gerät nach einer ID. Diese ID darf nur aus Buchstaben, Zahlen und dem Unterstrich bestehen und nicht mit einer Zahl beginnen. Außerdem kann sie nachträglich nicht mehr geändert werden.</p>
 +
    <p>Jede Gruppe und jeder Button kann über ein entsprechendes Auswahlfeld unten im Formular wieder zurückgesetzt respektive gelöscht werden, je nachdem, ob der Button standardmäßig installiert ist oder von dir erstellt wurde.</p>
 +
    <p>Dieses Gerät ist voll funktionsfähig bzw. sollte es zumindest sein. Viel Spaß damit!</p>
 
     <div id="pEBC-toolbar"></div>
 
     <div id="pEBC-toolbar"></div>
     <div id="pEBC-form" class="jq-tabs">
+
     <dl id="pEBC-info">
         <ul>
+
         <dt>Aktuelle Gruppe</dt>
            <li>
+
         <dd>&mdash;</dd>
                <a href="#pEBC-tab-config">Einstellungen</a>
+
        <dt>Aktueller Button</dt>
            </li>
+
         <dd>&mdash;</dd>
            <li>
+
    </dl>
                <a href="#pEBC-tab-groups">Gruppen</a>
+
    <ol id="pEBC-tabs">
            </li>
+
        <li>
            <li>
+
            <a href="#pEBC-tab-config">Einstellungen ändern</a>
                <a href="#pEBC-tab-buttons">Buttons</a>
+
         </li>
            </li>
+
         <li>
         </ul>
+
             <a href="#pEBC-tab-group">Gruppe bearbeiten</a>
        <div id="pEBC-tab-config">
+
        </li>
            <table>
+
        <li>
                <tr>
+
            <a href="#pEBC-tab-button">Button bearbeiten</a>
                    <td>
+
        </li>
                        <p>Buttonabstand</p>
+
    </ol>
                        <p>Der Abstand der Buttons zueinander in Pixeln.</p>
+
    <div id="pEBC-tab-config">
                    </td>
+
        <table></table>
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="marginButtons" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="marginButtons" />
 
                    </td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Gruppenabstand</p>
 
                        <p>Der Abstand der Gruppen zueinander in Pixeln. Entspricht dem horizontalen Abstand des letzten Buttons einer Gruppe zum ersten der nächsten.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="marginGroups" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="marginGroups" />
 
                    </td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Seiten mit allen Buttons</p>
 
                        <p>Alle Seiten, auf denen immer alle Buttons angezeigt werden sollen, einstellungsunabhängig. Bitte eine Seite pro Zeile angeben.</p>
 
                    </td>
 
                    <td>
 
                        <textarea name="showAllPages" class="pEBC-multi"></textarea>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="showAllPages" />
 
                    </td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Gruppenpositionen zurücksetzen</p>
 
                        <p>Setzt die Positionen der Gruppen zurück. Das kann nicht rückgängig gemacht werden.</p>
 
                    </td>
 
                    <td>
 
                        <input type="button" name="resetPositions" value="Zurücksetzen" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
            </table>
 
         </div>
 
        <div id="pEBC-tab-groups">
 
            <table>
 
                <tr>
 
                    <td>
 
                        <p>ID</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="id" disabled="disabled" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Position</p>
 
                        <p>Die Gruppe relativ zu den anderen nach links oder rechts verschieben.</p>
 
                    </td>
 
                    <td>
 
                        <input type="button" id="pEBC-button-group-moveLeft" value="Nach links" />
 
                        <input type="button" id="pEBC-button-group-moveRight" value="Nach rechts" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Name</p>
 
                        <p>Nicht zu verwechseln mit der ID.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="name" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="name" />
 
                    </td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>CSS</p>
 
                        <p>Zusätzliche Stylesheets, die der Gruppe hinzugefügt werden.</p>
 
                    </td>
 
                    <td>
 
                        <textarea name="css"></textarea>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="css" />
 
                    </td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Buttonpositionen zurücksetzen</p>
 
                        <p>Setzt die Positionen der Buttons innerhalb dieser Gruppe zurück. Das kann nicht rückgängig gemacht werden.</p>
 
                    </td>
 
                    <td>
 
                        <input type="button" name="resetPositions" value="Zurücksetzen" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
            </table>
 
         </div>
 
         <div id="pEBC-tab-buttons">
 
             <table>
 
                <tr>
 
                    <td>
 
                        <p>ID</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="id" disabled="disabled" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Position</p>
 
                        <p>Den Button relativ zu den anderen in seiner Gruppe nach links oder rechts verschieben.</p>
 
                    </td>
 
                    <td>
 
                        <input type="button" id="pEBC-button-group-moveLeft" value="Nach links" />
 
                        <input type="button" id="pEBC-button-group-moveRight" value="Nach rechts" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Gruppe</p>
 
                        <p>Die Gruppe, zu der der Button gehören soll</p>
 
                    </td>
 
                    <td>
 
                        <select name="group"></select>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="group" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Mouseover-Text</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="title" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="title" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Breite</p>
 
                        <p>Breite des Buttons in Pixeln</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="width" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="width" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Höhe</p>
 
                        <p>Höhe des Buttons in Pixeln</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="height" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="height" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Hintergrundfarbe</p>
 
                        <p>Ein beliebiger CSS-fähiger Farbwert, Farbnamen also auf Englisch.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="bgColor" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="bgColor" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Hintergrundbild</p>
 
                        <p>Der Name eines beliebigen Bildes, das in der Stupidedia hochgeladen wurde ohne Namensraumpräfix.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="bgImage" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="bgImage" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Breite des Hintergrundbildes</p>
 
                        <p>Die Breite des Hintergrundbildes in Pixeln. Die Höhe wird automatisch kalkuliert.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="bgImageWidth" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="bgImageWidth" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Beschriftung</p>
 
                        <p>Die Beschriftung des Buttons. Reines HTML in beliebiger Länge inklusive Tags und allem, Wikicode ist aber nicht möglich. Kann nicht zusammen mit einem Vordergrundbild verwendet werden. In dem Fall bekommt das Bild Vorrang.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="label" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="label" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Vordergrundbild</p>
 
                        <p>Ein Bild, das auf den Button geklebt wird. Ist es gesetzt, überschreibt es die Beschriftung. Das Bild kann ein beliebiges sein, das in der Stupidedia hochgeladen wurde.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" name="fgImage" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="fgImage" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Breite des Vordergrundbildes</p>
 
                        <p>Die Breite des Vordergrundbildes in Pixeln. Die Höhe wird automatisch kalkuliert.</p>
 
                    </td>
 
                    <td>
 
                        <input type="text" class="pEBC-numInput" name="fgImageWidth" size="2" />
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="fgImageWidth" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Aktion</p>
 
                        <p>Was passieren soll, wenn der Button gedrückt wird.</p>
 
                    </td>
 
                    <td>
 
                        <select name="actionType">
 
                            <option value="0">Tags setzen</option>
 
                            <option value="1">Text oben einfügen</option>
 
                            <option value="2">Text unten anhängen</option>
 
                            <option value="3">Seiteninhalt ersetzen</option>
 
                            <option value="4">Funktion ausführen</option>
 
                        </select>
 
                        <textarea name="actionText"></textarea>
 
                        <textarea name="actionText" class="pEBC-actionType0"></textarea>
 
                        <textarea name="actionText" class="pEBC-actionType0"></textarea>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="action" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Zusammenfassung</p>
 
                        <p>Text für die Zusammenfassungszeile. Es können mehrere Texte angegeben werden, einer pro Zeile. Es wird dann bei Benutzung des Buttons einer per Zufall ausgewählt.</p>
 
                    </td>
 
                    <td>
 
                        <textarea name="summary" class="pEBC-multi"></textarea>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="summary" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Namensräume</p>
 
                        <p>Hier kannst du festlegen, in welchen Namensräumen der Button angezeigt werden soll. Gibst du etwas in der ersten Spalte an, wird der Button nur in den gewählten Namensräumen aktiviert, gibst du etwas in der zweiten Spalte an, wird der Button in allen Namensräumen außer den gewählten sichtbar.</p>
 
                    </td>
 
                    <td>
 
                        <select name="namespacesIn" class="pEBC-namespaceSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nur diese Namensräume">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                        <select name="namespacesEx" class="pEBC-namespaceSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nicht diese Namensräume">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="namespaces" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Seitenarten</p>
 
                        <p>Hier kann eingestellt werden, auf welchen Arten von Seiten der Button erscheinen soll. Diskussionsseiten können dabei neben Seiten in Diskussionsnamensräumen auch Seiten in anderen Namensräumen sein, sofern sie für Diskussionsbeiträge gedacht sind, z. B. die Wahllokale. Subjektseite sind alle Seiten, die dementsprechend keine Diskussionsseiten sind. JavaScript- und CSS-Seiten sind spezielle Seiten, auf denen JavaScript- oder CSS-Code liegt.</p>
 
                        <p>Eine Seite kann nur einer einer einzigen Art angehören.</p>
 
                    </td>
 
                    <td>
 
                        <select name="pageTypesIn" size="5" multiple="multiple">
 
                            <optgroup label="Nicht diese Seitenarten">
 
                                <option value="!">&mdash;</option>
 
                                <option value="subject">Subjektseiten</option>
 
                                <option value="talk">Diskussionsseiten</option>
 
                                <option value="css">CSS-Seiten</option>
 
                                <option value="js">JavaScript-Seiten</option>
 
                            </optgroup>
 
                        </select>
 
                        <select name="pageTypesEx" size="5" multiple="multiple">
 
                            <optgroup label="Nicht diese Seitenarten">
 
                                <option value="!">&mdash;</option>
 
                                <option value="subject">Subjektseiten</option>
 
                                <option value="talk">Diskussionsseiten</option>
 
                                <option value="css">CSS-Seiten</option>
 
                                <option value="js">JavaScript-Seiten</option>
 
                            </optgroup>
 
                        </select>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="pageTypes" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Benutzergruppen</p>
 
                        <p>Manche Buttons sollen nur bestimmten Benutzergruppen zur Verfügung stehen.</p>
 
                    </td>
 
                    <td>
 
                        <select name="userGroupsIn" class="pEBC-userGroupSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nur diese Benutzergruppen">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                        <select name="userGroupsEx" class="pEBC-userGroupSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nicht diese Benutzergruppen">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="userGroups" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Bearbeitungskontexte</p>
 
                        <p>Die Editbuttons können an vielen verschiedenen Stellen auftauchen, nicht nur über dem normalen Bearbeitungsfenster.</p>
 
                    </td>
 
                    <td>
 
                        <select name="contextsIn" class="pEBC-contextSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nur diese Kontexte">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                        <select name="contextsEx" class="pEBC-contextSelector" size="5" multiple="multiple">
 
                            <optgroup label="Nicht diese Kontexte">
 
                                <option value="!">&mdash;</option>
 
                            </optgroup>
 
                        </select>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="contexts" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Konditionsfunktion</p>
 
                        <p>Komplexere Bedingungen können über eine Funktion realisiert werden.</p>
 
                    </td>
 
                    <td>
 
                        <textarea name="condition"></textarea>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" class="pEBC-resetBox" value="condition" />
 
                    </td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
                <tr>
 
                    <td>
 
                        <p>Deaktivieren, zurücksetzen und löschen</p>
 
                        <p>Alle Buttons können deaktiviert werden. Änderungen an standardmäßig installierten Buttons kann man vollständig wieder zurücksetzen und benutzerdefinierte Buttons können wieder gelöscht werden.</p>
 
                    </td>
 
                    <td>
 
                        <input type="checkbox" name="disabled" id="pEBC-disableButton" />
 
                        <label for="pEBC-disableButton">Deaktivieren</label>
 
                        <br />
 
                        <input type="checkbox" name="reset" id="pEBC-resetButton" />
 
                        <label for="pEBC-resetButton">Zurücksetzen/Löschen</label>
 
                    </td>
 
                    <td>&nbsp;</td>
 
                    <td>&nbsp;</td>
 
                </tr>
 
            </table>
 
        </div>
 
 
     </div>
 
     </div>
     <div id="pEBC-buttons">
+
     <div id="pEBC-tab-group">
         <input type="button" id="pEBC-submitButton" value="Speichern" />
+
         <p class="pEBC-noSelection">Keine Gruppe ausgewählt</p>
         <input type="button" id="pEBC-newGroup" value="Neue Gruppe" />
+
         <table style="display: none;"></table>
        <input type="button" id="pEBC-newButton" value="Neuer Button" />
 
 
     </div>
 
     </div>
</div>
+
    <div id="pEBC-tab-button">
</html>
+
        <p class="pEBC-noSelection">Kein Button ausgewählt</p>
<js>
+
        <table style="display: none;"></table>
 +
    </div>
 +
    <div id="pEBC-submit">
 +
        <p>
 +
            <input type="checkbox" id="pEBC-toggleAdvanced" />
 +
            <label for="pEBC-toggleAdvanced">Erweiterte Optionen anzeigen</label>
 +
        </p>
 +
        <p>
 +
            <input type="button" id="pEBC-submit-save" value="Speichern" />
 +
            <input type="button" id="pEBC-submit-reset" value="Zurücksetzen" />
 +
            <input type="button" id="pEBC-submit-newGroup" value="Neue Gruppe" />
 +
            <input type="button" id="pEBC-submit-newButton" value="Neuer Button" />
 +
        </p>
 +
    </div>
 +
</form>
 +
</html><css>
 +
 
 +
#pEBC-toolbar {
 +
    margin-top: 10px;
 +
    margin-bottom: 10px;
 +
}
 +
 
 +
#pEBC-info {
 +
    clear: both;
 +
    padding-top: 10px;
 +
}
 +
 
 +
#pEBC-tab-config,
 +
#pEBC-tab-group,
 +
#pEBC-tab-button {
 +
    background-color: #FFFFFF;
 +
    border: 1px solid #BBBBBB;
 +
    margin-top: -1px;
 +
}
 +
 
 +
#pEBC table {
 +
    width: 100%;
 +
    border-spacing: 0px;
 +
}
 +
 
 +
#pEBC td {
 +
    border-top: 1px solid #DDDDDD;
 +
    padding: 5px;
 +
    vertical-align: top;
 +
}
 +
 
 +
#pEBC tr:first-child td {
 +
    border-top: none;
 +
}
 +
 
 +
.pEBC-defaultCol {
 +
    width: 110px;
 +
}
 +
 
 +
.pEBC-inputCol {
 +
    width: 300px;
 +
}
 +
 
 +
.pEBC-assignCol {
 +
    width: 170px;
 +
    display: none; /* Gibt es noch nicht */
 +
}
 +
 
 +
.pEBC-descCol p {
 +
    font-size: 85%;
 +
    margin-bottom: 0px;
 +
}
 +
 
 +
.pEBC-descCol p:first-child {
 +
    font-size: 100%;
 +
    font-weight: bold;
 +
    margin-top: 0px;
 +
}
 +
 
 +
.pEBC-inputCol textarea,
 +
.pEBC-inputCol select {
 +
    width: 100%;
 +
}
 +
 
 +
</css><js>
  
 
var pEBC = {
 
var pEBC = {
Zeile 455: Zeile 124:
 
     userConfig: {},
 
     userConfig: {},
  
     tempConfig: {},
+
     form: {
 +
        config: {},
 +
        groups: {},
 +
        buttons: {}
 +
    },
  
 
     selectedGroup: null,
 
     selectedGroup: null,
Zeile 462: Zeile 135:
  
 
     init: function() {
 
     init: function() {
         pEBC.defaultConfig = $.parseJSON( $.toJSON( {
+
         pEBC.defaultConfig = {
 
             config: gEditButtons.config,
 
             config: gEditButtons.config,
 
             groups: gEditButtons.groups,
 
             groups: gEditButtons.groups,
 
             buttons: gEditButtons.buttons
 
             buttons: gEditButtons.buttons
         } ) );
+
         };
 
         pEBC.userConfig = $.parseJSON( mw.user.options.get( 'userjs-editbuttons' ) ) || {
 
         pEBC.userConfig = $.parseJSON( mw.user.options.get( 'userjs-editbuttons' ) ) || {
 
             config: {},
 
             config: {},
Zeile 472: Zeile 145:
 
             buttons: {}
 
             buttons: {}
 
         };
 
         };
         pEBC.tempConfig = $.parseJSON( mw.user.options.get( 'userjs-editbuttons' ) ) || {
+
 
            config: {},
+
         pEBC.setForm();
            groups: {},
 
            buttons: {}
 
        };
 
 
     },
 
     },
  
     execute: function() {
+
     setForm: function() {
         gEditButtons.getButtons( 'config' );
+
         var form = pEBC.form;
  
         $( '#pEBC-tab-config .pEBC-resetBox' ).prop( 'checked', true );
+
        // Erst die Standard- und dann die Benutzerkonfiguration abarbeiten
 +
         $.each( ['defaultConfig', 'userConfig'], function( i, e ) {
 +
            var cur = pEBC[e];
  
        // Erst die Standard- und dann die temporäre Konfiguration abarbeiten
+
            // Wir übernehmen die allgemeinen Einstellungen Schritt für Schritt
        $.each( ['defaultConfig', 'tempConfig'], function( i, c ) {
+
            var config = cur.config;
            // Über jede Eigenschaft des Objekts iterieren
+
            $.each( ['groupOrder', 'marginButtons', 'marginGroups', 'showAllPages'], function( i2, e2 ) {
            $.each( pEBC[c].config, function( i, e ) {
+
                if ( config[e2] !== undefined && config[e2] !== null ) {
                // Array
+
                    // showAllPages ist ein Array mit Seitentiteln
                if ( i === 'showAllPages' ) {
+
                    if ( e2 === 'showAllPages' ) {
                    e = e.join( '\n' );
+
                        form.config[e2] = config[e2].join( '\n' ).replace( / /g, '_' );
 +
                    }
 +
                    else {
 +
                        form.config[e2] = config[e2];
 +
                    }
 +
                    // Wenn die Eigenschaft in der Benutzerkonfiguration existiert, entspricht sie nicht dem Standard
 +
                    form.config[e2 + '-default'] = ( e === 'userConfig' ) ? '' : '1';
 
                 }
 
                 }
                // Das Eingabefeld mit dem entsprechenden Wert füllen
+
            } );
                $( '#pEBC-tab-config *[name="' + i + '"]' ).val( e );
+
 
                 // Wenn dies die temporäre Konfiguration ist, sollen die Reset-Häkchen entfernt werden
+
            // Nun die Gruppen
                 if ( c === 'tempConfig' && pEBC[c].config[i] !== null ) {
+
            $.each( cur.groups, function( i2, e2 ) {
                     $( '#pEBC-tab-config .pEBC-resetBox[value="' + i + '"]' ).prop( 'checked', false );
+
                var group = e2;
 +
 
 +
                 // Wenn das Gruppenobjekt im Formular noch nicht existiert, legen wir es an
 +
                 if ( !form.groups[i2] ) {
 +
                     // Mit Standardwerten füllen (buttonOrder brauchen wir nicht, da es nicht direkt angezeigt wird)
 +
                    form.groups[i2] = {
 +
                        id: i2,
 +
                        name: '',
 +
                        css: '',
 +
                        hardcoded: pEBC.defaultConfig.groups[i2] ? true : false // Wenn die Gruppe in der Standardkonfiguration existiert, ist sie hardcodiert
 +
                    };
 
                 }
 
                 }
 +
 +
                // Jede Gruppeneigenschaft einzeln übernehmen
 +
                $.each( ['buttonOrder', 'name', 'css'], function( i3, e3 ) {
 +
                    if ( group[e3] !== undefined && group[e3] !== null ) {
 +
                        form.groups[i2][e3] = group[e3];
 +
                        form.groups[i2][e3 + '-default'] = ( e === 'userConfig' ) ? '' : '1';
 +
                    }
 +
                } );
 
             } );
 
             } );
 
         } );
 
         } );
  
         var groups = '';
+
        // Die Buttons müssen auf andere Weise übernommen werden
         $.each( gEditButtons.groups, function( i, e ) {
+
         var buttons = [];
             if ( e.name ) {
+
        $.each( pEBC.defaultConfig.buttons, function( i ) {
                groups += '<option value="' + i + '">' + e.name + '</option>';
+
            buttons.push( i );
 +
        } );
 +
         $.each( pEBC.userConfig.buttons, function( i ) {
 +
            buttons.push( i );
 +
        } );
 +
 
 +
        $.each( buttons, function( i, e ) {
 +
            form.buttons[e] = {
 +
                id: e,
 +
                hardcoded: pEBC.defaultConfig.buttons[e] ? true : false
 +
            };
 +
 
 +
            var button = form.buttons[e];
 +
 
 +
            // Standardwerte prüfen
 +
             if ( pEBC.userConfig.buttons[e] ) {
 +
                $.each( pEBC.userConfig.buttons[e], function( i2, e2 ) {
 +
                    if ( e2 !== null ) {
 +
                        switch ( i2 ) {
 +
                            case 'actionType':
 +
                            case 'actionText':
 +
                                i2 = 'action';
 +
                                break;
 +
                            case 'namespacesIn':
 +
                            case 'namespacesEx':
 +
                            case 'userGroupsIn':
 +
                            case 'userGroupsEx':
 +
                            case 'pageTypesIn':
 +
                            case 'pageTypesEx':
 +
                            case 'contextsIn':
 +
                            case 'contextsEx':
 +
                                i2 = i2.slice( 0, -2 );
 +
                                break;
 +
                            case 'disabled':
 +
                                break;
 +
                        }
 +
                        button[i2 + '-default'] = '';
 +
                    }
 +
                } );
 
             }
 
             }
 +
 +
            pEBC.assignButtonProps( e );
 
         } );
 
         } );
        $( '#pEBC-tab-buttons select[name="group"]' ).html( groups );
+
    },
  
         var namespaces = '';
+
    assignButtonProps: function( e, newButton ) {
         $.each( mw.config.get( 'wgFormattedNamespaces' ), function( i, e ) {
+
         var form = pEBC.form;
             i = parseInt( i );
+
         var button = form.buttons[e];
             if ( i < 0 ) {
+
        var objects = [gEditButtons.EditButton.prototype];
 +
        if ( !newButton ) {
 +
            objects.push( pEBC.defaultConfig.buttons[e] );
 +
            objects.push( pEBC.userConfig.buttons[e] );
 +
        }
 +
        $.each( objects, function( i2, e2 ) {
 +
             // Abbruch, wenn kein Objekt
 +
             if ( e2 === undefined ) {
 
                 return;
 
                 return;
 
             }
 
             }
             if ( i === 0 ) {
+
 
                 e = '(Hauptraum)';
+
            // Einfache Werte
 +
             $.each( ['group', 'title', 'width', 'height', 'fgImage', 'fgImageWidth', 'bgImage', 'bgImageWidth', 'bgColor', 'condition', 'label', 'css', 'disabled', 'actionType'], function( i3, e3 ) {
 +
                if ( e2[e3] !== undefined && e2[e3] !== null ) {
 +
                    button[e3] = e2[e3];
 +
                }
 +
            } );
 +
 
 +
            // Zusammenfassung
 +
            if ( typeof e2.summary === 'string' ) {
 +
                button.summary = e2.summary;
 +
            }
 +
            else if ( $.type( e2.summary ) === 'array' ) {
 +
                button.summary = e2.summary.join( '\n' );
 +
            }
 +
 
 +
            // Erlaubnisauswahlfelder
 +
            $.each( ['namespacesIn', 'namespacesEx', 'userGroupsIn', 'userGroupsEx', 'pageTypesIn', 'pageTypesEx', 'contextsIn', 'contextsEx'], function( i3, e3 ) {
 +
                 if ( e2[e3] !== undefined && e2[e3] !== null ) {
 +
                    button[e3] = ( e2[e3] === true || e2[e3] === false ) ? ['!'] : e2[e3];
 +
                }
 +
            } );
 +
 
 +
            // Aktionstext
 +
            if ( typeof e2.actionText === 'string' || typeof e2.actionText === 'object' && e2.actionText.length === 1 ) {
 +
                button.actionText0 = e2.actionText;
 +
                button.actionText1 = '';
 +
                button.actionText2 = '';
 
             }
 
             }
             namespaces += '<option value="' + i + '">' + e + '</option>';
+
             else if ( $.type( e2.actionText ) === 'array' ) {
 +
                button.actionText0 = e2.actionText[0];
 +
                button.actionText1 = e2.actionText[1];
 +
                button.actionText2 = e2.actionText[2];
 +
            }
 +
        } );
 +
    },
 +
 
 +
    execute: function() {
 +
        gEditButtons.getButtons( 'config' );
 +
        pEBC.createTables();
 +
        var groups = '';
 +
        $.each( pEBC.form.groups, function( i, e ) {
 +
            groups += '<option value="' + i + '">' + e.name + '</option>';
 
         } );
 
         } );
         $( '.pEBC-namespaceSelector optgroup' ).append( namespaces );
+
        document.pEBC['button-group'].innerHTML = groups;
 +
        pEBC.fillConfigTable();
 +
         $( '#pEBC-row-group-move .pEBC-inputCol input' ).click( pEBC.moveGroup );
 +
        $( '#pEBC-row-button-move .pEBC-inputCol input' ).click( pEBC.moveButton );
 +
        $( '.pEBC-defaultCol, .pEBC-inputCol' ).find( 'input:not(:button), select, textarea' ).on( 'change keyup', pEBC.change );
 +
        $( '#pEBC-toggleAdvanced' ).on( 'change', pEBC.toggleAdvanced );
 +
        $( '#pEBC-submit-save' ).click( pEBC.save );
 +
        $( '#pEBC-submit-reset' ).click( pEBC.reset );
 +
        $( '#pEBC-submit-newGroup' ).click( pEBC.newGroup );
 +
        $( '#pEBC-submit-newButton' ).click( pEBC.newButton );
 +
        $( '#pEBC' ).removeClass( 'ui-widget-content' ).show();
 +
        $( '#pEBC-pleaseWait' ).remove();
 +
    },
  
         var userGroups = '';
+
    select: function( button ) {
 +
         var form = pEBC.form;
 +
        var id = button.getAttribute( 'data-id' );
 +
        var group = form.buttons[id].group;
 +
        pEBC.selectedButton = id;
 +
        pEBC.selectedGroup = group;
 +
        addCSS( '#pEBC-toolbar .editButton-' + id + ' { outline: 2px solid red; position: relative; z-index: 1; }', 'pEBC-selectedCSS' );
 +
        pEBC.fillGroupTable();
 +
        pEBC.fillButtonTable();
 +
    },
 +
 
 +
    createTables: function() {
 +
        function link( page, text ) {
 +
            var html = '<a href="' +
 +
                mw.util.getUrl( page ) +
 +
                '" title="' +
 +
                mw.html.escape( page ) +
 +
                '">' +
 +
                ( ( text === undefined ) ? mw.html.escape( page ) : text ) +
 +
                '</a>';
 +
            return html;
 +
        }
 +
 
 +
        var cr = pEBC.createRow;
 +
 
 +
        const TEXT = 0;
 +
        const NUMBER = 1;
 +
        const AREA = 2;
 +
 
 +
        const ADVANCED = 1;
 +
        const DISABLED = 2;
 +
        const NOASSIGN = 4;
 +
        const NODEFAULT = 8;
 +
 
 +
        var namespaceSelector = '<option value="!">(keine Angabe)</option>';
 +
        var namespaceCount = 1;
 +
        $.each( mw.config.get( 'wgFormattedNamespaces' ), function( i, e ) {
 +
            if ( i >= 0 ) {
 +
                var name = ( i === '0' ) ? '(Hauptraum)' : e;
 +
                namespaceSelector += '<option value="' + i + '">' + name + '</option>';
 +
                namespaceCount++;
 +
            }
 +
        } );
 +
        if ( namespaceCount > 5 ) {
 +
            namespaceCount = 5;
 +
        }
 +
 
 +
        var pageTypeSelector = '<option value="!">(keine Angabe)</option>';
 +
        var pageTypeCount = 1;
 +
        $.each( {
 +
            subject: 'Inhaltsseiten',
 +
            talk: 'Diskussionsseiten',
 +
            css: 'CSS-Seiten',
 +
            js: 'JavaScript-Seiten'
 +
        }, function( i, e ) {
 +
            pageTypeSelector += '<option value="' + i + '">' + e + '</option>';
 +
            pageTypeCount++;
 +
        } );
 +
        if ( pageTypeCount > 5 ) {
 +
            pageTypeCount = 5;
 +
        }
 +
 
 +
        var userGroupSelector = '<option value="!">(keine Angabe)</option>';
 +
        var userGroupCount = 1;
 
         $.each( global.groups.names, function( i, e ) {
 
         $.each( global.groups.names, function( i, e ) {
             userGroups += '<option value="' + i + '">' + e + '</option>';
+
             userGroupSelector += '<option value="' + i + '">' + e + '</option>';
 +
            userGroupCount++;
 
         } );
 
         } );
         $( '.pEBC-userGroupSelector optgroup' ).append( userGroups );
+
         if ( userGroupCount > 5 ) {
 +
            userGroupCount = 5;
 +
        }
  
         var contexts = '';
+
         var contextSelector = '<option value="!">(keine Angabe)</option>';
 +
        var contextCount = 1;
 
         $.each( gEditButtons.contexts, function( i, e ) {
 
         $.each( gEditButtons.contexts, function( i, e ) {
 
             if ( i !== 'config' ) {
 
             if ( i !== 'config' ) {
                 contexts += '<option value="' + i + '">' + e.name + '</option>';
+
                 contextSelector += '<option value="' + i + '">' + e.name + '</option>';
 +
                contextCount++;
 
             }
 
             }
 
         } );
 
         } );
         $( '.pEBC-contextSelector optgroup' ).append( contexts );
+
         if ( contextCount > 5 ) {
 +
            contextCount = 5;
 +
        }
 +
 
 +
        // Einstellungen
 +
        cr(
 +
            'config-marginGroups',
 +
            'Gruppenabstand\nDer Abstand zwischen den Buttongruppen in Pixeln. Gib einfach eine Zahl an.',
 +
            NUMBER
 +
        );
 +
        cr(
 +
            'config-marginButtons',
 +
            'Buttonabstand\nDer Abstand zwischen den einzelnen Buttons innerhalb einer Gruppe in Pixeln.',
 +
            NUMBER
 +
        );
 +
        cr(
 +
            'config-showAllPages',
 +
            'Seiten mit allen Buttons\nAuf diesen Seiten sollen alle Buttons angezeigt werden. Gibt eine pro Zeile an.',
 +
            AREA
 +
        );
 +
        cr(
 +
            'config-options',
 +
            'Optionen\nFalls du die Gruppen in einer bestimmten Reihenfolge angeordnet hast, kannst du das mit dieser Checkbox zurücksetzen.',
 +
            '<input type="checkbox" name="config-resetGroupOrder" id="pEBC-config-resetGroupOrder" /> ' +
 +
                '<label for="pEBC-config-resetGroupOrder">Gruppenreihenfolge zurücksetzen</label>',
 +
            NODEFAULT
 +
        );
  
         $( '#pEBC-submitButton' ).click( pEBC.submit );
+
         // Gruppe
         $( '#pEBC-newGroup' ).click( pEBC.newGroup );
+
        cr(
         $( '#pEBC-newButton' ).click( pEBC.newButton );
+
            'group-move',
         $( '#pEBC-tab-config input, #pEBC-tab-config select, #pEBC-tab-config textarea' ).on( 'change', pEBC.changeConfig );
+
            'Position der Gruppe\nMit diesen beiden Buttons kannst du die Gruppe innerhalb der Toolbar verschieben.',
         $( '#pEBC-tab-groups input, #pEBC-tab-groups select, #pEBC-tab-groups textarea' ).on( 'change', pEBC.changeGroup );
+
            '<input type="button" name="group-move-left" value="Nach links" /> <input type="button" name="group-move-right" value="Nach rechts" />',
         $( '#pEBC-tab-buttons input, #pEBC-tab-buttons select, #pEBC-tab-buttons textarea' ).on( 'change', pEBC.changeButton );
+
            NOASSIGN | NODEFAULT
 +
        );
 +
        cr(
 +
            'group-id',
 +
            'ID\nDie ID der Gruppe. Kann nicht geändert werden.',
 +
            TEXT,
 +
            DISABLED | NODEFAULT
 +
        );
 +
        cr(
 +
            'group-name',
 +
            'Name\nDer Name der Gruppe. Wird zur Zeit nur für die Auswahlfelder in diesem Gerät benötigt.',
 +
            TEXT
 +
        );
 +
        cr(
 +
            'group-css',
 +
            'CSS\nZusätzliche Stylesheets für die Gruppe.',
 +
            AREA,
 +
            ADVANCED
 +
        );
 +
         cr(
 +
            'group-options',
 +
            'Optionen\nDu kannst die Reihenfolge der Buttons in dieser Gruppe löschen. Das wird aber erst beim Speichern übernommen.\nBei standardmäßig vorhandenen Gruppen kannst du alle deine Änderungen zurücksetzen. Das passiert erst beim Speichern, das heißt, dass die Änderungen beim Speichern übersprungen werden und daher beim nächsten Seitenaufruf nicht mehr da sind.\nSelbst angelegte Gruppen können auch wieder gelöscht werden. Sollte eine eigene Gruppe aber noch Buttons enthalten, werden die nicht angezeigt, solange keine neue Gruppe mit derselben ID angelegt wurde.',
 +
            '<input type="checkbox" name="group-resetButtonOrder" id="pEBC-group-resetButtonOrder" /> ' +
 +
                '<label for="pEBC-group-resetButtonOrder">Buttonreihenfolge zurücksetzen</label>' +
 +
                '<br />' +
 +
                '<input type="checkbox" name="group-reset" id="pEBC-group-reset" /> ' +
 +
                '<label for="pEBC-group-reset">Gruppe zurücksetzen/löschen</label>',
 +
            NODEFAULT
 +
        );
 +
 
 +
        // Button
 +
        cr(
 +
            'button-move',
 +
            'Position des Buttons\nMit diesen beiden Buttons kannst du den Button innerhalb seiner Gruppe verschieben.',
 +
            '<input type="button" name="button-move-left" value="Nach links" /> <input type="button" name="button-move-right" value="Nach rechts" />',
 +
            NOASSIGN | NODEFAULT
 +
        );
 +
        cr(
 +
            'button-id',
 +
            'ID\nDie ID des Buttons. Kann nicht geändert werden.',
 +
            TEXT,
 +
            DISABLED | NODEFAULT
 +
        );
 +
         cr(
 +
            'button-group',
 +
            'Gruppe\nHier kannst du einstellen, zu welcher Gruppe der Button gehören soll.',
 +
            '<select name="button-group"></select>'
 +
        );
 +
        cr(
 +
            'button-title',
 +
            'Beschreibung\nEine kurze Beschreibung, was der Button macht. Wird angezeigt, wenn man mit der Maus über den Button fährt.',
 +
            TEXT
 +
        );
 +
        cr(
 +
            'button-label',
 +
            'Beschriftung\nDie Beschriftung des Buttons. Wird als HTML interpretiert, es stehen also alle Tags in vollem Umfang zur Verfügung. Wikicode ist aber nicht möglich.\nWird nur angezeigt, wenn kein Icon angegeben wurde.',
 +
            TEXT
 +
        );
 +
         cr(
 +
            'button-fgImage',
 +
            'Icon\nDas Icon des Buttons. Überschreibt die Beschriftung.\nGib den Namen einer Datei, die in der Stupidedia hochgeladen wurde, an. Das Namensraumpräfix (<i>Datei:</i>) musst du aber weglassen. Eine Liste mit allen bisher hochgeladenen Editbutton-Icons findest du in der ' + link( 'Kategorie:Datei:Editbutton' ) + '.',
 +
            TEXT
 +
        );
 +
        cr(
 +
            'button-fgImageWidth',
 +
            'Breite des Icons\nDu kannst eine Breite in Pixeln angeben, damit das Icon nicht in voller Größe angezeigt wird. Du kannst es nur verkleinern, nicht vergrößern.',
 +
            NUMBER
 +
        );
 +
        cr(
 +
            'button-bgColor',
 +
            'Hintergrundfarbe\nDu kannst eine Hintergrundfarbe für den Button angeben. Die liegt hinter dem Hintergrundbild.\nGib einen beliebigen CSS-fähigen Farbwert an. Hilfe dazu findest du in der ' + link( 'Stupidedia:Farbtabelle', 'Farbtabelle' ) + '.',
 +
            TEXT,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-bgImage',
 +
            'Hintergrundbild\nButtons haben meist ein Hintergrundbild, in der Regel ' + link( 'Datei:Editbutton.svg', 'Editbutton.svg' ) + '. Du kannst das Hintergrundbild ändern, falls es aber andere Abmessungen hat, solltest du die Breite und die Höhe des Buttons anpassen.\nTipp: Vermutlich willst du, dass alle Buttons das gleiche Hintergrundbild haben. Dazu kannst du rechts neben dem Eingabefeld auf „Für alle übernehmen“ klicken.',
 +
            TEXT,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-bgImageWidth',
 +
            'Breite des Hintergrundbildes\nWie auch das Icon kannst du das Vordergrundbild verkleinern, aber nicht vergrößern. Gibst du hier nichts an, wird es in voller Größe dargestellt.',
 +
            NUMBER,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-width',
 +
            'Breite des Buttons\nDer Button selbst ist ein div-Element. Hier kannst du dessen Breite einstellen.',
 +
            NUMBER,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-height',
 +
            'Höhe des Buttons\nHier kannst du die Höhe des Buttons einstellen.',
 +
            NUMBER,
 +
            ADVANCED
 +
        );
 +
         cr(
 +
            'button-action',
 +
            'Aktion\nHier kannst du angeben, was der Button beim Klick machen soll. Das Dropdown-Menü stellt dir fünf Möglichkeiten zur Verfügung: <b>Tags setzen</b> setzt Text vor und hinter die Cursorposition/Markierung im Eingabefeld. <b>Text oben einfügen</b> und <b>Text unten anhängen</b> fügen Text in einer neuen Zeile am Anfang oder am Ende des Eingabefeldes ein. <b>Seiteninhalt ersetzen</b> ersetzt den kompletten Seiteninhalt durch den angegebenen Text. <b>Funktion ausführen</b> führt eine JavaScript-Funktion aus.\nInnerhalb der Aktionstexte wie auch der Zusammenfassungen kannst du Variablen verwenden. Die werden über ein Eingabepopup angefragt. Die Syntax für eine Variable ist <code>%{Variablenname}%</code>, wobei <code>Variablenname</code> ein möglichst aussagekräftiger Name sein soll. Der kann beliebig lang sein und alle Zeichen außer <code>}</code> und <code>%</code> enthalten. Im Eingabepopup wird er gefolgt von einem Fragezeichen angezeigt. Eine Variable kann mehrmals verwendet werden, wird dabei aber nur einmal abgefragt.\nEs gibt drei voreingestellte Variablen, die nicht abgefragt werden: <code>%{Seitentitel}%</code> enthält den vollen Namen der Seite, auf die sich die Buttons beziehen. Das muss nicht zwangsläufig die grad geladene Seite sein. <code>%{Benutzername}%</code> ist der Name des gerade eingeloggten Benutzers, also deiner. Bei IPs ist diese Variable leer. <code>%{Signatur}%</code> enthält die berüchtigten vier Tilden, die die Benutzersignatur bilden. Das muss deshalb eine Variable sein, weil jeder angemeldete Benutzer diesen Code ändern kann, z. B. um den Strich davor zu entfernen.' +
 +
                '</p><p id="pEBC-button-action-desc-insertTags" class="pEBC-button-action-desc">Das obere Eingabefeld definiert den Text, der vor der Cursormarkierung eingefügt werden soll. Das mittlere Feld gibt den Text an, der nach der Markierung eingefügt wird. In das untere Feld kannst du einen Beispieltext eingeben, der eingefügt und markiert wird, wenn nichts anderes markiert wurde.' +
 +
                '</p><p id="pEBC-button-action-desc-prependText" class="pEBC-button-action-desc">Der Text im Eingabefeld wir über dem bisherigen Seiteninhalt eingefügt, gefolgt von einem Zeilenumbruch.' +
 +
                '</p><p id="pEBC-button-action-desc-appendText" class="pEBC-button-action-desc">Der Text im Eingabefeld wird unter dem bisherigen Seiteninhalt eingefügt, davor wird ein Zeilenumbruch eingefügt.' +
 +
                '</p><p id="pEBC-button-action-desc-replaceContent" class="pEBC-button-action-desc">Der Text im Eingabefeld ersetzt den bisherigen Seiteninhalt vollständig.' +
 +
                '</p><p id="pEBC-button-action-desc-function" class="pEBC-button-action-desc">In das Eingabefeld kannst du jetzt deine Funktion schreiben. Neben den üblichen globalen Variablen stehen folgende Funktionsargumente zur Verfügung: <b>button</b> ist das HTML-Objekt des Buttons, aber ein natives, nicht jQuery. <b>gadget</b> ist eine Referenz auf die globale Variable <i>gEditButtons</i>. <b>context</b> enthält die ID des Kontextes (also u. a. des Bearbeitungsfeldes), in dem der Button zur Zeit wirkt. <b>contextObj</b> ist das Kontextobjekt selbst. Die <code>%{…}%</code>-Variablen stehen hier nur innerhalb der Funktionen, die für die anderen vier Aktionsarten genutzt werden, zur Verfügung. Dein Quelltext wird also nicht verpfuscht. Wenn deine Funktion einen Rückgabewert liefert, wird die Zusammenfassungszeile nicht ausgefüllt, es sei denn, du rufst diese Funktion zu Fuß auf.',
 +
            '<select name="button-actionType"><option value="0">Tags setzen</option><option value="1">Text oben einfügen</option><option value="2">Text unten anhängen</option><option value="3">Seiteninhalt ersetzen</option><option value="4">Funktion ausführen</option>' +
 +
                '<br />' +
 +
                '<textarea name="button-actionText0" rows="5" style="display: block;"></textarea>' +
 +
                '<textarea name="button-actionText1" rows="5" style="display: block;"></textarea>' +
 +
                '<textarea name="button-actionText2" rows="5" style="display: block;"></textarea>'
 +
        );
 +
        cr(
 +
            'button-summary',
 +
            'Zusammenfassung\nHier kannst du die Zusammenfassung, die bei Klick auf den Button eingetragen werden soll, eingeben. Wie im Aktionsteil können auch hier Variablen genutzt werden. Du kannst mehrere Zusammenfassungen eintragen, jede in eine Zeile. Es wird dann eine per Zufall ausgewählt.',
 +
            AREA
 +
        );
 +
        cr(
 +
            'button-pageTypes',
 +
            'Seitenarten\nSeitenarten funktionieren ähnlich wie Namensräume, sind aber etwas allgemeiner: <b>Inhaltsseiten</b> sind alle Seiten, die keine Diskussions-, CSS- oder JavaScript-Seiten sind. <b>Diskussionsseiten</b> sind alle Seiten in einem der Diskussionsnamensräume plus denen, die unter ' + link( 'MediaWiki:Gadget-global-config.js' ) + ' in der Variable <code>global.talkpages</code> definiert wurden, also z. B. auch die Wahllokale. <b>CSS-</b> und <b>JavaScript-Seiten</b> liegen in den Namensräumen <i>Benutzer</i> oder <i>MediaWiki</i> und enden auf <i>.css</i> oder <i>.js</i>.',
 +
            '<b>Nur auf Seiten dieser Art anzeigen:</b><br /><select name="button-pageTypesIn" multiple="multiple" size="' + pageTypeCount + '">' + pageTypeSelector + '</select><br /><b>Auf allen Seiten außer welchen dieser Art anzeigen:</b><br /><select name="button-pageTypesEx" multiple="multiple" size="' + pageTypeCount + '">' + pageTypeSelector + '</select>',
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-namespaces',
 +
            'Namensräume\nManche Buttons sollen nicht in allen Namensräumen auftauchen. Hier hast du zwei Möglichkeiten, einzustellen, wo der Button angezeigt werden soll: Entweder in allen angegebenen Namensräumen oder in allen außer den angegebenen.',
 +
            '<b>Nur in diesen Namensräumen anzeigen:</b><br /><select name="button-namespacesIn" multiple="multiple" size="' + namespaceCount + '">' + namespaceSelector + '</select><br /><b>In allen außer diesen Namensräumen anzeigen:</b><br /><select name="button-namespacesEx" multiple="multiple" size="' + namespaceCount + '">' + namespaceSelector + '</select>',
 +
            ADVANCED
 +
        );
 +
         cr(
 +
            'button-userGroups',
 +
            'Benutzergruppen\nManche Buttons sollen nur bestimmten Benutzergruppen zur Verfügung stehen.',
 +
            '<b>Nur Benutzern, die Mitglied einer dieser Gruppen sind, anzeigen:</b><br /><select name="button-userGroupsIn" multiple="multiple" size="' + userGroupCount + '">' + userGroupSelector + '</select><br /><b>Benutzern, die einer dieser Gruppen angehören, den Button nicht anzeigen:</b><br /><select name="button-userGroupsEx" multiple="multiple" size="' + userGroupCount + '">' + userGroupSelector + '</select>',
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-contexts',
 +
            'Bearbeitungskontexte\nJeder Kontext steht im Prinzip für ein Werkzeug, dass diese Buttons benutzt. Nicht in jedem Werkzeug sollen alle Buttons angezeigt werden. Im Werkzeug zum Erstellen eines neuen Beitrags würden Formatierungsknöppe, die das Layout zerschießen, z. B. keinen Sinn machen.',
 +
            '<b>Nur in diesen Werkzeugen anzeigen:</b><br /><select name="button-contextsIn" multiple="multiple" size="' + contextCount + '">' + contextSelector + '</select><br /><b>In allen außer diesen Werkzeugen anzeigen:</b><br /><select name="button-contextsEx" multiple="multiple" size="' + contextCount + '">' + contextSelector + '</select>',
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-condition',
 +
            'Erweiterte Konditionen\nFalls die Auswahlfelder da oben nicht ausreichen, kannst du hier eine Funktion angeben, die berechnet, ob der Button angezeigt werden soll oder nicht.\nEs stehen dabei folgende Variablen zur Verfügung: <b>title</b> ist ein mw.Title-Objekt und enthält den Titel der Seite, auf die sich das Bearbeitungsformular bezieht. <b>ns</b> ist die Namensraum-ID derselben Seite. <b>type</b> ist ein String und der Seitentyp, also <i>subject</i>, <i>talk</i>, <i>css</i> oder <i>js</i>. <b>context</b> ist die ID des jeweiligen Unterobjekts von <i>gEditButtons.contexts</i>, das sich auf das Bearbeitungsformular bezieht.\nGibt die Funktion <b>true</b> zurück, wird der Button auf jeden Fall angezeigt, unabhängig von allen anderen Konditionen. Gibt die Funktion <b>false</b> zurück, wird er nicht angezeigt. In allen anderen Fällen wird mit der normalen Konditionsberechnung fortgefahren.',
 +
            AREA,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-css',
 +
            'CSS\nDu kannst für jeden Button eigene Stylesheets angeben, um ihn genauer zu modifizieren.',
 +
            AREA,
 +
            ADVANCED
 +
        );
 +
        cr(
 +
            'button-options',
 +
            'Optionen\nJeder Button kann deaktiviert werden. Er taucht dann auf keiner Seite mehr auf, kann aber wieder reaktiviert werden.\nAlle nicht vom Benutzer erstellten Buttons können zurückgesetzt werden. Das bedeutet, dass alle vom Benutzer daran vorgenommenen Änderungen gelöscht werden, der Button selbst bleibt jedoch vorhanden. Beim Speichern werden deine Änderungen dann einfach übersprungen.\nSelbst erstellt Buttons kann man wieder löschen. Die werden beim Speichern ebenfalls weggelassen.',
 +
            '<input type="checkbox" name="button-disabled" id="pEBC-button-disabled" /> ' +
 +
                '<label for="pEBC-button-disabled">Button ist deaktiviert</label>' +
 +
                '<br />' +
 +
                '<input type="checkbox" name="button-reset" id="pEBC-button-reset" /> ' +
 +
                '<label for="pEBC-button-reset">Button zurücksetzen/löschen</label>',
 +
            NODEFAULT
 +
        );
 
     },
 
     },
  
     select: function( button ) {
+
     createRow: function( name, desc, input, flags ) {
         var id = button.getAttribute( 'data-id' );
+
        if ( flags === undefined ) {
         addCSS( '#pEBC-toolbar .editButton-' + id + ' { outline: 2px solid red; position: relative; z-index: 1; }', 'pEBC-outlineCSS' );
+
            flags = 0;
         var obj = pEBC.tempConfig.buttons[id] || pEBC.defaultConfig.buttons[id];
+
        }
         var group = obj.group || 'default';
+
        var advanced = ( flags & 1 ) ? ' class="pEBC-advancedRow" style="display: none;"' : '';
         pEBC.selectedGroup = group;
+
        var disabled = ( flags & 2 ) ? ' disabled="disabled"' : '';
         pEBC.selectedButton = id;
+
        // Eingabezeile
 +
        if ( input === 0 || input === undefined ) {
 +
            input = '<input type="text" name="' + name + '"' + disabled + ' />';
 +
        }
 +
        // Numerisches Input
 +
        else if ( input === 1 ) {
 +
            input = '<input type="number" name="' + name + '"' + disabled + ' />';
 +
        }
 +
        // Großes Textfeld
 +
        else if ( input === 2 ) {
 +
            input = '<textarea name="' + name + '"' + disabled + ' rows="5"></textarea>';
 +
        }
 +
        // Standardwertspalte
 +
        var defaultCol = '';
 +
        if ( ~flags & 2 && ~flags & 8 ) {
 +
            defaultCol = '<select name="' + name + '-default" size="2"><option value="1">Standard</option><option value="">Wie definiert:</option></select>';
 +
        }
 +
        // Zuweisungsspalte
 +
        var assignCol = '';
 +
        if ( ~flags & 2 && ~flags & 4 && name.indexOf( 'config-' ) !== 0 ) {
 +
            assignCol = '<input type="button" name="' + name + '-assignAll" value="Für alle übernehmen" />';
 +
            if ( name.indexOf( 'button-' ) === 0 ) {
 +
                assignCol = '<input type="button" name="' + name + '-assignGroup" value="Für Gruppe übernehmen" /><br />' + assignCol;
 +
            }
 +
        }
 +
        // HTML
 +
         var html = '<tr id="pEBC-row-' + name + '"' + advanced + '>' +
 +
            '<td class="pEBC-descCol">' +
 +
                '<p>' + desc.replace( /\n/g, '</p><p>' ) + '</p>' +
 +
            '</td>' +
 +
            '<td class="pEBC-defaultCol">' + defaultCol + '</td>' +
 +
            '<td class="pEBC-inputCol">' + input + '</td>' +
 +
            '<td class="pEBC-assignCol">' + assignCol + '</td>' +
 +
            '</tr>';
 +
        var obj = $( html );
 +
         obj.appendTo( '#pEBC-tab-' + name.split( '-' )[0] + ' table' );
 +
        return obj;
 +
    },
 +
 
 +
    fillConfigTable: function() {
 +
        $.each( ['marginGroups', 'marginButtons', 'showAllPages'], function( i, e ) {
 +
            document.pEBC['config-' + e].value = pEBC.form.config[e];
 +
            pEBC.setDefaultField( 'config-' + e );
 +
        } );
 +
    },
 +
 
 +
    fillGroupTable: function() {
 +
        $.each( ['id', 'name', 'css'], function( i, e ) {
 +
            document.pEBC['group-' + e].value = pEBC.form.groups[pEBC.selectedGroup][e];
 +
            pEBC.setDefaultField( 'group-' + e );
 +
        } );
 +
        document.pEBC['group-reset'].checked = pEBC.form.groups[pEBC.selectedGroup].reset;
 +
        pEBC.checkPosition( $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup ), 'group' );
 +
        $( '#pEBC-tab-group .pEBC-noSelection' ).hide();
 +
        $( '#pEBC-tab-group table' ).show();
 +
        pEBC.refreshInfoField();
 +
    },
 +
 
 +
    fillButtonTable: function() {
 +
         $.each( ['id', 'group', 'title', 'width', 'height', 'fgImage', 'fgImageWidth', 'bgImage', 'bgImageWidth', 'bgColor', 'condition', 'label', 'css', 'actionType', 'actionText0', 'actionText1', 'actionText2', 'namespacesIn', 'namespacesEx', 'userGroupsIn', 'userGroupsEx', 'pageTypesIn', 'pageTypesEx', 'contextsIn', 'contextsEx', 'summary'], function( i, e ) {
 +
            $( document.pEBC['button-' + e] ).val( pEBC.form.buttons[pEBC.selectedButton][e] );
 +
            pEBC.setDefaultField( 'button-' + e );
 +
        } );
 +
        pEBC.displayActionFields( pEBC.form.buttons[pEBC.selectedButton].actionType );
 +
        pEBC.setDefaultField( 'button-action' );
 +
        pEBC.setDefaultField( 'button-namespaces' );
 +
        pEBC.setDefaultField( 'button-pageTypes' );
 +
        pEBC.setDefaultField( 'button-userGroups' );
 +
        pEBC.setDefaultField( 'button-contexts' );
 +
         document.pEBC['button-disabled'].checked = pEBC.form.buttons[pEBC.selectedButton].disabled;
 +
         document.pEBC['button-reset'].checked = pEBC.form.buttons[pEBC.selectedButton].reset;
 +
         pEBC.checkPosition( $( '#pEBC-toolbar .editButton-' + pEBC.selectedButton ), 'button' );
 +
        $( '#pEBC-tab-button .pEBC-noSelection' ).hide();
 +
        $( '#pEBC-tab-button table' ).show();
 +
        pEBC.refreshInfoField();
 +
    },
  
        // Alle Eingabefelder nullen
+
    setDefaultField: function( name ) {
        $( '#pEBC-tab-groups input:not(:button):not(.pEBC-resetBox), #pEBC-tab-groups textarea, #pEBC-tab-buttons input:not(:button):not(.pEBC-resetBox), #pEBC-tab-groups textarea, #pEBC-tab-groups select' ).val( '' );
+
        name = name.split( '-' );
         if ( pEBC.defaultConfig.buttons[id] && pEBC.defaultConfig.buttons[id].hardcoded ) {
+
         if ( name[0] === 'config' ) {
             $( '#pEBC-tab-groups .pEBC-resetBox, #pEBC-tab-buttons .pEBC-resetBox' ).prop( 'checked', true ).prop( 'disabled', false );
+
             var value = pEBC.form.config[name[1] + '-default'];
 
         }
 
         }
 
         else {
 
         else {
             $( '#pEBC-tab-groups .pEBC-resetBox, #pEBC-tab-buttons .pEBC-resetBox' ).prop( 'checked', false ).prop( 'disabled', true );
+
             var obj = pEBC.form[name[0] + 's'][pEBC['selected' + $.ucFirst( name[0] )]];
 +
            var value = obj[name[1] + '-default'];
 +
        }
 +
        value = ( value === '' ) ? '' : '1';
 +
        var element = document.pEBC[name[0] + '-' + name[1] + '-default'];
 +
        if ( element ) {
 +
            element.value = value;
 +
        }
 +
    },
 +
 
 +
    displayActionFields: function( type ) {
 +
        var display = ( type === '0' || type === 0 ) ? 'block' : 'none';
 +
        $( '#pEBC-row-button-action .pEBC-button-action-desc:not(:eq(' + type + '))' ).hide();
 +
        $( '#pEBC-row-button-action .pEBC-button-action-desc:eq(' + type + ')' ).show();
 +
        document.pEBC['button-actionText1'].style.display = display;
 +
        document.pEBC['button-actionText2'].style.display = display;
 +
    },
 +
 
 +
    change: function() {
 +
        var name = this.getAttribute( 'name' ).split( '-' );
 +
        var value = $( this ).val();
 +
        var tab = name[0];
 +
        var prop = name[2] ? name[1] + '-' + name[2] : name[1];
 +
 
 +
        if ( tab === 'config' ) {
 +
            var obj = pEBC.form.config;
 +
        }
 +
        else if ( tab === 'group' ) {
 +
            var obj = pEBC.form.groups[pEBC.selectedGroup];
 +
        }
 +
        else if ( tab === 'button' ) {
 +
            var obj = pEBC.form.buttons[pEBC.selectedButton];
 
         }
 
         }
  
         $( '#pEBC-tab-groups *[name="id"]' ).val( group );
+
         if ( !name[2] ) {
        $( '#pEBC-tab-buttons *[name="id"]' ).val( id );
+
            var defaultField = name[0] + '-' + name[1] + '-default';
 +
            if ( document.pEBC[defaultField] ) {
 +
                document.pEBC[defaultField].value = '';
 +
                obj[name[1] + '-default'] = '';
 +
            }
 +
        }
  
         // Gruppen: Erst die Standard- und dann die temporäre Konfiguration abarbeiten
+
         if ( tab === 'config' ) {
        $.each( ['defaultConfig', 'tempConfig'], function( i, c ) {
+
             if ( prop === 'resetGroupOrder' ) {
            // Prüfen, ob das gesuchte Gruppenobjekt existiert und nicht null ist
+
                obj[prop] = this.checked;
             if ( pEBC[c].groups[group] !== undefined && pEBC[c].groups[group] !== null ) {
+
            }
                 // Über jede Eigenschaft des Objekts iterieren
+
            else {
                 $.each( pEBC[c].groups[group], function( i, e ) {
+
                obj[prop] = value;
                    // Das Eingabefeld mit dem entsprechenden Wert füllen
+
                pEBC.refreshConfig();
                    $( '#pEBC-tab-groups *[name="' + i + '"]' ).val( e );
+
            }
                    // Wenn dies die temporäre Konfiguration ist, sollen die Reset-Häkchen entfernt werden
+
        }
                    if ( c === 'tempConfig' && pEBC[c].groups[group][i] !== null ) {
+
        else if ( tab === 'group' ) {
                        $( '#pEBC-tab-groups .pEBC-resetBox[value="' + i + '"]' ).prop( 'checked', false );
+
            if ( prop === 'reset' || prop === 'resetButtonOrder' ) {
 +
                 obj[prop] = this.checked;
 +
            }
 +
            else {
 +
                 obj[prop] = value;
 +
                pEBC.refreshGroup();
 +
                if ( prop === 'name' ) {
 +
                    pEBC.refreshInfoField();
 +
                }
 +
            }
 +
        }
 +
        else if ( tab === 'button' ) {
 +
            switch ( prop ) {
 +
                case 'actionType':
 +
                case 'actionText0':
 +
                case 'actionText1':
 +
                case 'actionText2':
 +
                    obj[prop] = value;
 +
                    document.pEBC['button-action-default'].value = '';
 +
                    obj['action-default'] = '';
 +
                    if ( prop === 'actionType' ) {
 +
                        pEBC.displayActionFields( value );
 
                     }
 
                     }
                 } );
+
                    break;
 +
                 case 'namespacesIn':
 +
                case 'namespacesEx':
 +
                case 'userGroupsIn':
 +
                case 'userGroupsEx':
 +
                case 'pageTypesIn':
 +
                case 'pageTypesEx':
 +
                case 'contextsIn':
 +
                case 'contextsEx':
 +
                    obj[prop] = value;
 +
                    var sliced = prop.slice( 0, -2 )
 +
                    document.pEBC['button-' + sliced + '-default'].value = '';
 +
                    obj[sliced + '-default'] = '';
 +
                    break;
 +
                case 'disabled':
 +
                case 'reset':
 +
                    obj[prop] = this.checked;
 +
                    break;
 +
                case 'group':
 +
                    obj[prop] = value;
 +
                    var buttonObj = $( '#pEBC-toolbar .editButton-' + pEBC.selectedButton );
 +
                    buttonObj.appendTo( '#pEBC-toolbar .buttonGroup-' + value );
 +
                    var reverse = [];
 +
                    // Entweder über alle Buttons in der Ordnung iterieren …
 +
                    if ( pEBC.form.groups[value].buttonOrder ) {
 +
                        $.each( pEBC.form.groups[value].buttonOrder, function( i, e ) {
 +
                            reverse.unshift( e );
 +
                        } );
 +
                    }
 +
                    // … oder über alle Buttons im Formular
 +
                    else {
 +
                        $.each( pEBC.form.buttons, function( i, e ) {
 +
                            if ( e.group === value ) {
 +
                                reverse.unshift( i );
 +
                            }
 +
                        } );
 +
                    }
 +
                    $.each( reverse, function( i, e ) {
 +
                        $( '#pEBC-toolbar .buttonGroup-' + value + ' .editButton-' + e ).prependTo( '#pEBC-toolbar .buttonGroup-' + value );
 +
                    } );
 +
                    $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton' ).removeClass( 'lastEditButton' );
 +
                    $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton:last-child' ).addClass( 'lastEditButton' );
 +
                    $( '#pEBC-toolbar .buttonGroup-' + value + ' .editButton' ).removeClass( 'lastEditButton' );
 +
                    $( '#pEBC-toolbar .buttonGroup-' + value + ' .editButton:last-child' ).addClass( 'lastEditButton' );
 +
                    pEBC.selectedGroup = value;
 +
                    pEBC.refreshInfoField();
 +
                    pEBC.checkPosition( buttonObj, 'button' );
 +
                    break;
 +
                default:
 +
                    obj[prop] = value;
 +
                    pEBC.refreshButton( prop );
 +
                    if ( prop === 'title' ) {
 +
                        pEBC.refreshInfoField();
 +
                    }
 +
                    break;
 +
            }
 +
        }
 +
    },
 +
 
 +
    refreshInfoField: function() {
 +
        // Gruppe
 +
        if ( pEBC.selectedGroup ) {
 +
            var group = pEBC.form.groups[pEBC.selectedGroup];
 +
            $( '#pEBC-info dd:first' ).text( '#' + group.id + ': ' + group.name );
 +
        }
 +
        else {
 +
            $( '#pEBC-info dd:first' ).html( '&mdash;' );
 +
        }
 +
        if ( pEBC.selectedButton ) {
 +
            var button = pEBC.form.buttons[pEBC.selectedButton];
 +
            $( '#pEBC-info dd:last' ).text( '#' + button.id + ': ' + button.title );
 +
        }
 +
        else {
 +
            $( '#pEBC-info dd:last' ).html( '&mdash;' );
 +
        }
 +
    },
 +
 
 +
    refreshConfig: function() {
 +
        var css = '';
 +
 
 +
        // Buttonabweichung
 +
        var marginButtons = ( pEBC.form.config['marginButtons-default'] ) ? pEBC.defaultConfig.config.marginButtons : pEBC.form.config.marginButtons;
 +
        css += '#pEBC-toolbar .editButton { margin-right: ' + marginButtons + 'px; margin-bottom: ' + marginButtons + 'px; }';
 +
 
 +
        // Gruppenabweichung (letzter Button)
 +
        var marginGroups = ( pEBC.form.config['marginGroups-default'] ) ? pEBC.defaultConfig.config.marginGroups : pEBC.form.config.marginGroups;
 +
        css += '#pEBC-toolbar .editButton.lastEditButton { margin-right: ' + marginGroups + 'px; }';
 +
 
 +
        addCSS( css, 'pEBC-toolbarCSS' );
 +
    },
 +
 
 +
    refreshGroup: function() {
 +
        var group = pEBC.selectedGroup;
 +
        var css = '';
 +
        if ( pEBC.form.groups[group]['css-default'] ) {
 +
            if ( gEditButtons.groups[group] ) {
 +
                css = String( gEditButtons.groups[group].css || '' ).replace( /[\r\n]/g, ' ' );
 
             }
 
             }
         } );
+
         }
 +
        else {
 +
            css = pEBC.form.groups[group].css.replace( /[\r\n]/g, ' ' );
 +
        }
 +
        $( '#pEBC-toolbar .buttonGroup-' + group ).attr( 'style', css );
 +
    },
  
        // Eigenschaften des Prototyps übernehmen
+
    refreshButton: function( prop ) {
        $.each( gEditButtons.EditButton.prototype, function( i, e ) {
+
        function getProp( prop ) {
            if ( i !== 'id' ) {
+
            var button = pEBC.selectedButton;
                // Manche Werte müssen auf bestimmte Weise übernommen werden
+
            if ( pEBC.form.buttons[button][prop + '-default'] ) {
                switch ( i ) {
+
                if ( pEBC.defaultConfig.buttons[button] && pEBC.defaultConfig.buttons[button][prop] !== undefined && pEBC.defaultConfig.buttons[button][prop] !== null ) {
                    case 'actionText':
+
                    return pEBC.defaultConfig.buttons[button][prop];
                        if ( typeof e === 'object' ) {
+
                }
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(0)' ).val( e[0] );
+
                else {
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(1)' ).val( e[1] ).prop( 'disabled', false );
+
                     return gEditButtons.EditButton.prototype[prop];
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(2)' ).val( e[2] ).prop( 'disabled', false );
 
                        }
 
                        else  {
 
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(0)' ).val( e );
 
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(1)' ).val( '' ).prop( 'disabled', true );
 
                            $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(2)' ).val( '' ).prop( 'disabled', true );
 
                        }
 
                        return;
 
                    case 'summary':
 
                        if ( typeof e === 'object' ) {
 
                            e = e.join( '\n' );
 
                        }
 
                        break;
 
                     case 'namespacesIn':
 
                    case 'namespacesEx':
 
                    case 'pageTypesIn':
 
                    case 'pageTypesEx':
 
                    case 'userGroupsIn':
 
                    case 'userGroupsEx':
 
                    case 'contextsIn':
 
                    case 'contextsEx':
 
                        if ( e === true || e === false ) {
 
                            e = '!';
 
                        }
 
                        break;
 
 
                 }
 
                 }
                // Das Eingabefeld mit dem entsprechenden Wert füllen
 
                $( '#pEBC-tab-buttons *[name="' + i + '"]' ).val( e );
 
 
             }
 
             }
         } );
+
            else {
 +
                return pEBC.form.buttons[button][prop];
 +
            }
 +
         }
 +
 
 +
        prop = prop.replace( '-default', '' );
 +
        var button = pEBC.selectedButton;
 +
        var obj = $( '#pEBC-toolbar .editButton-' + button );
 +
        var form = pEBC.form.buttons[button];
  
         // Buttons: Erst die Standard- und dann die temporäre Konfiguration abarbeiten
+
         switch ( prop ) {
        $.each( ['defaultConfig', 'tempConfig'], function( i, c ) {
+
            case 'width':
             // Prüfen, ob das gesuchte Buttonobjekt existiert und nicht null ist
+
            case 'height':
             if ( pEBC[c].buttons[id] !== undefined && pEBC[c].buttons[id] !== null ) {
+
            case 'bgImage':
                 // Über jede Eigenschaft des Objekts iterieren
+
            case 'bgImageWidth':
                 $.each( pEBC[c].buttons[id], function( i, e ) {
+
             case 'bgColor':
                     // Wenn dies die temporäre Konfiguration ist, sollen die Reset-Häkchen entfernt werden
+
             case 'css':
                    if ( c === 'tempConfig' && pEBC[c].buttons[id][i] !== null ) {
+
                var css = [];
                        var is = i.replace( /(?:In|Ex|Type|Text)$/, '' );
+
                css.push( 'width: ' + getProp( 'width' ) + 'px;' );
                        $( '#pEBC-tab-buttons .pEBC-resetBox[value="' + is + '"]' ).prop( 'checked', false );
+
                css.push( 'height: ' + getProp( 'height' ) + 'px;' );
 +
                if ( !getProp( 'fgImage' ) ) {
 +
                    css.push( 'line-height: ' + getProp( 'height' ) + 'px;' );
 +
                 }
 +
                css.push( 'background-color: ' + getProp( 'bgColor' ) + ';' );
 +
                var size = getProp( 'bgImageWidth' );
 +
                 if ( size ) {
 +
                    var url = '/thumb.php?' + $.param( {
 +
                        f: getProp( 'bgImage' ),
 +
                        w: size
 +
                    } );
 +
                }
 +
                else {
 +
                     var url = getFileSource( getProp( 'bgImage' ) );
 +
                }
 +
                css.push( 'background-image: url(\'' + url + '\');' );
 +
                css.push( getProp( 'css' ).replace( /[\r\n]/g, ' ' ) );
 +
                if ( css.length ) {
 +
                    obj.attr( 'style', css.join( ' ' ) );
 +
                }
 +
                break;
 +
            case 'title':
 +
                obj.attr( 'title', getProp( 'title' ) );
 +
                break;
 +
            case 'label':
 +
            case 'fgImage':
 +
            case 'fgImageWidth':
 +
                var image = getProp( 'fgImage' );
 +
                if ( image ) {
 +
                    var size = getProp( 'fgImageWidth' );
 +
                    if ( size ) {
 +
                        var url = '/thumb.php?' + $.param( {
 +
                            f: image,
 +
                            w: size
 +
                        } );
 
                     }
 
                     }
                     switch ( i ) {
+
                     else {
                        case 'actionText':
+
                         var url = getFileSource( image );
                            if ( typeof e === 'object' ) {
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(0)' ).val( e[0] );
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(1)' ).val( e[1] ).prop( 'disabled', false );
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(2)' ).val( e[2] ).prop( 'disabled', false );
 
                            }
 
                            else {
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(0)' ).val( e );
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(1)' ).val( '' ).prop( 'disabled', true );
 
                                $( '#pEBC-tab-buttons *[name="' + i + '"]:eq(2)' ).val( '' ).prop( 'disabled', true );
 
                            }
 
                            return;
 
                         case 'summary':
 
                            if ( typeof e === 'object' ) {
 
                                e = e.join( '\n' );
 
                            }
 
                            break;
 
                        case 'namespacesIn':
 
                        case 'namespacesEx':
 
                        case 'pageTypesIn':
 
                        case 'pageTypesEx':
 
                        case 'userGroupsIn':
 
                        case 'userGroupsEx':
 
                        case 'contextsIn':
 
                        case 'contextsEx':
 
                            if ( e === true || e === false ) {
 
                                e = '!';
 
                            }
 
                            break;
 
 
                     }
 
                     }
                     $( '#pEBC-tab-buttons *[name="' + i + '"]' ).val( e );
+
                     obj.html( '<img src="' + mw.html.escape( url ) + '" alt="" />' );
                 } );
+
                }
             }
+
                else {
         } );
+
                    obj.html( getProp( 'label' ) );
 +
                 }
 +
                break;
 +
        }
 +
    },
 +
 
 +
    toggleAdvanced: function() {
 +
        if ( this.checked ) {
 +
            $( '.pEBC-advancedRow' ).show();
 +
        }
 +
        else {
 +
             $( '.pEBC-advancedRow' ).hide();
 +
        }
 +
    },
 +
 
 +
    save: function( e ) {
 +
         e.preventDefault();
 +
        this.disabled = true;
 +
        var data = pEBC.getData();
 +
        api.saveGadgetOptions( 'editbuttons', data, pEBC.response, this );
 
     },
 
     },
  
     submit: function( e ) {
+
     reset: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
         var button = $( this );
+
         this.disabled = true;
         button.prop( 'disabled', true );
+
         if ( confirm( 'Achtung! Du bist dabei, deine Buttoneinstellungen vollständig zu VERNICHTEN! Willst du das wirklich tun? Das kannst du nur rückgängig machen, indem du auf jetzt den Speicherknopf klickst. Sobald du diese Seite verlässt, sind die Einstellungen verloren!' ) ) {
        api.saveGadgetOptions( 'editbuttons', pEBC.tempConfig, function() {
+
            var data = {
             button.prop( 'disabled', false );
+
                config: {},
         } );
+
                groups: {},
 +
                buttons: {}
 +
            };
 +
            api.saveGadgetOptions( 'editbuttons', data, pEBC.response, this );
 +
        }
 +
        else {
 +
             this.disabled = false;
 +
         }
 
     },
 
     },
  
 
     newGroup: function( e ) {
 
     newGroup: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
         var id = prompt( 'ID der neuen Gruppe?', '' );
+
 
         if ( !id || id.match( /^[A-Z_][A-Z0-9_]*$/i ) === null || pEBC.tempConfig.groups[id] ) {
+
        var form = pEBC.form;
             alert( 'Gruppe hat einen blöden Namen, gar keinen Namen oder existiert schon, zusammengefasst: Nö.' );
+
 
 +
         var id = prompt( 'ID der neuen Gruppe? Darf nur aus Buchstaben (A – Z und a – z), Zahlen und dem Unterstrich bestehen und nicht mit einer Zahl beginnen.' ) || '';
 +
         if ( id === '' || typeof form.groups[id] === 'object' || id.match( /[A-Z_][A-Z0-9_]*/gi ) === null ) {
 +
             alert( 'Gruppen-ID ist leer, schon besetzt oder passt nicht.' );
 
             return;
 
             return;
 
         }
 
         }
        var name = prompt( 'Anzeigename?', '' ) || '(Neue Gruppe)';
+
 
         pEBC.tempConfig.groups[id] = { id: id, name: name };
+
         form.groups[id] = {
         $( '<span class="buttonGroup buttonGroup-' + id + '" />' ).appendTo( '#pEBC-toolbar' );
+
            id: id,
 +
            name: '',
 +
            css: '',
 +
            buttonOrder: []
 +
        };
 +
         $( '<span class="buttonGroup buttonGroup-' + id + '" data-id="' + id + '" />' ).appendTo( '#pEBC-toolbar' );
 
         $( '#pEBC-toolbar .editButton:last' ).addClass( 'lastEditButton' );
 
         $( '#pEBC-toolbar .editButton:last' ).addClass( 'lastEditButton' );
         $( '#pEBC-tab-buttons select[name="group"]' ).append( '<option value="' + id + '">' + name + '</option>' );
+
         $( document.pEBC['button-group'] ).append( '<option value="' + id + '"></option>' );
         if ( pEBC.newButton( id ) === false ) {
+
         $( '#pEBC-tab-button .pEBC-noSelection' ).show();
            delete pEBC.tempConfig.groups[id];
+
        $( '#pEBC-tab-button > table' ).hide();
            $( '#pEBC-toolbar .buttonGroup-' + id ).remove();
+
        addCSS( '', 'pEBC-selectedCSS' );
            $( '#pEBC-toolbar .lastEditButton:last' ).removeClass( 'lastEditButton' );
+
        pEBC.selectedGroup = id;
            $( '#pEBC-tab-buttons select[name="group"] option[value="' + id + '"]' ).remove();
+
        pEBC.selectedButton = null;
        }
+
        pEBC.fillGroupTable();
 
     },
 
     },
  
 
     newButton: function( e ) {
 
     newButton: function( e ) {
         if ( typeof e !== 'string' ) {
+
         e.preventDefault();
            e.preventDefault();
+
 
            var newGroup = pEBC.selectedGroup || 'default';
+
        var form = pEBC.form;
 +
        var group = pEBC.selectedGroup || 'default';
 +
 
 +
        var id = prompt( 'ID des neuen Buttons? Darf nur aus Buchstaben (A – Z und a – z), Zahlen und dem Unterstrich bestehen und nicht mit einer Zahl beginnen.' ) || '';
 +
        if ( id === '' || typeof form.buttons[id] === 'object' || id.match( /[A-Z_][A-Z0-9_]*/gi ) === null ) {
 +
            alert( 'Button-ID ist leer, schon besetzt oder passt nicht.' );
 +
            return;
 
         }
 
         }
         else {
+
 
             var newGroup = e;
+
         form.buttons[id] = {
         }
+
             id: id
         var id = prompt( 'ID des neuen Buttons?', '' );
+
         };
        if ( !id || id.match( /^[A-Z_][A-Z0-9_]*$/i ) === null || pEBC.tempConfig.buttons[id] ) {
+
         var button = new gEditButtons.EditButton( form.buttons[id] );
            alert( 'Button hat einen blöden Namen, gar keinen Namen oder existiert schon, zusammengefasst: Nö.' );
+
        pEBC.assignButtonProps( id, true );
            return false;
+
         form.buttons[id].group = group;
        }
+
         form.buttons[id]['group-default'] = '';
         pEBC.tempConfig.buttons[id] = { id: id, group: newGroup };
 
         $( '#pEBC-toolbar .buttonGroup-' + newGroup + ' .lastEditButton:last' ).removeClass( 'lastEditButton' );
 
        var button = new gEditButtons.EditButton( { id: id } );
 
 
         button = button.getButton( 'config' );
 
         button = button.getButton( 'config' );
         button.addClass( 'lastEditButton' ).appendTo( '#pEBC-toolbar .buttonGroup-' + newGroup );
+
        $( '#pEBC-toolbar .buttonGroup-' + group + ' .editButton:last' ).removeClass( 'lastEditButton' );
 +
         button.addClass( 'lastEditButton' ).appendTo( '#pEBC-toolbar .buttonGroup-' + group );
 
         pEBC.select( button.get()[0] );
 
         pEBC.select( button.get()[0] );
        return true;
 
 
     },
 
     },
  
     changeConfig: function( e ) {
+
     moveGroup: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
  
         $( '#pEBC-tab-config input:text' ).each( function( i, e ) {
+
         var direction = this.getAttribute( 'name' ).slice( 11 );
            var name = e.name;
+
        var obj = $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup );
            var checked = $( '#pEBC-tab-config .pEBC-resetBox[value="' + name + '"]' ).prop( 'checked' );
+
        var option = $( '#pEBC-tab-button select[name="button-group"] option[value="' + pEBC.selectedGroup + '"]' );
             pEBC.tempConfig.config[name] = checked ? null : parseInt( e.value );
+
 
 +
        if ( direction === 'left' ) {
 +
            obj.after( obj.prev( '.buttonGroup' ) );
 +
            option.after( option.prev( 'option' ) );
 +
        }
 +
        else {
 +
            obj.before( obj.next( '.buttonGroup' ) );
 +
             option.before( option.next( 'option' ) );
 +
        }
 +
        pEBC.checkPosition( obj, 'group' );
 +
        pEBC.form.config.groupOrder = [];
 +
        $( '#pEBC-toolbar .buttonGroup' ).each( function( i, e ) {
 +
            pEBC.form.config.groupOrder.push( e.getAttribute( 'data-id' ) );
 
         } );
 
         } );
 +
        $( '#pEBC-toolbar .buttonGroup .editButton:last-child' ).addClass( 'lastEditButton' );
 +
        $( '#pEBC-toolbar .buttonGroup:last-child .editButton:last-child' ).removeClass( 'lastEditButton' );
 +
    },
 +
 +
    moveButton: function( e ) {
 +
        e.preventDefault();
  
         if ( $( '#pEBC-tab-config .pEBC-resetBox[value="showAllPages"]' ).prop( 'checked' ) ) {
+
         var direction = this.getAttribute( 'name' ).slice( 12 );
             pEBC.tempConfig.config.showAllPages = null;
+
        var obj = $( '#pEBC-toolbar .editButton-' + pEBC.selectedButton );
 +
 
 +
        if ( direction === 'left' ) {
 +
             obj.after( obj.prev( '.editButton' ) );
 
         }
 
         }
 
         else {
 
         else {
             pEBC.tempConfig.config.showAllPages = [];
+
             obj.before( obj.next( '.editButton' ) );
            var pages = $( '#pEBC-tab-config textarea[name="showAllPages"]' ).val().split( '\n' );
+
        }
            $.each( pages, function( i, e ) {
+
        pEBC.checkPosition( obj, 'button' );
                e = $.trim( e );
+
        pEBC.form.groups[pEBC.selectedGroup].buttonOrder = [];
                if ( e !== '' ) {
+
        $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton' ).each( function( i, e ) {
                    pEBC.tempConfig.config.showAllPages.push( e.replace( / /g, '_' ) );
+
            pEBC.form.groups[pEBC.selectedGroup].buttonOrder.push( e.getAttribute( 'data-id' ) );
                }
+
        } );
             } );
+
        $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton' ).removeClass( 'lastEditButton' );
 +
        $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton:last-child' ).addClass( 'lastEditButton' );
 +
    },
 +
 
 +
    checkPosition: function( obj, type ) {
 +
        document.pEBC[type + '-move-left'].disabled = obj.is( ':first-child' );
 +
        document.pEBC[type + '-move-right'].disabled = obj.is( ':last-child' );
 +
    },
 +
 
 +
    response: function( data, button, jqxhr ) {
 +
        if ( !data ) {
 +
            alert( 'Konnte nicht speichern. HTTP-Statuscode ' + jqxhr.status + ': ' + jqxhr.statusText );
 +
        }
 +
        else if ( data.error ) {
 +
             alert( 'Konnte nicht speichern. API-Fehlercode ' + data.error.code + ': ' + data.error.text );
 
         }
 
         }
 +
        button.disabled = false;
 
     },
 
     },
  
     changeGroup: function( e ) {
+
     exportJSON: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
 +
    },
  
         if ( !pEBC.tempConfig.groups[pEBC.selectedGroup] ) {
+
    getData: function() {
             pEBC.tempConfig.groups[pEBC.selectedGroup] = {};
+
         function changed( obj, prop ) {
 +
             return ( obj[prop + '-default'] === '' );
 
         }
 
         }
  
         $( '#pEBC-tab-groups .pEBC-resetBox' ).each( function( i, e ) {
+
         var form = pEBC.form;
            var name = e.value;
+
        var data = {
            var group = pEBC.tempConfig.groups[pEBC.selectedGroup];
+
            config: {},
             if ( e.checked ) {
+
            groups: {},
                 group[name] = null;
+
            buttons: {}
 +
        };
 +
 
 +
        $.each( ['marginGroups', 'marginButtons'], function( i, e ) {
 +
             if ( changed( form.config, e ) ) {
 +
                 data.config[e] = parseInt( form.config[e] ) || 0;
 
             }
 
             }
            else {
+
        } );
                group[name] = $( '#pEBC-tab-groups *[name="' + name + '"]' ).val();
+
 
 +
        if ( changed( form.config, 'showAllPages' ) ) {
 +
            data.config.showAllPages = [];
 +
            var pages = form.config.showAllPages.split( '\n' );
 +
            $.each( pages, function( i, e ) {
 +
                data.config.showAllPages.push( $.trim( e ).replace( / /g, '_' ) );
 +
            } );
 +
        }
 +
 
 +
        if ( form.config.groupOrder !== undefined && !form.config.resetGroupOrder ) {
 +
            data.config.groupOrder = form.config.groupOrder;
 +
        }
 +
 
 +
        // Über alle Gruppen iterieren
 +
        $.each( form.groups, function( i, e ) {
 +
            // Beim Zurücksetzen überspringen
 +
            if ( e.reset ) {
 +
                return;
 +
            }
 +
 
 +
            var isSet = false;
 +
            var group = {};
 +
 
 +
            $.each( ['name', 'css'], function( i2, e2 ) {
 +
                if ( changed( e, e2 ) ) {
 +
                    group[e2] = e[e2];
 +
                    isSet = true;
 +
                }
 +
            } );
 +
 
 +
            if ( e.buttonOrder !== undefined && !e.resetButtonOrder ) {
 +
                group.buttonOrder = e.buttonOrder;
 +
                isSet = true;
 +
            }
 +
 
 +
            if ( isSet ) {
 +
                data.groups[i] = group;
 +
            }
 +
        } );
 +
 
 +
        // Und über alle Buttons
 +
        $.each( form.buttons, function( i, e ) {
 +
            var button = pEBC.getButtonData( e );
 +
            if ( button ) {
 +
                data.buttons[i] = button;
 
             }
 
             }
 
         } );
 
         } );
 +
 +
        return data;
 
     },
 
     },
  
     changeButton: function( e ) {
+
     getButtonData: function( button ) {
         e.preventDefault();
+
        function changed( prop ) {
 +
            return ( button[prop + '-default'] === '' );
 +
        }
 +
 
 +
        // Beim Zurücksetzen überspringen
 +
        if ( button.reset ) {
 +
            return false;
 +
        }
 +
 
 +
        var data = {};
 +
        var isSet = false;
 +
 
 +
        // Direkt übernehmen
 +
        $.each( ['group', 'title', 'label', 'fgImage', 'bgImage', 'bgColor', 'condition', 'css'], function( i, e ) {
 +
            if ( changed( e ) ) {
 +
                data[e] = button[e];
 +
                isSet = true;
 +
            }
 +
        } );
 +
 
 +
         // Numerische Werte
 +
        $.each( ['width', 'height', 'fgImageWidth', 'bgImageWidth'], function( i, e ) {
 +
            if ( changed( e ) ) {
 +
                data[e] = parseInt( button[e] ) || 0;
 +
                isSet = true;
 +
            }
 +
        } );
  
         if ( !pEBC.tempConfig.buttons[pEBC.selectedButton] ) {
+
        // Aktion
            pEBC.tempConfig.buttons[pEBC.selectedButton] = { id: pEBC.selectedButton };
+
         if ( changed( 'action' ) ) {
 +
            data.actionType = parseInt( button.actionType );
 +
            if ( data.actionType === 0 ) {
 +
                data.actionText = [button.actionText0, button.actionText1, button.actionText2];
 +
            }
 +
            else {
 +
                data.actionText = button.actionText0;
 +
            }
 +
            isSet = true;
 
         }
 
         }
  
         $( '#pEBC-tab-buttons .pEBC-resetBox' ).each( function( i, e ) {
+
         // Zusammenfassung
            var checked = e.checked;
+
        if ( changed( 'summary' ) ) {
             var name = e.value;
+
            data.summary = [];
             var button = pEBC.tempConfig.buttons[pEBC.selectedButton];
+
            var summaries = button.summary.split( '\n' );
 +
            $.each( summaries, function( i, e ) {
 +
                data.summary.push( $.trim( e ) );
 +
             } );
 +
             isSet = true;
 +
        }
  
            switch( name ) {
+
        // Konditionskrempel
                // Normaler Text
+
        $.each( ['namespaces', 'pageTypes', 'userGroups', 'contexts'], function( i, e ) {
                case 'group':
+
            if ( changed( e ) ) {
                case 'title':
+
                var inValue = button[e + 'In'];
                case 'bgColor':
+
                var exValue = button[e + 'Ex'];
                case 'bgImage':
+
                data[e + 'In'] = ( inValue === '!' || inValue[0] === '!' ) ? true : inValue;
                case 'fgImage':
+
                 data[e + 'Ex'] = ( exValue === '!' || exValue[0] === '!' ) ? false : exValue;
                case 'label':
+
                 isSet = true;
                case 'condition':
 
                    button[name] = checked ? null : $( '#pEBC-tab-buttons *[name="' + name + '"]' ).val();
 
                    break;
 
                // Numerische Werte
 
                case 'width':
 
                case 'height':
 
                case 'fgImageWidth':
 
                case 'bgImageWidth':
 
                    button[name] = checked ? null : parseInt( $( '#pEBC-tab-buttons input[name="' + name + '"]' ).val() );
 
                    break;
 
                // Opt-ins und Opt-outs
 
                case 'namespaces':
 
                case 'userGroups':
 
                case 'pageTypes':
 
                case 'contexts':
 
                    if ( checked ) {
 
                        button[name + 'In'] = null;
 
                        button[name + 'Ex'] = null;
 
                    }
 
                    else {
 
                        var inVal = $( '#pEBC-tab-buttons select[name="' + name + 'In"]' ).val();
 
                        button[name + 'In'] = ( inVal[0] === '!' ) ? true : inVal;
 
                        var exVal = $( '#pEBC-tab-buttons select[name="' + name + 'Ex"]' ).val();
 
                        button[name + 'Ex'] = ( exVal[0] === '!' ) ? false : exVal;
 
                    }
 
                    break;
 
                 // Aktion
 
                case 'action':
 
                    var actionType = $( '#pEBC-tab-buttons select[name="actionType"]' ).val();
 
                    if ( actionType === '0' ) {
 
                        $( '#pEBC-tab-buttons textarea[name="actionText"]:gt(0)' ).prop( 'disabled', false );
 
                    }
 
                    else {
 
                        $( '#pEBC-tab-buttons textarea[name="actionText"]:gt(0)' ).prop( 'disabled', true );
 
                    }
 
                    if ( checked ) {
 
                        button.actionType = null;
 
                        button.actionText = null;
 
                    }
 
                    else {
 
                        var actionText1 = $( '#pEBC-tab-buttons textarea[name="actionText"]:eq(0)' ).val();
 
                        var actionText2 = $( '#pEBC-tab-buttons textarea[name="actionText"]:eq(1)' ).val();
 
                        var actionText3 = $( '#pEBC-tab-buttons textarea[name="actionText"]:eq(2)' ).val();
 
                        button.actionType = parseInt( actionType );
 
                        if ( actionType === '0' ) {
 
                            button.actionText = [actionText1, actionText2, actionText3];
 
                        }
 
                        else {
 
                            button.actionText = actionText1;
 
                        }
 
                    }
 
                    break;
 
                 // Zusammenfassung
 
                case 'summary':
 
                    if ( checked ) {
 
                        button.summary = null;
 
                    }
 
                    else {
 
                        button.summary = [];
 
                        var summaries = $( '#pEBC-tab-buttons textarea[name="summary"]' ).val().split( '\n' );
 
                        $.each( summaries, function( i, e ) {
 
                            e = $.trim( e );
 
                            if ( e !== '' ) {
 
                                button.summary.push( e );
 
                            }
 
                        } );
 
                    }
 
                    break;
 
 
             }
 
             }
 
         } );
 
         } );
    }
 
  
};
+
        // Deaktiviert?
 +
        if ( button.disabled ) {
 +
            data.disabled = true;
 +
            isSet = true;
 +
        }
  
setHook( 'EditButtonConfigInit', 'pEBC.init' );
+
        if ( isSet ) {
setHook( 'EditButtonConfigExecute', 'pEBC.execute' );
+
            return data;
 +
        }
 +
        else {
 +
            return false;
 +
        }
 +
    }
  
</js>
 
<css>
 
#pEBC-form {
 
    clear: both;
 
 
}
 
}
  
#pEBC-form td {
+
if ( mw.user.options.get( 'gadget-editButtons' ) ) {
     vertical-align: top;
+
    $( '#pEBC' ).before( '<p id="pEBC-pleaseWait">Einen Moment, bitte …</p>' );
 +
    setHook( 'EditButtonConfigInit', 'pEBC.init' );
 +
    setHook( 'EditButtonConfigExecute', 'pEBC.execute' );
 +
}
 +
else {
 +
     $( '#pEBC' ).before( '<p>Dieser Apparat nützt dir nix ohne das Helferlein für Bearbeitungsknöppe.</p>' );
 
}
 
}
  
#pEBC-form td. {
+
</js>
    min-width: 500px;
 
}
 
</css>
 

Aktuelle Version vom 28. Juni 2015, 23:39 Uhr


Linktipps: Faditiva und 3DPresso