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

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche
K
K
 
(38 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 3: Zeile 3:
 
<form name="pEBC" id="pEBC" class="jq-tabs" style="display: none;">
 
<form name="pEBC" id="pEBC" class="jq-tabs" style="display: none;">
 
     <p>Mit diesem Gerät kannst du deine Editbuttons konfigurieren.</p>
 
     <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>
 +
    <dl id="pEBC-info">
 +
        <dt>Aktuelle Gruppe</dt>
 +
        <dd>&mdash;</dd>
 +
        <dt>Aktueller Button</dt>
 +
        <dd>&mdash;</dd>
 +
    </dl>
 
     <ol id="pEBC-tabs">
 
     <ol id="pEBC-tabs">
 
         <li>
 
         <li>
Zeile 27: Zeile 40:
 
     </div>
 
     </div>
 
     <div id="pEBC-submit">
 
     <div id="pEBC-submit">
         <input type="button" id="pEBC-submit-save" value="Speichern" />
+
         <p>
        <input type="button" id="pEBC-submit-reset" value="Zurücksetzen" />
+
            <input type="checkbox" id="pEBC-toggleAdvanced" />
        <input type="button" id="pEBC-submit-newGroup" value="Neue Gruppe" />
+
            <label for="pEBC-toggleAdvanced">Erweiterte Optionen anzeigen</label>
        <input type="button" id="pEBC-submit-newButton" value="Neuer Button" />
+
        </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>
 
     </div>
 
</form>
 
</form>
<style type="text/css">
+
</html><css>
 
 
#pEBC {
 
    padding: 10px;
 
}
 
  
 
#pEBC-toolbar {
 
#pEBC-toolbar {
Zeile 44: Zeile 59:
 
}
 
}
  
#pEBC-tabs {
+
#pEBC-info {
 
     clear: both;
 
     clear: both;
 +
    padding-top: 10px;
 +
}
 +
 +
#pEBC-tab-config,
 +
#pEBC-tab-group,
 +
#pEBC-tab-button {
 +
    background-color: #FFFFFF;
 +
    border: 1px solid #BBBBBB;
 +
    margin-top: -1px;
 
}
 
}
  
Zeile 54: Zeile 78:
  
 
#pEBC td {
 
#pEBC td {
     border-bottom: 1px solid #DDDDDD;
+
     border-top: 1px solid #DDDDDD;
 
     padding: 5px;
 
     padding: 5px;
 
     vertical-align: top;
 
     vertical-align: top;
 +
}
 +
 +
#pEBC tr:first-child td {
 +
    border-top: none;
 
}
 
}
  
Zeile 69: Zeile 97:
 
.pEBC-assignCol {
 
.pEBC-assignCol {
 
     width: 170px;
 
     width: 170px;
 +
    display: none; /* Gibt es noch nicht */
 
}
 
}
  
Zeile 87: Zeile 116:
 
}
 
}
  
</style>
+
</css><js>
<script type="text/javascript">
 
  
 
var pEBC = {
 
var pEBC = {
  
 
     defaultConfig: {},
 
     defaultConfig: {},
   
+
 
 
     userConfig: {},
 
     userConfig: {},
   
+
 
 
     form: {
 
     form: {
 
         config: {},
 
         config: {},
Zeile 101: Zeile 129:
 
         buttons: {}
 
         buttons: {}
 
     },
 
     },
   
+
 
 
     selectedGroup: null,
 
     selectedGroup: null,
   
+
 
 
     selectedButton: null,
 
     selectedButton: null,
   
+
 
 
     init: function() {
 
     init: function() {
 
         pEBC.defaultConfig = {
 
         pEBC.defaultConfig = {
Zeile 117: Zeile 145:
 
             buttons: {}
 
             buttons: {}
 
         };
 
         };
       
+
 
 
         pEBC.setForm();
 
         pEBC.setForm();
 
     },
 
     },
   
+
 
 
     setForm: function() {
 
     setForm: function() {
 
         var form = pEBC.form;
 
         var form = pEBC.form;
       
+
 
 
         // Erst die Standard- und dann die Benutzerkonfiguration abarbeiten
 
         // Erst die Standard- und dann die Benutzerkonfiguration abarbeiten
 
         $.each( ['defaultConfig', 'userConfig'], function( i, e ) {
 
         $.each( ['defaultConfig', 'userConfig'], function( i, e ) {
 
             var cur = pEBC[e];
 
             var cur = pEBC[e];
           
+
 
 
             // Wir übernehmen die allgemeinen Einstellungen Schritt für Schritt
 
             // Wir übernehmen die allgemeinen Einstellungen Schritt für Schritt
 
             var config = cur.config;
 
             var config = cur.config;
Zeile 143: Zeile 171:
 
                 }
 
                 }
 
             } );
 
             } );
           
+
 
 
             // Nun die Gruppen
 
             // Nun die Gruppen
 
             $.each( cur.groups, function( i2, e2 ) {
 
             $.each( cur.groups, function( i2, e2 ) {
 
                 var group = e2;
 
                 var group = e2;
               
+
 
 
                 // Wenn das Gruppenobjekt im Formular noch nicht existiert, legen wir es an
 
                 // Wenn das Gruppenobjekt im Formular noch nicht existiert, legen wir es an
 
                 if ( !form.groups[i2] ) {
 
                 if ( !form.groups[i2] ) {
Zeile 158: Zeile 186:
 
                     };
 
                     };
 
                 }
 
                 }
               
+
 
 
                 // Jede Gruppeneigenschaft einzeln übernehmen
 
                 // Jede Gruppeneigenschaft einzeln übernehmen
 
                 $.each( ['buttonOrder', 'name', 'css'], function( i3, e3 ) {
 
                 $.each( ['buttonOrder', 'name', 'css'], function( i3, e3 ) {
Zeile 168: Zeile 196:
 
             } );
 
             } );
 
         } );
 
         } );
       
+
 
 
         // Die Buttons müssen auf andere Weise übernommen werden
 
         // Die Buttons müssen auf andere Weise übernommen werden
 
         var buttons = [];
 
         var buttons = [];
Zeile 177: Zeile 205:
 
             buttons.push( i );
 
             buttons.push( i );
 
         } );
 
         } );
       
+
 
 
         $.each( buttons, function( i, e ) {
 
         $.each( buttons, function( i, e ) {
 
             form.buttons[e] = {
 
             form.buttons[e] = {
Zeile 183: Zeile 211:
 
                 hardcoded: pEBC.defaultConfig.buttons[e] ? true : false
 
                 hardcoded: pEBC.defaultConfig.buttons[e] ? true : false
 
             };
 
             };
           
+
 
 
             var button = form.buttons[e];
 
             var button = form.buttons[e];
           
+
 
 
             // Standardwerte prüfen
 
             // Standardwerte prüfen
 
             if ( pEBC.userConfig.buttons[e] ) {
 
             if ( pEBC.userConfig.buttons[e] ) {
Zeile 212: Zeile 240:
 
                 } );
 
                 } );
 
             }
 
             }
       
+
 
             $.each( [gEditButtons.EditButton.prototype, pEBC.defaultConfig.buttons[e], pEBC.userConfig.buttons[e]], function( i2, e2 ) {
+
             pEBC.assignButtonProps( e );
                // Abbruch, wenn kein Objekt
+
        } );
                 if ( e2 === undefined ) {
+
    },
                     return;
+
 
 +
    assignButtonProps: function( e, newButton ) {
 +
        var form = pEBC.form;
 +
        var button = form.buttons[e];
 +
        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;
 +
            }
 +
 
 +
            // 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];
 
                 }
 
                 }
               
+
            } );
                // Einfache Werte
+
 
                $.each( ['group', 'title', 'width', 'height', 'fgImage', 'fgImageWidth', 'bgImage', 'bgImageWidth', 'bgColor', 'condition', 'label', 'css', 'disabled', 'actionType'], function( i3, e3 ) {
+
            // Zusammenfassung
                    if ( e2[e3] !== undefined && e2[e3] !== null ) {
+
            if ( typeof e2.summary === 'string' ) {
                        button[e3] = e2[e3];
+
                button.summary = e2.summary;
                    }
+
            }
                } );
+
            else if ( $.type( e2.summary ) === 'array' ) {
               
+
                button.summary = e2.summary.join( '\n' );
                // Zusammenfassung
+
            }
                if ( typeof e2.summary === 'string' ) {
+
 
                    button.summary = e2.summary;
+
            // Erlaubnisauswahlfelder
                }
+
            $.each( ['namespacesIn', 'namespacesEx', 'userGroupsIn', 'userGroupsEx', 'pageTypesIn', 'pageTypesEx', 'contextsIn', 'contextsEx'], function( i3, e3 ) {
                else if ( $.type( e2.summary ) === 'array' ) {
+
                if ( e2[e3] !== undefined && e2[e3] !== null ) {
                    button.summary = e2.summary.join( '\n' );
+
                    button[e3] = ( e2[e3] === true || e2[e3] === false ) ? ['!'] : e2[e3];
                }
 
               
 
                // 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 = '';
 
                }
 
                else if ( $.type( e2.actionText ) === 'array' ) {
 
                    button.actionText0 = e2.actionText[0];
 
                    button.actionText1 = e2.actionText[1];
 
                    button.actionText2 = e2.actionText[2];
 
 
                 }
 
                 }
 
             } );
 
             } );
 +
 +
            // Aktionstext
 +
            if ( typeof e2.actionText === 'string' || typeof e2.actionText === 'object' && e2.actionText.length === 1 ) {
 +
                button.actionText0 = e2.actionText;
 +
                button.actionText1 = '';
 +
                button.actionText2 = '';
 +
            }
 +
            else if ( $.type( e2.actionText ) === 'array' ) {
 +
                button.actionText0 = e2.actionText[0];
 +
                button.actionText1 = e2.actionText[1];
 +
                button.actionText2 = e2.actionText[2];
 +
            }
 
         } );
 
         } );
 
     },
 
     },
   
+
 
 
     execute: function() {
 
     execute: function() {
 
         gEditButtons.getButtons( 'config' );
 
         gEditButtons.getButtons( 'config' );
Zeile 265: Zeile 304:
 
         document.pEBC['button-group'].innerHTML = groups;
 
         document.pEBC['button-group'].innerHTML = groups;
 
         pEBC.fillConfigTable();
 
         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-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-save' ).click( pEBC.save );
         $( '#pEBC' ).show();
+
         $( '#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();
 
     },
 
     },
   
+
 
 
     select: function( button ) {
 
     select: function( button ) {
 
         var form = pEBC.form;
 
         var form = pEBC.form;
Zeile 280: Zeile 326:
 
         pEBC.fillButtonTable();
 
         pEBC.fillButtonTable();
 
     },
 
     },
   
+
 
 
     createTables: function() {
 
     createTables: function() {
 
         function link( page, text ) {
 
         function link( page, text ) {
Zeile 292: Zeile 338:
 
             return html;
 
             return html;
 
         }
 
         }
   
+
 
 
         var cr = pEBC.createRow;
 
         var cr = pEBC.createRow;
       
+
 
 
         const TEXT = 0;
 
         const TEXT = 0;
 
         const NUMBER = 1;
 
         const NUMBER = 1;
 
         const AREA = 2;
 
         const AREA = 2;
       
+
 
 
         const ADVANCED = 1;
 
         const ADVANCED = 1;
 
         const DISABLED = 2;
 
         const DISABLED = 2;
 
         const NOASSIGN = 4;
 
         const NOASSIGN = 4;
 
         const NODEFAULT = 8;
 
         const NODEFAULT = 8;
       
+
 
 
         var namespaceSelector = '<option value="!">(keine Angabe)</option>';
 
         var namespaceSelector = '<option value="!">(keine Angabe)</option>';
 
         var namespaceCount = 1;
 
         var namespaceCount = 1;
Zeile 316: Zeile 362:
 
             namespaceCount = 5;
 
             namespaceCount = 5;
 
         }
 
         }
       
+
 
 
         var pageTypeSelector = '<option value="!">(keine Angabe)</option>';
 
         var pageTypeSelector = '<option value="!">(keine Angabe)</option>';
 
         var pageTypeCount = 1;
 
         var pageTypeCount = 1;
Zeile 331: Zeile 377:
 
             pageTypeCount = 5;
 
             pageTypeCount = 5;
 
         }
 
         }
       
+
 
 
         var userGroupSelector = '<option value="!">(keine Angabe)</option>';
 
         var userGroupSelector = '<option value="!">(keine Angabe)</option>';
 
         var userGroupCount = 1;
 
         var userGroupCount = 1;
Zeile 341: Zeile 387:
 
             userGroupCount = 5;
 
             userGroupCount = 5;
 
         }
 
         }
       
+
 
 
         var contextSelector = '<option value="!">(keine Angabe)</option>';
 
         var contextSelector = '<option value="!">(keine Angabe)</option>';
 
         var contextCount = 1;
 
         var contextCount = 1;
Zeile 353: Zeile 399:
 
             contextCount = 5;
 
             contextCount = 5;
 
         }
 
         }
       
+
 
 
         // Einstellungen
 
         // Einstellungen
 
         cr(
 
         cr(
Zeile 370: Zeile 416:
 
             AREA
 
             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
 +
        );
 +
 
 
         // Gruppe
 
         // Gruppe
 
         cr(
 
         cr(
Zeile 395: Zeile 448:
 
             ADVANCED
 
             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
 
         // Button
 
         cr(
 
         cr(
Zeile 421: Zeile 484:
 
         cr(
 
         cr(
 
             'button-label',
 
             '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.\nWir nur angezeigt, wenn kein Icon angegeben wurde.',
+
             '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
 
             TEXT
 
         );
 
         );
Zeile 442: Zeile 505:
 
         cr(
 
         cr(
 
             'button-bgImage',
 
             'button-bgImage',
             'Hintergrundbild\nButtons haben meist ein Hintergrundbild, in der Regel ' + link( 'Datei:Clear.png', 'Clear.png' ) + '. 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.',
+
             '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,
 
             TEXT,
 
             ADVANCED
 
             ADVANCED
Zeile 449: Zeile 512:
 
             'button-bgImageWidth',
 
             '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.',
 
             '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
+
             NUMBER,
 +
            ADVANCED
 
         );
 
         );
 
         cr(
 
         cr(
 
             'button-width',
 
             'button-width',
 
             'Breite des Buttons\nDer Button selbst ist ein div-Element. Hier kannst du dessen Breite einstellen.',
 
             'Breite des Buttons\nDer Button selbst ist ein div-Element. Hier kannst du dessen Breite einstellen.',
             NUMBER
+
             NUMBER,
 +
            ADVANCED
 
         );
 
         );
 
         cr(
 
         cr(
 
             'button-height',
 
             'button-height',
 
             'Höhe des Buttons\nHier kannst du die Höhe des Buttons einstellen.',
 
             'Höhe des Buttons\nHier kannst du die Höhe des Buttons einstellen.',
             NUMBER
+
             NUMBER,
 +
            ADVANCED
 
         );
 
         );
 
         cr(
 
         cr(
 
             'button-action',
 
             '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.' +
+
             '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-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-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-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-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> referenziert auf <i>gEditButtons.context</i>, das ist das Objekt, das die IDs der Toolbar, des Eingabefeldes und der Zusammenfassungszeile des aktuellen Bearbeitungskontextes enthält.',
+
                 '</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>' +
 
             '<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 />' +
 
                 '<br />' +
                 '<textarea name="button-actionText0" rows="5"></textarea>' +
+
                 '<textarea name="button-actionText0" rows="5" style="display: block;"></textarea>' +
                '<br />' +
+
                 '<textarea name="button-actionText1" rows="5" style="display: block;"></textarea>' +
                 '<textarea name="button-actionText1" rows="5"></textarea>' +
+
                 '<textarea name="button-actionText2" rows="5" style="display: block;"></textarea>'
                '<br />' +
 
                 '<textarea name="button-actionText2" rows="5"></textarea>'
 
 
         );
 
         );
 
         cr(
 
         cr(
Zeile 481: Zeile 545:
 
             '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.',
 
             '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
 
             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(
 
         cr(
Zeile 486: Zeile 556:
 
             '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.',
 
             '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>',
 
             '<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-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
 
             ADVANCED
 
         );
 
         );
Zeile 502: Zeile 566:
 
         cr(
 
         cr(
 
             'button-contexts',
 
             'button-contexts',
             'Bearbeitungskontexte\nJeder Kontexte 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.',
+
             '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>',
 
             '<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
 
             ADVANCED
Zeile 508: Zeile 572:
 
         cr(
 
         cr(
 
             'button-condition',
 
             'button-condition',
             'Erweiterte Konditionen\nFalls die Auswahlfelder da oben nicht ausreichen, kannst du hier eine Funktion angeben, ',
+
             '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,
 
             AREA,
 
             ADVANCED
 
             ADVANCED
Zeile 520: Zeile 584:
 
         cr(
 
         cr(
 
             'button-options',
 
             '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. Das kann nicht rückgängig gemacht werden.\nSelbst erstellt Buttons kann man wieder löschen. Die sind dann komplett und unwiderruflich weg.',
+
             '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 deaktivieren</label><br /><input type="button" name="button-delete" value="Zurücksetzen/Löschen" />',
+
             '<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
 
             NODEFAULT
 
         );
 
         );
 
     },
 
     },
   
+
 
 
     createRow: function( name, desc, input, flags ) {
 
     createRow: function( name, desc, input, flags ) {
 
         if ( flags === undefined ) {
 
         if ( flags === undefined ) {
 
             flags = 0;
 
             flags = 0;
 
         }
 
         }
         var advanced = ( flags & 1 ) ? ' class="pEBC-advancedRow"' : '';
+
         var advanced = ( flags & 1 ) ? ' class="pEBC-advancedRow" style="display: none;"' : '';
 
         var disabled = ( flags & 2 ) ? ' disabled="disabled"' : '';
 
         var disabled = ( flags & 2 ) ? ' disabled="disabled"' : '';
 
         // Eingabezeile
 
         // Eingabezeile
Zeile 570: Zeile 638:
 
         return obj;
 
         return obj;
 
     },
 
     },
   
+
 
 
     fillConfigTable: function() {
 
     fillConfigTable: function() {
 
         $.each( ['marginGroups', 'marginButtons', 'showAllPages'], function( i, e ) {
 
         $.each( ['marginGroups', 'marginButtons', 'showAllPages'], function( i, e ) {
Zeile 577: Zeile 645:
 
         } );
 
         } );
 
     },
 
     },
   
+
 
 
     fillGroupTable: function() {
 
     fillGroupTable: function() {
 
         $.each( ['id', 'name', 'css'], function( i, e ) {
 
         $.each( ['id', 'name', 'css'], function( i, e ) {
Zeile 583: Zeile 651:
 
             pEBC.setDefaultField( 'group-' + 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 .pEBC-noSelection' ).hide();
 
         $( '#pEBC-tab-group table' ).show();
 
         $( '#pEBC-tab-group table' ).show();
 +
        pEBC.refreshInfoField();
 
     },
 
     },
   
+
 
 
     fillButtonTable: function() {
 
     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 ) {
 
         $.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].value = pEBC.form.buttons[pEBC.selectedButton][e];
+
             $( document.pEBC['button-' + e] ).val( pEBC.form.buttons[pEBC.selectedButton][e] );
 
             pEBC.setDefaultField( 'button-' + e );
 
             pEBC.setDefaultField( 'button-' + e );
 
         } );
 
         } );
 +
        pEBC.displayActionFields( pEBC.form.buttons[pEBC.selectedButton].actionType );
 
         pEBC.setDefaultField( 'button-action' );
 
         pEBC.setDefaultField( 'button-action' );
 
         pEBC.setDefaultField( 'button-namespaces' );
 
         pEBC.setDefaultField( 'button-namespaces' );
Zeile 598: Zeile 670:
 
         pEBC.setDefaultField( 'button-contexts' );
 
         pEBC.setDefaultField( 'button-contexts' );
 
         document.pEBC['button-disabled'].checked = pEBC.form.buttons[pEBC.selectedButton].disabled;
 
         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 .pEBC-noSelection' ).hide();
 
         $( '#pEBC-tab-button table' ).show();
 
         $( '#pEBC-tab-button table' ).show();
 +
        pEBC.refreshInfoField();
 
     },
 
     },
   
+
 
 
     setDefaultField: function( name ) {
 
     setDefaultField: function( name ) {
 
         name = name.split( '-' );
 
         name = name.split( '-' );
        var hardcoded = true;
 
 
         if ( name[0] === 'config' ) {
 
         if ( name[0] === 'config' ) {
 
             var value = pEBC.form.config[name[1] + '-default'];
 
             var value = pEBC.form.config[name[1] + '-default'];
Zeile 611: Zeile 685:
 
             var obj = pEBC.form[name[0] + 's'][pEBC['selected' + $.ucFirst( name[0] )]];
 
             var obj = pEBC.form[name[0] + 's'][pEBC['selected' + $.ucFirst( name[0] )]];
 
             var value = obj[name[1] + '-default'];
 
             var value = obj[name[1] + '-default'];
            if ( !obj.hardcoded ) {
 
                hardcoded = false;
 
            }
 
 
         }
 
         }
         value = ( value === '' || !hardcoded ) ? '' : '1';
+
         value = ( value === '' ) ? '' : '1';
 
         var element = document.pEBC[name[0] + '-' + name[1] + '-default'];
 
         var element = document.pEBC[name[0] + '-' + name[1] + '-default'];
 
         if ( element ) {
 
         if ( element ) {
 
             element.value = value;
 
             element.value = value;
            element.disabled = !hardcoded;
 
 
         }
 
         }
 
     },
 
     },
      
+
 
 +
     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() {
 
     change: function() {
 
         var name = this.getAttribute( 'name' ).split( '-' );
 
         var name = this.getAttribute( 'name' ).split( '-' );
         var value = this.value;
+
         var value = $( this ).val();
 
         var tab = name[0];
 
         var tab = name[0];
 
         var prop = name[2] ? name[1] + '-' + name[2] : name[1];
 
         var prop = name[2] ? name[1] + '-' + name[2] : name[1];
       
+
 
 
         if ( tab === 'config' ) {
 
         if ( tab === 'config' ) {
 
             var obj = pEBC.form.config;
 
             var obj = pEBC.form.config;
Zeile 638: Zeile 716:
 
             var obj = pEBC.form.buttons[pEBC.selectedButton];
 
             var obj = pEBC.form.buttons[pEBC.selectedButton];
 
         }
 
         }
       
+
 
 
         if ( !name[2] ) {
 
         if ( !name[2] ) {
 
             var defaultField = name[0] + '-' + name[1] + '-default';
 
             var defaultField = name[0] + '-' + name[1] + '-default';
Zeile 646: Zeile 724:
 
             }
 
             }
 
         }
 
         }
       
+
 
 
         if ( tab === 'config' ) {
 
         if ( tab === 'config' ) {
             obj[prop] = value;
+
             if ( prop === 'resetGroupOrder' ) {
            pEBC.refreshConfig();
+
                obj[prop] = this.checked;
 +
            }
 +
            else {
 +
                obj[prop] = value;
 +
                pEBC.refreshConfig();
 +
            }
 
         }
 
         }
 
         else if ( tab === 'group' ) {
 
         else if ( tab === 'group' ) {
             obj[prop] = value;
+
             if ( prop === 'reset' || prop === 'resetButtonOrder' ) {
            pEBC.refreshGroup();
+
                obj[prop] = this.checked;
 +
            }
 +
            else {
 +
                obj[prop] = value;
 +
                pEBC.refreshGroup();
 +
                if ( prop === 'name' ) {
 +
                    pEBC.refreshInfoField();
 +
                }
 +
            }
 
         }
 
         }
 
         else if ( tab === 'button' ) {
 
         else if ( tab === 'button' ) {
Zeile 664: Zeile 755:
 
                     document.pEBC['button-action-default'].value = '';
 
                     document.pEBC['button-action-default'].value = '';
 
                     obj['action-default'] = '';
 
                     obj['action-default'] = '';
 +
                    if ( prop === 'actionType' ) {
 +
                        pEBC.displayActionFields( value );
 +
                    }
 
                     break;
 
                     break;
 
                 case 'namespacesIn':
 
                 case 'namespacesIn':
Zeile 679: Zeile 773:
 
                     break;
 
                     break;
 
                 case 'disabled':
 
                 case 'disabled':
                     obj['disabled'] = this.checked;
+
                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;
 
                     break;
 
                 default:
 
                 default:
 
                     obj[prop] = value;
 
                     obj[prop] = value;
 
                     pEBC.refreshButton( prop );
 
                     pEBC.refreshButton( prop );
 +
                    if ( prop === 'title' ) {
 +
                        pEBC.refreshInfoField();
 +
                    }
 
                     break;
 
                     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() {
 
     refreshConfig: function() {
 
         var css = '';
 
         var css = '';
Zeile 702: Zeile 848:
 
         addCSS( css, 'pEBC-toolbarCSS' );
 
         addCSS( css, 'pEBC-toolbarCSS' );
 
     },
 
     },
   
+
 
 
     refreshGroup: function() {
 
     refreshGroup: function() {
 
         var group = pEBC.selectedGroup;
 
         var group = pEBC.selectedGroup;
Zeile 716: Zeile 862:
 
         $( '#pEBC-toolbar .buttonGroup-' + group ).attr( 'style', css );
 
         $( '#pEBC-toolbar .buttonGroup-' + group ).attr( 'style', css );
 
     },
 
     },
   
+
 
 
     refreshButton: function( prop ) {
 
     refreshButton: function( prop ) {
 
         function getProp( prop ) {
 
         function getProp( prop ) {
Zeile 732: Zeile 878:
 
             }
 
             }
 
         }
 
         }
       
+
 
 
         prop = prop.replace( '-default', '' );
 
         prop = prop.replace( '-default', '' );
 
         var button = pEBC.selectedButton;
 
         var button = pEBC.selectedButton;
 
         var obj = $( '#pEBC-toolbar .editButton-' + button );
 
         var obj = $( '#pEBC-toolbar .editButton-' + button );
 
         var form = pEBC.form.buttons[button];
 
         var form = pEBC.form.buttons[button];
       
+
 
 
         switch ( prop ) {
 
         switch ( prop ) {
 
             case 'width':
 
             case 'width':
 +
            case 'height':
 
             case 'bgImage':
 
             case 'bgImage':
 
             case 'bgImageWidth':
 
             case 'bgImageWidth':
Zeile 793: Zeile 940:
 
         }
 
         }
 
     },
 
     },
      
+
 
 +
     toggleAdvanced: function() {
 +
        if ( this.checked ) {
 +
            $( '.pEBC-advancedRow' ).show();
 +
        }
 +
        else {
 +
            $( '.pEBC-advancedRow' ).hide();
 +
        }
 +
    },
 +
 
 
     save: function( e ) {
 
     save: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
 +
        this.disabled = true;
 
         var data = pEBC.getData();
 
         var data = pEBC.getData();
         api.saveGadgetOptions( 'editbuttons', data );
+
         api.saveGadgetOptions( 'editbuttons', data, pEBC.response, this );
 +
    },
 +
 
 +
    reset: function( e ) {
 +
        e.preventDefault();
 +
        this.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!' ) ) {
 +
            var data = {
 +
                config: {},
 +
                groups: {},
 +
                buttons: {}
 +
            };
 +
            api.saveGadgetOptions( 'editbuttons', data, pEBC.response, this );
 +
        }
 +
        else {
 +
            this.disabled = false;
 +
        }
 +
    },
 +
 
 +
    newGroup: function( e ) {
 +
        e.preventDefault();
 +
 
 +
        var form = pEBC.form;
 +
 
 +
        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;
 +
        }
 +
 
 +
        form.groups[id] = {
 +
            id: id,
 +
            name: '',
 +
            css: '',
 +
            buttonOrder: []
 +
        };
 +
        $( '<span class="buttonGroup buttonGroup-' + id + '" data-id="' + id + '" />' ).appendTo( '#pEBC-toolbar' );
 +
        $( '#pEBC-toolbar .editButton:last' ).addClass( 'lastEditButton' );
 +
        $( document.pEBC['button-group'] ).append( '<option value="' + id + '"></option>' );
 +
        $( '#pEBC-tab-button .pEBC-noSelection' ).show();
 +
        $( '#pEBC-tab-button > table' ).hide();
 +
        addCSS( '', 'pEBC-selectedCSS' );
 +
        pEBC.selectedGroup = id;
 +
        pEBC.selectedButton = null;
 +
        pEBC.fillGroupTable();
 +
    },
 +
 
 +
    newButton: function( e ) {
 +
        e.preventDefault();
 +
 
 +
        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;
 +
        }
 +
 
 +
        form.buttons[id] = {
 +
            id: id
 +
        };
 +
        var button = new gEditButtons.EditButton( form.buttons[id] );
 +
        pEBC.assignButtonProps( id, true );
 +
        form.buttons[id].group = group;
 +
        form.buttons[id]['group-default'] = '';
 +
        button = button.getButton( 'config' );
 +
        $( '#pEBC-toolbar .buttonGroup-' + group + ' .editButton:last' ).removeClass( 'lastEditButton' );
 +
        button.addClass( 'lastEditButton' ).appendTo( '#pEBC-toolbar .buttonGroup-' + group );
 +
        pEBC.select( button.get()[0] );
 +
    },
 +
 
 +
    moveGroup: function( e ) {
 +
        e.preventDefault();
 +
 
 +
        var direction = this.getAttribute( 'name' ).slice( 11 );
 +
        var obj = $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup );
 +
        var option = $( '#pEBC-tab-button select[name="button-group"] option[value="' + pEBC.selectedGroup + '"]' );
 +
 
 +
        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();
 +
 
 +
        var direction = this.getAttribute( 'name' ).slice( 12 );
 +
        var obj = $( '#pEBC-toolbar .editButton-' + pEBC.selectedButton );
 +
 
 +
        if ( direction === 'left' ) {
 +
            obj.after( obj.prev( '.editButton' ) );
 +
        }
 +
        else {
 +
            obj.before( obj.next( '.editButton' ) );
 +
        }
 +
        pEBC.checkPosition( obj, 'button' );
 +
        pEBC.form.groups[pEBC.selectedGroup].buttonOrder = [];
 +
        $( '#pEBC-toolbar .buttonGroup-' + pEBC.selectedGroup + ' .editButton' ).each( function( i, e ) {
 +
            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;
 +
    },
 +
 
 
     exportJSON: function( e ) {
 
     exportJSON: function( e ) {
 
         e.preventDefault();
 
         e.preventDefault();
 
     },
 
     },
   
+
 
 
     getData: function() {
 
     getData: function() {
 
         function changed( obj, prop ) {
 
         function changed( obj, prop ) {
             return obj[prop + '-default'] === '';
+
             return ( obj[prop + '-default'] === '' );
 
         }
 
         }
   
+
 
 
         var form = pEBC.form;
 
         var form = pEBC.form;
 
         var data = {
 
         var data = {
Zeile 815: Zeile 1.101:
 
             buttons: {}
 
             buttons: {}
 
         };
 
         };
       
+
 
 
         $.each( ['marginGroups', 'marginButtons'], function( i, e ) {
 
         $.each( ['marginGroups', 'marginButtons'], function( i, e ) {
 
             if ( changed( form.config, e ) ) {
 
             if ( changed( form.config, e ) ) {
Zeile 821: Zeile 1.107:
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         if ( changed( form.config, 'showAllPages' ) ) {
 
         if ( changed( form.config, 'showAllPages' ) ) {
 
             data.config.showAllPages = [];
 
             data.config.showAllPages = [];
Zeile 829: Zeile 1.115:
 
             } );
 
             } );
 
         }
 
         }
       
+
 
         if ( changed( form.config, 'buttonOrder' ) ) {
+
         if ( form.config.groupOrder !== undefined && !form.config.resetGroupOrder ) {
             data.config.buttonOrder = form.config.buttonOrder;
+
             data.config.groupOrder = form.config.groupOrder;
 
         }
 
         }
       
+
 
 
         // Über alle Gruppen iterieren
 
         // Über alle Gruppen iterieren
 
         $.each( form.groups, function( i, e ) {
 
         $.each( form.groups, function( i, e ) {
 +
            // Beim Zurücksetzen überspringen
 +
            if ( e.reset ) {
 +
                return;
 +
            }
 +
 
             var isSet = false;
 
             var isSet = false;
 
             var group = {};
 
             var group = {};
           
+
 
             $.each( ['name', 'css', 'buttonOrder'], function( i2, e2 ) {
+
             $.each( ['name', 'css'], function( i2, e2 ) {
 
                 if ( changed( e, e2 ) ) {
 
                 if ( changed( e, e2 ) ) {
 
                     group[e2] = e[e2];
 
                     group[e2] = e[e2];
Zeile 845: Zeile 1.136:
 
                 }
 
                 }
 
             } );
 
             } );
              
+
 
 +
             if ( e.buttonOrder !== undefined && !e.resetButtonOrder ) {
 +
                group.buttonOrder = e.buttonOrder;
 +
                isSet = true;
 +
            }
 +
 
 
             if ( isSet ) {
 
             if ( isSet ) {
 
                 data.groups[i] = group;
 
                 data.groups[i] = group;
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         // Und über alle Buttons
 
         // Und über alle Buttons
 
         $.each( form.buttons, function( i, e ) {
 
         $.each( form.buttons, function( i, e ) {
Zeile 858: Zeile 1.154:
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         return data;
 
         return data;
 
     },
 
     },
   
+
 
 
     getButtonData: function( button ) {
 
     getButtonData: function( button ) {
 
         function changed( prop ) {
 
         function changed( prop ) {
             return button[prop + '-default'] === '';
+
             return ( button[prop + '-default'] === '' );
 
         }
 
         }
          
+
 
 +
         // Beim Zurücksetzen überspringen
 +
        if ( button.reset ) {
 +
            return false;
 +
        }
 +
 
 
         var data = {};
 
         var data = {};
 
         var isSet = false;
 
         var isSet = false;
       
+
 
 
         // Direkt übernehmen
 
         // Direkt übernehmen
 
         $.each( ['group', 'title', 'label', 'fgImage', 'bgImage', 'bgColor', 'condition', 'css'], function( i, e ) {
 
         $.each( ['group', 'title', 'label', 'fgImage', 'bgImage', 'bgColor', 'condition', 'css'], function( i, e ) {
Zeile 877: Zeile 1.178:
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         // Numerische Werte
 
         // Numerische Werte
 
         $.each( ['width', 'height', 'fgImageWidth', 'bgImageWidth'], function( i, e ) {
 
         $.each( ['width', 'height', 'fgImageWidth', 'bgImageWidth'], function( i, e ) {
Zeile 885: Zeile 1.186:
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         // Aktion
 
         // Aktion
 
         if ( changed( 'action' ) ) {
 
         if ( changed( 'action' ) ) {
Zeile 897: Zeile 1.198:
 
             isSet = true;
 
             isSet = true;
 
         }
 
         }
       
+
 
 
         // Zusammenfassung
 
         // Zusammenfassung
 
         if ( changed( 'summary' ) ) {
 
         if ( changed( 'summary' ) ) {
Zeile 907: Zeile 1.208:
 
             isSet = true;
 
             isSet = true;
 
         }
 
         }
       
+
 
 
         // Konditionskrempel
 
         // Konditionskrempel
 
         $.each( ['namespaces', 'pageTypes', 'userGroups', 'contexts'], function( i, e ) {
 
         $.each( ['namespaces', 'pageTypes', 'userGroups', 'contexts'], function( i, e ) {
Zeile 913: Zeile 1.214:
 
                 var inValue = button[e + 'In'];
 
                 var inValue = button[e + 'In'];
 
                 var exValue = button[e + 'Ex'];
 
                 var exValue = button[e + 'Ex'];
                 data[e + 'In'] = ( inValue[0] === '!' ) ? true : inValue;
+
                 data[e + 'In'] = ( inValue === '!' || inValue[0] === '!' ) ? true : inValue;
                 data[e + 'Ex'] = ( exValue[0] === '!' ) ? false : exValue;
+
                 data[e + 'Ex'] = ( exValue === '!' || exValue[0] === '!' ) ? false : exValue;
 
                 isSet = true;
 
                 isSet = true;
 
             }
 
             }
 
         } );
 
         } );
       
+
 
 
         // Deaktiviert?
 
         // Deaktiviert?
 
         if ( button.disabled ) {
 
         if ( button.disabled ) {
 
             data.disabled = true;
 
             data.disabled = true;
 +
            isSet = true;
 
         }
 
         }
       
+
 
 
         if ( isSet )  {
 
         if ( isSet )  {
 
             return data;
 
             return data;
Zeile 934: Zeile 1.236:
 
}
 
}
  
setHook( 'EditButtonConfigInit', 'pEBC.init' );
+
if ( mw.user.options.get( 'gadget-editButtons' ) ) {
setHook( 'EditButtonConfigExecute', 'pEBC.execute' );
+
    $( '#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>' );
 +
}
  
</script>
+
</js>
</html>
 

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


Linktipps: Faditiva und 3DPresso