1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. visoer

Beiträge von visoer

  • Rechtsklick auf ein Icon von einem Skript ändern

    • visoer
    • 18. Januar 2023 um 23:24

    Bin dann mal weg...

  • Rechtsklick auf ein Icon von einem Skript ändern

    • visoer
    • 18. Januar 2023 um 21:58

    Das vielleicht, etwas umständlich, aber funzt?

    JavaScript
    (function ptbut() {
    // start customisation area----------------------------------
    
    let startHeight = '22px'; // '0px' oder Hoehe der Leiste in px im Startzustand
    let Height = '22px'; // normal ist '22px' (Hoehe der Leiste im ausgeklappten Zustand).
    // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein.
    let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden / 5000 => 5sec
    let buttonIcon = "16_checkbox-circle_white.svg" // Name & Dateiendung des anzuzeigenden Symbols
    let buttonPath = "chrome/css/image/" // Pfad zum Ordner der das Icon beinhaltet
    
    // end customisation area-----------------------------------
    let d2 = document.getElementById('PersonalToolbar');
    let intervalID = 0;
                  
        if (location.href !== 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'PersonalToolbar-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                    onBuild: function(aDocument) {
                        let toolbaritem = aDocument.createXULElement('toolbarbutton');                  
                        let props = {
                            id: 'PersonalToolbar-button',
                            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                            removable: true,
                            label: 'PersonalToolbar on/off (Strg+y)',
                            tooltiptext: 'PersonalToolbar on/off (Strg+y)',
                            style: "list-style-image: url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + buttonPath + buttonIcon + "');",
                        };                  
                        for(var p in props)
                            toolbaritem.setAttribute(p, props[p]);
                        return toolbaritem;                
                    }
            });
        } catch(e) { };
    
    //Tastenkombi Windows und Linux Möglichkeit 1
    document.addEventListener('keydown', (event) => {
            let keyName = event.key;
    //STRG + y
            if (event.ctrlKey && keyName == 'y') {
                onClick(event);        
            }
        }, false
    );
    //Tastenkombi Windows und Linux Möglichkeit 2
    document.addEventListener('keydown', (event) => {
    //AltGR + 1
            let keyName = event.key;
            if (event.getModifierState("AltGraph") && keyName == '1') {
                onClick(event);
            }
        }, false
    );
    
    document.getElementById('PersonalToolbar').style.minHeight = '0';
        if( startHeight === Height || startHeight === '0px' ) {
            document.getElementById('PersonalToolbar').style.height = startHeight;
       }
        else {
            document.getElementById('PersonalToolbar').style.height = Height;
        }
        document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick );
        function onClick(aEvent) {
        if (event.button == 0) {  
            if (d2.style.height == '') {
                d2.style.height = '0px';
           }
            else if (d2.style.height == Height) {
                d2.style.height = '0px';
           }
            else if(d2.style.height == '0px') {
                d2.style.height = Height;
                         if(!intervalID && autoCloseTime) {
                    intervalID =  aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime );
                    }
                }
            } 
        else if (event.button == 1) {
            return;
            }
        else if (event.button == 2) {
            return;
            }
        }
        function autoClose() {
            if( intervalID ) {
                if( d2.style.height == Height) {
                    d2.style.height = '0px';
                    clearInterval(intervalID);
                    intervalID=0;
                }
            }
        }
    })();
    Alles anzeigen
  • Rechtsklick auf ein Icon von einem Skript ändern

    • visoer
    • 18. Januar 2023 um 20:15

    Bingo!

    Kann dann ja ohne weitere Überlegung einfach übernommen werden.

    Lerneffekt?

  • Rechtsklick auf ein Icon von einem Skript ändern

    • visoer
    • 18. Januar 2023 um 18:17

    Hier noch ein Tipp:

    Die Position der Klammer ist falsch, sie muss nur nach unten verschoben werden.

    Jetzt müsstest du es aber lösen können!

  • Rechtsklick auf ein Icon von einem Skript ändern

    • visoer
    • 18. Januar 2023 um 17:14

    Klammerfehler Zeile 5.

    Hier mal meine ähnliche etwas umfangreichere Lösung (mit einer Funktion auf Mittelclick) zum Vergleichen:

    JavaScript
    //-----------------------------------------------
        function onClick(aEvent) {
    let b2 = document.getElementById('PersonalToolbar-button');
    
        if (event.button == 0) {  
            if (d2.style.height == '') {
                d2.style.height = '0px';
                b2.style.backgroundColor = '#72a572';
                }
            else if (d2.style.height == Height) {
                d2.style.height = '0px';
                b2.style.backgroundColor = '#72a572';
                }
            else if(d2.style.height == '0px') {
                d2.style.height = Height;
                b2.style.backgroundColor = '#323232';
                if(!intervalID && autoCloseTime) {
                    intervalID =  aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime );
                    }
                }
            } 
        else if (event.button == 1) {
            tabclick();
            }
        else if (event.button == 2) {
            event.preventDefault();
            event.stopPropagation();    
            return;
            }
        }
    //-----------------------------------------------
        function autoClose() {
    Alles anzeigen
  • Script für Datums- & Zeitanzeige

    • visoer
    • 7. Januar 2023 um 22:34

    Das wirst du wohl mit der replace-Methode machen müssen. Hier der Anfang von meiner Uhr als Beispiel:

    JavaScript
    (function() {
        function doDatClock() {
            var timestr = new Date().toLocaleDateString( locale , options ).replace(/[\,]/,' \u2011');
                    const blanks = '\u2013';
                    let i = timestr.lastIndexOf(' ');
                    timestr = timestr.substring(0,i).replace(/[\,]/,' \u2011 ').replace(/[\.]/,'')+ ''+ timestr.substring(i+1).replace(/[\,]/,' \u2011 ');
            if( count == 1 ) {
                var counter = new Date( 2000 * sec ).toISOString().substr( 11 , 8 ).replace(/^[0:]+/, '');
                timestr = timestr + ' 🕛️ ' + counter;
                sec++;
            }
            ClockLabel.setAttribute( 'value', timestr );
        }
    Alles anzeigen

    Aber vielleicht geht das auch ohne regex. Das müsste so sein:

    Code
    .replace('um', '')

    die Position musst du ausprobieren. :(

  • Allgemeine Frage(n) zu JavaScript

    • visoer
    • 7. Januar 2023 um 11:46

    Ein Fehler könnten die auskommentierten Zeilen 29+30 sein.

    Habe deine Vers. getestet, funzt tatsächlich bei mir auch nicht.

    Da muss noch irgendwo ein anderer Fehler in deinem Script stecken.

    Viel spaß bei der Suche, oder eben noch einmal ganz von vorne anfangen.

    So, nun habe ich selber einen Fehler gemacht und vergessen deinen Pfad zu ersetzen.

    Bei mir funktioniert deine Version genauso wie meine! Ich tippe mal auf die Schreibweise des Namens des Icons?

  • Allgemeine Frage(n) zu JavaScript

    • visoer
    • 7. Januar 2023 um 01:21

    Meine Version sieht so aus:

    JavaScript
      (function() {
    // start customisation area----------------------------------
    let buttonIcon = "16synchronization-13yellow.svg" // Name & Dateiendung des anzuzeigenden Symbols
    let buttonPath = "chrome/css/image/" // Pfad zum Ordner der das Icon beinhaltet
    // end customisation area-----------------------------------
        if (location.href !== 'chrome://browser/content/browser.xhtml') return;
    
      CustomizableUI.createWidget({
        id: 'addons-update-button',
        defaultArea: CustomizableUI.AREA_NAVBAR,
        label: 'Add-ons Update',
        tooltiptext: 'Add-ons aktualisieren',
        onCommand: onCommand,
        onCreated: function(button) {
            button.style.listStyleImage = "url('" + PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)) + buttonPath + buttonIcon + "')";}
      });
    
      function onCommand(event) {
          
          let targetUpdateMessage=null;
          let categories=null;
                
          event.target.ownerGlobal.openTrustedLinkIn('about:addons', 'tab');
         
          addEventListener('pageshow', function onPageshow(event) {
            let document = event.target;
            if (document.URL != 'about:addons')
                return;
            removeEventListener('pageshow', onPageshow);
          
            categories = document.getElementById('categories');
            targetUpdateMessage = document.querySelector('#page-header .main-heading #updates-message');
    
            const configObserver = { attributes: true };
            const observerUpdateMessage = new MutationObserver(callback);
            
            observerUpdateMessage.observe(targetUpdateMessage, configObserver);    
    
            document.querySelector('addon-page-options panel-item[action="check-for-updates"]').click();
         });
          
          
         const callback = (mutationList, observer) => {
            for (const mutation of mutationList) {
                if (mutation.type === 'attributes') {
                    
                    message = targetUpdateMessage.getAttribute('state');
                                    
                    if( message == "manual-updates-found" )    {
                        setTimeout(function() {
                            gBrowser.selectedTab.linkedBrowser.reload(); 
                        }, 1000);
                        categories.querySelector('button[viewid="addons://updates/available"]').click();
                        return;
                       }
                     else if( message == "none-found" )
                     {
                         //..
                         return;
                     }
                     else if( message == "installed" )
                     {
                         document.querySelector('addon-page-options panel-item[action="view-recent-updates"]').click();
                         setTimeout(function() {
                            categories.querySelector('button[viewid="addons://updates/recent"]').click();
                         }, 1000);
                          return;
                     }
                  }
               }
            }
          
      };
    })();
    Alles anzeigen

    Vielleicht kannst du daraus etwas ableiten.

  • Lesezeichensymbolleiste leer

    • visoer
    • 30. Dezember 2022 um 19:39
    Zitat

    ich vermute, es ist "mein" Script gemeint.

    Ich habe noch Spekulatius von Weihnachten und würde die Kekse hier einsetzten. Mein Tipp ist: 80:20 für Andreas vs. Mira.

    Steigt jemand ein?

    Aber in jedem Fall zählt: The winner is nierewa.

  • Lesezeichensymbolleiste leer

    • visoer
    • 28. Dezember 2022 um 21:16

    Und hier noch eine Lösung mit der Tastenkombi AltGr+1:

    JavaScript
    (function ptbut() {
    let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand
    let Height = '36px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand).
    // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein.
    let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec
    let intervalID = 0;
    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner
    let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26
    let d2 = document.getElementById('PersonalToolbar');
                  
        if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'PersonalToolbar-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                    onBuild: function(aDocument) {
                        let toolbaritem = aDocument.createXULElement('toolbarbutton');                  
                        let props = {
                            id: 'PersonalToolbar-button',
                            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                            removable: true,
                            label: 'PersonalToolbar on/off (AltGr+1)',
                            tooltiptext: 'PersonalToolbar on/off (AltGr+1)',
                            style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");',
                        };                  
                        for(var p in props)
                            toolbaritem.setAttribute(p, props[p]);
                        return toolbaritem;                
                    }
            });
            CustomizableUI.registerToolbarNode(tb);
        } catch(e) { };
    
    //Tastenkombi Windows und Linux
    document.addEventListener('keydown', (event) => {
    //AltGr + 1
            let keyName = event.key;
            if (event.getModifierState("AltGraph") && keyName == '1') {
                onClick();
            }
        }, false
    );
    
    document.getElementById('PersonalToolbar').style.minHeight = '0';
        if( startHeight === Height || startHeight === '0px' ) {
            document.getElementById('PersonalToolbar').style.height = startHeight;
       }
        else {
            document.getElementById('PersonalToolbar').style.height = Height;
        }
        document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick );
        function onClick(aEvent) {
            if (d2.style.height == '') {
                d2.style.height = '0px';
                }
            else if (d2.style.height == Height) {
                d2.style.height = '0px';
                }
            else if(d2.style.height == '0px') {
                d2.style.height = Height;
                if(!intervalID && autoCloseTime) {
                    intervalID =  aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime );
                }
            }
          }
         
        function autoClose() {
            if( intervalID ) {
                if( d2.style.height == Height) {
                    d2.style.height = '0px';
                    clearInterval(intervalID);
                    intervalID=0;
                }
            }
        }
    })();
    Alles anzeigen
  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • visoer
    • 24. Dezember 2022 um 21:26

    Wer weiß schon woher die merkwürdigen Variablennamen d1 d2 oder die Funkktionsnamen ntbut/btbut kommen.

    Dieser Namensgeber war sicherlich der Urheber des Ganzen.

    Der Dank gebührt Allen, die daran beteiligt waren.

    Für mich zählt nur das: Bis zum nächsten Update ist das Problem gelöst!

  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • visoer
    • 24. Dezember 2022 um 20:56

    Ja, das habe ich bereits wieder gelöscht.

    War überflüssig, kommt von diesem Relikt hier:

    Code
        function onClick(aEvent) {
    let b1 = document.getElementById('nav-bar-button');  
            if (d1.style.height == '') {
                d1.style.height = '0px';
                b1.style.backgroundColor = '#72a572'; }
            else if (d1.style.height == '22px') {
                d1.style.height = '0px';
                b1.style.backgroundColor = '#72a572'; }
            else if(d1.style.height == '0px') {
                d1.style.height = '22px';
                b1.style.backgroundColor = '#323232';
    Alles anzeigen

    Ein persönlicher Touch.

    Danke fürs Testen und selbstverständlich für die tolle Leistung!

  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • visoer
    • 24. Dezember 2022 um 20:03

    Ich habe mir mal die Freiheit genommen und diese tolle Arbeit zu einem Code zusammengefügt, vielleicht kann's ja jemand brauchen. Ob das allerdings noch mit dem Update auf 109 funktioniert, weiss ich nicht.

    Für die PersonalToolbar:

    Code
    (function ptbut() {
    let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand
    let Height = '22px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand).
    // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein.
    let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec
    let intervalID = 0;
    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner
    let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26
    let d2 = document.getElementById('PersonalToolbar');
                  
        if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'PersonalToolbar-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                    onBuild: function(aDocument) {
                        let toolbaritem = aDocument.createXULElement('toolbarbutton');                  
                        let props = {
                            id: 'PersonalToolbar-button',
                            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                            removable: true,
                            label: 'PersonalToolbar on/off (Strg+y)',
                            tooltiptext: 'PersonalToolbar on/off (Strg+y)',
                            style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");',
                        };                  
                        for(var p in props)
                            toolbaritem.setAttribute(p, props[p]);
                        return toolbaritem;                
                    }
            });
            CustomizableUI.registerToolbarNode(tb);
        } catch(e) { };
    
    // Tastenkombi Windows und Linux
    document.addEventListener('keydown', (event) => {
            var keyName = event.key;
    //STRG + y
            if (event.ctrlKey && keyName == 'y') {
               onClick();        
            }
        }, false
    );
    
    document.getElementById('PersonalToolbar').style.minHeight = '0';
        if( startHeight === Height || startHeight === '0px' ) {
            document.getElementById('PersonalToolbar').style.height = startHeight;
       }
        else {
            document.getElementById('PersonalToolbar').style.height = Height;
        }
        document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick );
        function onClick(aEvent) {
            if (d2.style.height == '') {
                d2.style.height = '0px';
                }
            else if (d2.style.height == Height) {
                d2.style.height = '0px';
                }
            else if(d2.style.height == '0px') {
                d2.style.height = Height;
                if(!intervalID && autoCloseTime) {
                    intervalID =  aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime );
                }
            }
          }
         
        function autoClose() {
            if( intervalID ) {
                if( d2.style.height == Height) {
                    d2.style.height = '0px';
                    clearInterval(intervalID);
                    intervalID=0;
                }
            }
        }
    })();
    Alles anzeigen

    und hier für die nav-bar:

    Code
    (function nbbut() {
    let startHeight = '0px'; //'0px' oder Hoehe der Leiste in px im Startzustand
    let Height = '22px'; //normal ist '36px' (Hoehe der Leiste im ausgeklappten Zustand).
    // ACHTUNG: es darf keine Höhe der Leiste in der css definiert sein.
    let autoCloseTime = 0; // 0 = kein Auto-Close / >0 Zeit in Millisekunden /5000 => 5sec
    let intervalID = 0;
    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); // Die Pfadangabe zu dem Profilordner
    let buttonicon = "beispiel.svg" // Name & Dateiendung des anzuzeigenden Symbols im Ordner: /chrome/css/image/ Pfad kann hier geändert werden: Zeile 25/26
    let d1 = document.getElementById('nav-bar');
                  
        if (location.href !== 'chrome://browser/content/browser.xul' && location.href !== 'chrome://browser/content/browser.xhtml') return;
        try {
            CustomizableUI.createWidget({
                id: 'nav-bar-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                    onBuild: function(aDocument) {
                        let toolbaritem = aDocument.createXULElement('toolbarbutton');                  
                        let props = {
                            id: 'nav-bar-button',
                            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                            removable: true,
                            label: 'NavBar on/off (Strg+w)',
                            tooltiptext: 'NavBar on/off (Strg+w)',
                            style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/css/image/" + buttonicon) +'");',
                        };                  
                        for(var p in props)
                            toolbaritem.setAttribute(p, props[p]);
                        return toolbaritem;                
                    }
            });
            CustomizableUI.registerToolbarNode(tb);
        } catch(e) { };
    
    // Tastenkombi Windows und Linux
    document.addEventListener('keydown', (event) => {
            var keyName = event.key;
    //STRG + w 
            if (event.ctrlKey && keyName == 'w') {
               onClick();        
            }
        }, false
    );
    
    document.getElementById('nav-bar').style.minHeight = '0';
        if( startHeight === Height || startHeight === '0px' ) {
            document.getElementById('nav-bar').style.height = startHeight;
       }
        else {
            document.getElementById('nav-bar').style.height = Height;
        }
        document.getElementById('nav-bar-button').addEventListener( "click", onClick );
        function onClick(aEvent) {
            if (d1.style.height == '') {
                d1.style.height = '0px';
                 }
            else if (d1.style.height == Height) {
                d1.style.height = '0px';
                 }
            else if(d1.style.height == '0px') {
                d1.style.height = Height;
                if(!intervalID && autoCloseTime) {
                    intervalID =  aEvent.target.ownerGlobal.setInterval( autoClose, autoCloseTime );
                }
            }
          }
         
        function autoClose() {
            if( intervalID ) {
                if( d1.style.height == Height) {
                    d1.style.height = '0px';
                    clearInterval(intervalID);
                    intervalID=0;
                }
            }
        }
    })();
    Alles anzeigen
  • Lesezeichensymbolleiste leer

    • visoer
    • 23. Dezember 2022 um 21:53

    Deshalb habe ich genau diese Tastenkombi gewählt.

    Weil es eine Konfrontation mit der firefoxeigen Kombi gibt.

    Funktioniert bei mir auf Linux und Windows,

    sollte eigentlich bei Tastenkombinationen, die anderweitig bereits "belegt" sind, keinen Event ergeben. Durch deinen Test bin ich wohl des Besseren belehrt worden. Danke für den Test!

  • Lesezeichensymbolleiste leer

    • visoer
    • 22. Dezember 2022 um 15:23

    @Mira_Belle

    Zitat

    Du müsstest nur den Teil für die Tastenkombi irgendwie reinbasteln,

    oder reinbasteln lassen.

    Ich habe es probiert, bekomme es aber einfach nicht hin.

    Bei deinem Script geht das bei mir so:

    Code
            CustomizableUI.registerToolbarNode(tb);
        } catch(e) { };
    //----------BEGINN----------------------
    // Funktion zum Abfragen der Tastatur ("belauscht" Eingaben)
    // Hinweis: Tasten, die anderweitig bereits "abgefangen" werden, ergeben keinen Event
    document.addEventListener('keydown', (event) => {
            var keyName = event.key;
    // Funktion wird ausgeführt, wenn STRG + w gedrückt wird
            if (event.ctrlKey && keyName == 'w') {
               onClick();        
            }
        }, false
    );
    //----------ENDE------------------------
    document.getElementById('nav-bar').style.minHeight = '0';
        if( startHeight === '22px' || startHeight === '0px' ) {
    Alles anzeigen
  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • visoer
    • 17. Dezember 2022 um 22:47

    Ich hatte das gleich Problem.

    Es lag dann tatsächlich daran, dass im Startvorgang das Script zu schnell war, d.h. überschrieben wurde.

    Es lag an d2.style.visibility = "collapse";

    Geändert auf d2.style.visibility = "visible";

    Dann ging es. Das ist natürlich keine Lösung, aber vielleicht ein Ansatz.

  • Icons und Separatoren seit Update auf Version 108 verstellt

    • visoer
    • 17. Dezember 2022 um 22:34

    Ich habe ein ähnliches Problem.

    Zumindest bei den Add-On-Buttons ging es bei mir so:

    (width sollte evtl. angepasst werden)

    CSS
    #nav-bar .toolbaritem-combined-buttons.unified-extensions-item.chromeclass-toolbar-additional {
        margin-right: 0 !important;
        margin-left: 0 !important;
        width: 28px !important;
        min-width: 28px !important;
        max-width: 28px !important;
    }

Unterstütze uns!

Jährlich (2025)

67,1 %

67,1% (435,86 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon