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

Beiträge von Horstmann

  • Firefox 115.0.3 für Nutzer veralteter Betriebssysteme veröffentlicht

    • Horstmann
    • 5. August 2023 um 13:26
    Zitat von StandingBill

    Mozilla war da anscheinend etwas voreilig.

    Beim Versuch der Installation von Version 115.1 ESR gibt es eine Fehlermeldung (Installation fehlgeschlagen).

    Die nochmalige Updatesuche endet mit dem Hinweis, dass Firefox aktuell ist.

    Das Problem hatte ich auch, auf einem Mac mit OS 10.13.6, was .

    Das Update war angezeigt in Fx115.02 (in Über Firefox), dann war es plötzlich weg, und Firefox aktuell ; dann kam 115.03, die Updatetaste ist irgendwann wieder aufgetaucht, hat aber nicht funktioniert, schliesslich aber doch. ;)

    Mozilla hat es wohl einfach etwas vergeigt mit der Umstellung für nicht mehr unterstützte OS, ist aber zumindest auf meiner Seite kein Problem, weil es am Ende funktioniert hat. :thumbup:

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Horstmann
    • 4. August 2023 um 23:08

    So, hier dann noch der Vollständigkeit halber meine aktuelle Version.

    Die benutzt keinen zusätzlichen, evtl. unpassenden monospace Font, was mir optisch viel besser gefällt; der grosse Nachteil ist dass man eine feste Breite für die Zähler eingeben muss, damit alle Icons und Nummern sauber übereinander stehen (s. Screenshot).

    Weil bei einem dynamischen Font zB die 11 schmaler ist als die 48, muss man dann halt in den Browserwerkzeugen die maximale Breite für die breitesten Zahlen auslesen, und entsprechend eintragen; oder einfach probieren bis es passt.

    (Edit: in Zeile 189 ist eine Art Tool zum Ausrichten; --counter_width_1/2 von kleinem Wert an vergrössern, bis die Breite der Outlines genau übereinander passt.)

    Eingebaut ist auch noch eine optionale und verschiebbare Trennlinie, die Zähler lassen sich rechts- oder linksbündig ausrichten, sowie die Option die Zähler mit keinen (0) Ordnern/Links komplett auszublenden oder sonstwie beliebig zu verändern, nur mit CSS.

    Fand ich generell ganz pfiffig, die Idee von Mitleser . ;)

    Danke an alle Beteiligten, v.a. natürlich BrokenHeart für das originale Script und Mira_Belle für die vielen Anregungen und Modifikationen. :)

    Wer Lust hat kann damit ja mal rumspielen.

    JavaScript
    // JavaScript Document
    // BookmarkCount.uc.js - modified #8c / Using default font / optional divider / 0 count adjustable
    // Author BrokenHeart
    // Modified by Mira_Belle / Horstmann / Forum members
    // Source file https://www.camp-firefox.de/forum/thema/136572/?postID=1229536#post1229536
    // Endor Repository Link https://github.com/Endor8/userChrome.js/blob/master/Firefox%20115/BookmarkCount.uc.js
    
    
    (function() {
    
        if (location.href !== 'chrome://browser/content/browser.xhtml')
            return;
        
        setTimeout(function() {
            setFunction();
        },50);
    
    
        //Custom icons in profile/chrome/icons folder
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
        let icon1 = "YourFolderIcon.png"    //  Custom  Folder Icon
        let icon2 = "YourLinkIcon.svg"          //  Custom  Link Icon
    
        function setFunction() {
    
            const css =`
    
                /**  Basic Settings  **/
    
                :root {
    
                    /*  Fixed width counters / vertical alignment with non-monospace fonts  */
                    /*  Find pixel width in browser toolbox for widest number, e.g. 48, 989 , after setting font size, weight / or use "tool" in line 190  */
                    /*  Conversion pixel -> em for flexible font size, optional  */
    
                    /*  Has brackets, 2 digits / 27px?  */
                    --counter_width_1: 2.1em;
                    --counter_width_2: 2.1em;
    
                    /*  No brackets, 2 digits */
                    /*--counter_width_1: 1.3em;
                    --counter_width_2: 1.3em;*/
    
                    /**  Align text right/left  **/
                    --align_text: flex-end;                  /*  Text/counters aligned right  */
                    /*--align_text: flex-start;*/             /*  Text/counters aligned left  */
    
                    /* Font Size / font weight / font color, disable to use default */
                    /*--counter_fontsize: 22px;*/
                    /*--counter_fontweight: 800;*/
                    /*--counter_fontcolor1: red;*/
                    /*--counter_fontcolor2: green;*/
       
                    /* Use Custom Icons, comment out to disable */
                    --icon_image_1: url("${ProfilePath}/${icon1}");
                    --icon_image_2: url("${ProfilePath}/${icon2}");
    
                    /* Use Firefox Icons, comment out to disable */
                    /*--icon_image_1: url("chrome://global/skin/icons/folder.svg");*/
                    /*--icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");*/
                }
    
    
                /* Fix container content vertical centering for first / folder counter */ 
                hbox.menu-accel-container.countClass1 {
                    align-items: center !important;
                }
    
                /*  Minimum distance to left for tight popup windows  */
                .countClass1 {
                    margin-left: 16px !important;
                }
    
                /**  Basic Settings End  **/
    
    
                /****  #1 Folder counter  ****/
    
                /* Icon 1 */
                .countClass1::before {
                    content: "";
                    background-image: var(--icon_image_1);                           /* icon1 */
                    background-repeat: no-repeat ;
                    background-size: 14px;                                   /*  icon 1 size  */
                    background-position: center;
                    margin-right: 0px;             /*  distance  icon 1  -->  folder count 2px */
                    height: 16px;
                    width: 16px;
                    /*fill: red;*/                  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
               /* Label as divider / width 0 to hide / adjust margin-inline to center */ 
    
               .countClass1 label {
                    height: 10px !important;
                    width: 0px !important;
                    background-color: rgba(20, 20, 20, 1.0) !important;
                    order: 1;
                    /*margin-inline: 5px 4px !important;*/  /* distance counter 1 -> divider -> #2 */
                    margin-inline: 3px 3px !important;
                }
    
                /* Counter 1 */
                .countClass1::after {
                    content: attr(data-value1); 
                    min-width: var(--counter_width_1) !important;
                    font-size: var(--counter_fontsize);                                                                            
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor1);                      /*  Counter text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
    
                /****  #2 Items / links counter  ****/
    
                /* Icon 2 */
                .countClass2::before {
                    content: "";
                    background-image: var(--icon_image_2);                        /* icon2 */
                    background-repeat: no-repeat;
                    background-size: 14px;                                /*  icon 2 size  */
                    background-position: center;
                    margin-right:  0px;          /*  distance icon 2  -->  item count  2px  */
                    height: 16px;
                    width: 16px;
                    fill: rgba(30, 30, 30, 1.0);  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 2 */
                .countClass2::after {
                    content: attr(data-value2); 
                    min-width: var(--counter_width_2) !important;
                    margin-right: 4px !important;              /*  distance item count  -->  arrow  */
                    font-size: var(--counter_fontsize);
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor2);                       /*  Counter text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
                /* Move arrow to the right */
                .countClass2 image {
                    order: 1;
                    margin-right: 0px !important;             /*  distance arrow  -->  popup border  */
                }
    
              /* Move Arrow closer to popup border, optional */
               menu.menu-iconic.bookmark-item {
                   padding-right: 2px !important;
                }
    
    
               /*** Extra stuff  ***/
    
    
               /** Adjust/hide if count = 0 / CSS only / optional **/
    
               /* #1 icon folder counter if menuCount = 0 */
               .countClass1[data-value1="[0]"], .countClass1[data-value1="0"] {
                     opacity: 0;
                }
    
                /* #2 icon link counter if menuitemCount = 0 */
               .countClass2[data-value2="[0]"]::after, .countClass2[data-value2="[0]"]::before,
               .countClass2[data-value2="0"]::after, .countClass2[data-value2="0"]::before {
                     /*color: rgba(87, 80, 68, 0.7) !important;
                     fill: rgba(87, 80, 68, 0.7) !important;*/
                     opacity: 0.5;
                }
    
    
               /** Override custom menu css if needed, optional **/
    
                /* Disable default left margin / override other custom menu css #1 */ 
                /*.countClass1 label {
                    margin-inline: 0px !important;
                }*/
    
               /* Work fix / override other custom menu css #2 */
               /*.menu-right.countClass2 {
                    margin-inline: 0px !important;
               }*/
    
    
    
                /*  Outlines for testing alignment / all counter outlines must have same width */ 
                /*.countClass1::after, .countClass2::after {
                     outline: 1px solid red !important;
                     outline-offset: 7px !important;
                }*/
    
                /*  Outline only for testing  */ 
                /*menu.menu-iconic.bookmark-item {
                     outline: 1px solid orange !important;
                     outline-offset: -8px !important;
                }*/
    
            `;
    
            const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
            const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
            sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
            let bmbMenu = document.getElementById('bookmarks-menu-button');
            let bookMenu = document.getElementById('bookmarksMenu');
            let persToolBar = document.getElementById('PersonalToolbar');
            
            if(bmbMenu)
                bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(bookMenu)
                bookMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(persToolBar)
                persToolBar.addEventListener('popupshowing', onPopupShowing ); 
        }
        
        function onPopupShowing(aEvent) {
            
            let popup = aEvent.originalTarget;
    
            for (let item of popup.children) {
                if (item.localName != 'menu' || item.id?.startsWith('history'))
                    continue;
                setTimeout(() => {
                  let itemPopup = item.menupopup;
                  itemPopup.hidden = true;
                  itemPopup.collapsed = true;
                  itemPopup.openPopup();
                  itemPopup.hidePopup();
                  let menuitemCount = 0;
                  let menuCount = 0;
                  for (let subitem of itemPopup.children) {
                    if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                      if (subitem.localName == 'menuitem') {
                        menuitemCount++;
                      } else if (subitem.localName == 'menu') {
                        menuCount++;
                      }
                    }
                  }
                  itemPopup.hidden = false;
                  itemPopup.collapsed = false;
    
    
                  let label1 = item.childNodes[3];
      
                  label1.classList.add('countClass1');
                  let strCountOut1 = "[" + menuCount + "]";           //  Has brackets
                  //let strCountOut1 = menuCount;                      //  No brackets
                  label1.setAttribute('data-value1', strCountOut1);
    
                  let label2 = item.childNodes[4];
      
                  label2.classList.add('countClass2');
                  let strCountOut2 = "[" + menuitemCount + "]";       //  Has brackets
                  //let strCountOut2 = menuitemCount;                  //  No brackets
                  label2.setAttribute('data-value2', strCountOut2);
    
    
                }, 100);
            }
        }
        
    })();
    Alles anzeigen


    Edit #2: Oder vielleicht sowas? :/

    Jetzt aber raus hier, genug Selbstgespräche. ;)

    JavaScript
    // JavaScript Document
    // BookmarkCount.uc.js - modified #9 / Using default font / optional divider / 0 count adjustable
    // Author BrokenHeart
    // Modified by Mira_Belle / Horstmann / Forum members / Horstmann edition
    // Source file https://www.camp-firefox.de/forum/thema/136572/?postID=1229536#post1229536
    // Endor Repository Link https://github.com/Endor8/userChrome.js/blob/master/Firefox%20115/BookmarkCount.uc.js
    
    
    (function() {
    
        if (location.href !== 'chrome://browser/content/browser.xhtml')
            return;
        
        setTimeout(function() {
            setFunction();
        },50);
    
    
        //Custom icons in profile/chrome/icons folder
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
        let icon1 = "YourFolderIcon.png"    //  Custom  Folder Icon
        let icon2 = "YourLinkIcon.svg"          //  Custom  Link Icon
    
        function setFunction() {
    
            const css =`
    
        /**  Basic User Settings  **/
    
        :root {
    
        /*  Fixed width counters / vertical alignment with default non-monospace fonts  */
        /*  Find pixel width in browser toolbox for widest number, e.g. 48, 989 , after setting font size, weight  */
        /*  Or use tool below / Do conversion pixel -> em for more flexible font size, optional  */
    
                    /*  Has brackets, 2 digits / 27.5px?  */
                    --counter_width_1: 2.1em;
                    --counter_width_2: 2.1em;
    
                    /**  Align text right/left  **/
                    --align_text: flex-end;                  /*  Text/counters aligned right  */
                    /*--align_text: flex-start;*/             /*  Text/counters aligned left  */
    
                    /* Font Size / font weight / font color, comment out to use default */
                    /*--counter_fontsize: 22px;*/
                    /*--counter_fontweight: 800;*/
                    /*--counter_fontcolor1: red;*/
                    /*--counter_fontcolor2: green;*/
       
                    /* Use Custom Icons, comment out to disable */
                    --icon_image_1: url("${ProfilePath}/${icon1}");
                    --icon_image_2: url("${ProfilePath}/${icon2}");
    
                    /* Use Firefox Icons, comment out to disable */
                    /*--icon_image_1: url("chrome://global/skin/icons/folder.svg");*/
                    /*--icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");*/
                }
    
    
        /***  Tool for testing alignment / comment out when done  ***/
    
        /* Set font size, weight if used / create test folders  with 0, 11, 88, or 999 content */
        /* Adjust --counter_width_1+2 above, until all counter outlines have same width */  
                /*.countClass1::after, .countClass2::after {
                     outline: 1px solid red !important;
                     outline-offset: 7px !important;
                }*/
    
       /**  Basic User Settings End  **/
    
    
                /* Fix container content vertical centering for first / folder counter */ 
                hbox.menu-accel-container.countClass1 {
                    align-items: center !important;
                }
    
                /*  Minimum distance all to left, for narrow popup windows  */
                .countClass1 {
                    margin-left: 16px !important;
                }
    
    
                /****  #1 Folder counter  ****/
    
                /* Icon 1 */
                .countClass1::before {
                    content: "";
                    background-image: var(--icon_image_1);                           /* icon1 */
                    background-repeat: no-repeat ;
                    background-size: 14px;                                     /*  icon 1 size  */
                    background-position: center;
                    margin-right: 0px;                      /* distance  icon 1 <-> folder count */
                    height: 16px;
                    width: 16px;
                    /*fill: red;*/                            /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 1 */
                .countClass1::after {
                    content: attr(data-value1); 
                    min-width: var(--counter_width_1) !important;
                    font-size: var(--counter_fontsize);                                                                            
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor1);             /*  Counter 1 text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
              /* Move Label to right / use as optional divider / width 0 to hide / adjust margin-inline to center */ 
              .countClass1 label {
                    height: 10px !important;
                    width: 0px !important;
                    background-color: rgba(20, 20, 20, 1.0) !important;
                    order: 1;
                    /*margin-inline: 5px 4px !important;*/  /* distance counter 1 -> divider -> #2 */
                    margin-inline: 3px 3px !important;
                }
    
    
                /****  #2 Items / links counter  ****/
    
                /* Icon 2 */
                .countClass2::before {
                    content: "";
                    background-image: var(--icon_image_2);                        /* icon2 */
                    background-repeat: no-repeat;
                    background-size: 14px;                                /*  icon 2 size  */
                    background-position: center;
                    margin-right:  0px;                 /*  distance icon 2  <->  item count  */
                    height: 16px;
                    width: 16px;
                    fill: rgba(30, 30, 30, 1.0);  /* .svg icon color / opacity if applicable */
                    /*fill-opacity: 1;*/
                }
    
                /* Counter 2 */
                .countClass2::after {
                    content: attr(data-value2); 
                    min-width: var(--counter_width_2) !important;
                    font-size: var(--counter_fontsize);
                    font-weight: var(--counter_fontweight) !important;
                    color: var(--counter_fontcolor2);                 /*  Counter 2 text color  */
                    display: flex !important;
                    justify-content: var(--align_text);
                }
    
                /* Move arrow to the right */
                .countClass2 image {
                    order: 1;
                    margin-inline: 4px 0px !important;  /* distance item count -> arrow  ->  popup border */
                }
    
              /* Move Arrow closer to popup border, optional */
               menu.menu-iconic.bookmark-item {
                   padding-right: 2px !important;
                }
    
    
               /*** Extra stuff  ***/
    
              /** Adjust/hide if count = 0 / CSS only / optional / for no, square & round brackets **/
    
               /* #1 icon folder counter if menuCount = 0 */
               .countClass1[data-value1="[0]"], 
               .countClass1[data-value1="(0)"], 
               .countClass1[data-value1="0"] {
                     opacity: 0;
                }
    
                /* #2 icon link counter if menuitemCount = 0 */
               .countClass2[data-value2="[0]"]::after, .countClass2[data-value2="[0]"]::before,
               .countClass2[data-value2="(0)"]::after, .countClass2[data-value2="(0)"]::before,
               .countClass2[data-value2="0"]::after, .countClass2[data-value2="0"]::before {
                     /*color: rgba(87, 80, 68, 0.7) !important;
                     fill: rgba(87, 80, 68, 0.7) !important;*/
                     opacity: 0.5;
                }
    
                /* Arrow */
                :is(.countClass1[data-value1="[0]"] + .countClass2[data-value2="[0]"], 
                    .countClass1[data-value1="0"] + .countClass2[data-value2="0"], 
                    .countClass1[data-value1="(0)"] + .countClass2[data-value2="(0)"]) image {
                    /*opacity: 0;*/
                    fill: rgba(255, 150, 68, 1.0) !important;
                }
    
                /* Hide empty Popup */
                menu.menu-iconic.bookmark-item menupopup[emptyplacesresult="true"] {
                     display: none !important;
                }
    
              /** Adjust/hide if count = 0 / End **/
    
    
    
               /** Override other custom menu css if needed, optional **/
    
               /* Work fix / override other custom menu css #2 */
               /*.menu-right.countClass2 {
                    margin-inline: 0px !important;
               }*/
    
            `;
    
            const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
            const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css));
            sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET);
    
            //let bmbMenu = document.getElementById('bookmarks-menu-button');
            let bookMenu = document.getElementById('bookmarksMenu');
            let persToolBar = document.getElementById('PersonalToolbar');
            
            //if(bmbMenu)
                //bmbMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(bookMenu)
                bookMenu.addEventListener('popupshowing', onPopupShowing ); 
            if(persToolBar)
                persToolBar.addEventListener('popupshowing', onPopupShowing ); 
        }
        
        function onPopupShowing(aEvent) {
            
            let popup = aEvent.originalTarget;
    
            for (let item of popup.children) {
                if (item.localName != 'menu' || item.id?.startsWith('history'))
                    continue;
                setTimeout(() => {
                  let itemPopup = item.menupopup;
                  itemPopup.hidden = true;
                  itemPopup.collapsed = true;
                  itemPopup.openPopup();
                  itemPopup.hidePopup();
                  let menuitemCount = 0;
                  let menuCount = 0;
                  for (let subitem of itemPopup.children) {
                    if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) {
                      if (subitem.localName == 'menuitem') {
                        menuitemCount++;
                      } else if (subitem.localName == 'menu') {
                        menuCount++;
                      }
                    }
                  }
                  itemPopup.hidden = false;
                  itemPopup.collapsed = false;
    
    
                  let label1 = item.childNodes[3];
      
                  label1.classList.add('countClass1');
                  let strCountOut1 = "[" + menuCount + "]";   //  Has square brackets
                  //let strCountOut1 = "(" + menuCount + ")";       //  Has round brackets
                  //let strCountOut1 = menuCount;                                //  No brackets
                  label1.setAttribute('data-value1', strCountOut1);
    
                  let label2 = item.childNodes[4];
      
                  label2.classList.add('countClass2');
                  let strCountOut2 = "[" + menuitemCount + "]"; //  Has square brackets
                  //let strCountOut2 = "(" + menuitemCount + ")";     //  Has round brackets
                  //let strCountOut2 = menuitemCount;                              //  No brackets
                  label2.setAttribute('data-value2', strCountOut2);
    
    
                }, 100);
            }
        }
        
    })();
    Alles anzeigen
  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 19:30
    Zitat von FuchsFan

    So, das im Script oder in userChrome.css eingetragen ergibt dann hier:

    CSS
     #profileschange-button.toolbarbutton-1.chromeclass-toolbar-additional image.toolbarbutton-icon {
        width: 33px !important;
        height: 33px !important;
        padding: 6px  !important;
    }

    (auch mit neuem Code von Aris für die Button getestet)


    Jetzt kapier ich's erst - du willst das Icon grösser haben als die anderen, das Problem war nicht dass es kleiner als der Rest war... =O ;)

    Das geht tatsächlich über fixe Grösse + weniger Padding, da war Dharkness auf der richtigen Spur.

    Übrigens ist jetzt dein Button/Icon etwas zu gross, width/height sollten wohl 32px sein statt 33px.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 18:28
    Zitat von FuchsFan

    Nun habe ich die Zeile von Aris für den Urheber erklärt, ist aber doch nicht so.

    Nur das Profile-Script noch im Einsatz, der Rest an Codes, Scripte, alles raus, und trotzdem das kleine Icon.

    Ich bedanke mich bei allen Unterstützern, wir lassen es einfach so. :)

    Hmm, zumindest das Icon könntest du noch reinstellen. ;)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 18:12
    Zitat von FuchsFan

    Das wundert mich auch, aber der Übeltäter ist die Zeile aus dem Code von Aris. Die kann ich aber nicht entfernen, weil sonst einige Button nicht angezeigt werden.

    Code
    #nav-bar .toolbarbutton-1:not([checked]):not([open]):not(:active) > .toolbarbutton-icon,

    Alles was man wissen sollte für einen Vorschlag fehlt hier... ;)

    Zumindest den gesamten Codeblock solltest du angeben, und die dazugehörige Datei die du benutzt innerhalb von Aris CSS.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 15:31
    Zitat von FuchsFan

    Das habe ich alles schon durch, Icons gewechselt, Größe gewechselt, Format gewechselt, nichts da.

    Ich habe dann doch mal die Aris CSS (v4.3.9, Fx115.1esr) im Testprofil geladen, und mit dem Script benutzt.

    Das Icon passt sich automatisch perfekt an (das "L" im Screenshot), auch mit verschiedenen Icondateien in verschiedenen Bildgrössen etc.. :/

    Ich könnte mir nur noch vorstellen, dass du evtl. zusätzliches eigenes CSS benutzt für spezifische Icons, oder eine veraltete und vielleicht zurechtgebastelte Version vom Aris CSS.


  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 12:35
    Zitat von Mira_Belle

    Äh, wie soll ich das nun erklären?

    :/

    Prima erklärt, herzlichen Dank für die Mühe! :)  :thumbup:

    Ich wollte v.a. sicher gehen, dass PathUtils nicht generell Probleme macht in neueren Fx Versionen.

    Ich bastle immer noch ein bisschen an unserer alten Baustelle herum, ich vermute dass damit alles iO sein sollte bzgl. der Dateipfade, da wird ja CSS im Script benutzt wie in deinem aktuellen Beispiel.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 4. August 2023 um 11:36
    Zitat von Mira_Belle

    So dann hier die neue und aktuelle Version meines "Button-um-weiteres-Profil-zu-öffnen-Skripts".

    JavaScript
    // JavaScript Document
    // QuickProfilesChangesButton.uc.js
    // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1231647#post1231647
    // Source file https://www.camp-firefox.de/forum/thema/136664/?postID=1232240#post1232240
    // Version 1.07 from August 3, 2023
    (function() {
       if (location.href !== 'chrome://browser/content/browser.xhtml') return;
       try {
          CustomizableUI.createWidget({
             id: 'profileschange-button',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {        
                let toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
                toolbaritem.onclick = event => onClick(event);
                var props = {
                   id: 'profileschange-button',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Profil zusätzlich starten',
                   accesskey: '', // Wer möchte kann hier z.B. 'C' eintragen, dann kann per "Alt + C" das Skript ausgeführt werden
                   tooltiptext: 'Profile Changer',
                };            
                for (var p in props)
                   toolbaritem.setAttribute(p, props[p]);            
                return toolbaritem;
             }    
          });
       } catch(e) { };
       
       let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); // Pfad zum Profilordner und gleich in den entsprechenden Unterordner
       let ButtonIcon = "user-group_2.svg"; // Name & Dateiendung des anzuzeigenden Symbols!
       var css =`
           #profileschange-button { list-style-image: url("${ProfilePath}/${ButtonIcon}") }
       `;
       var sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService);
       var uri = makeURI('data:text/css;charset=UTF=8,' + encodeURIComponent(css));
       sss.loadAndRegisterSheet(uri, sss.AUTHOR_SHEET);
         
       function onClick(event) {
          if (event.button != 0){
             return;
          }
          let file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          let arguments = ["-no-remote", "-P", "Standard-Benutzer", "-foreground"]; // Profil wird ausgewählt Hier "XXX" den gewünschten Profilnamen eintragen
    //      let arguments = ["-no-remote", "-P"]; // Wer lieber den Profilmanager aufrufen möchte,nutzt diese Zeile!
          file.initWithPath("C:\\Program Files\\Mozilla Firefox\\firefox.exe"); // Pfad zur Firefox-Installation
    //      file.initWithPath("/Applications/Firefox.app/Contents/MacOS/firefox"); // Pfad zur Firefox-Installation, Dateipfad für Mac User
          let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
          process.init(file);    
          process.run(false, arguments, arguments.length); // Profil wird bestätigt
       }    
    })();
    Alles anzeigen

    Nur mal für ganz Langsame wie mich: das hier ist wohl inzwischen überholt, und Zeile 31 ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); - mit PathUtils - funktioniert also, auch in den aktuellen Nightlys?

    Ärgerlicherweise kann ich Nightlys nicht mehr benutzen auf der alten Mackiste, möchte nur weitmöglichst meine Scripts aktuell halten.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 3. August 2023 um 17:04
    Zitat von FuchsFan
    Zitat von Horstmann

    ich vermute du hast evtl. CSS am Laufen das die Icongrösse für manche Buttons ändert, aber nicht für alle.

    Da liegst Du vollkommen richtig, in der Regel werden mit eingebunden, aber nicht alle, wie du andeutest.

    https://github.com/Aris-t2/Custom…_appearance.css

    Da seh ich aber nix bzgl. Grössen, oder ich bin blind.

    Das Aris Monster - genial wie es ist - hab ich aber schon zu oft durchgekämmt um das nochmal zu machen. ;)

    Eine komplett wilde Idee wäre in dem Fall das Icon in einer CSS Datei - am besten vielleicht unten in deiner userChrome.css - anzugeben, und damit das Icon im Script zu umgehen.

    Also sowas, angenommen dein Icon ist in einem Ordner namens icons im chrome Ordner:

    CSS
    #profileschange-button .toolbarbutton-icon {
        list-style-image: url("icons/DeinIcon.png") !important;
    }

    Könnte sein dass dann deine anderen Einstellungen für Icons auch für dieses Bild greifen, ohne zusätzliche Grössenangaben.

    Aber wie gesagt, wenn es auch anders funktioniert ist das ja auch ok, also muss man sich den Aufwand vielleicht nicht machen.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 3. August 2023 um 16:36
    Zitat von Sören Hentzschel

    Alles, was als base64 kodiert ist, muss auch wieder dekodiert werden. Und das jedes Mal, wenn es angezeigt wird, da ist kein Caching möglich. Das ist deutlich langsamer und beansprucht die CPU mehr als Grafiken direkt anzuzeigen.

    Verstehe, dankeschön! :)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 3. August 2023 um 15:57
    Zitat von Sören Hentzschel
    Zitat von Horstmann

    was wäre der Vorteil gegenüber .svg?

    Beitrag

    RE: Button um weiteres Profil zu öffnen

    […]

    console.log('Der Text, der geloggt werden soll') oder eben console.log(variable).

    Zum Thema base64:

    […]

    Sören Hentzschel
    2. August 2023 um 20:21

    Verstehe ich nicht so ganz; base64 ist langsamer an sich, oder mit Code eingebettete Icons generell?

    .svg kann man ja auch als Code in CSS benutzen, ohne eine separate Bilddatei zu benötigen - wenn man tatsächlich den einen Schritt sparen muss.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 3. August 2023 um 14:56
    Zitat von FuchsFan

    Was kann ich machen, dass die Grafik im Button größer erscheint?

    Eine Änderung der Pixelzahl (Vergrößerung) für die Grafik bringt nichts.

    das wäre normal: und so mit dem Script:

    Das Icon für dieses Script funktioniert hier wie alle anderen auch; ich vermute du hast evtl. CSS am Laufen das die Icongrösse für manche Buttons ändert, aber nicht für alle.

    Es ist mir auch nicht so ganz klar, worauf die Screenshots basieren - ist das normale Icon für einen anderen Button mit CSS eingefügt, oder in der Bildbearbeitung manipuliert?

    Wäre vielleicht sinnvoller das mal zu eruieren, statt eine Einzelregel für nur einen Button reinzuwürgen; aber wenn's auch so geht, geht's auch so. ;)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 3. August 2023 um 12:19
    Zitat von 2002Andreas

    Nur wieder so ein Gedanke:

    Wenn ich Zeile 26 - 27 auskommentiere, und dann als Pfad zum Icon im Ordner Icons das so eintrage:

    CSS
     var css =`
             #profileschange-button { 
             list-style-image: url("file:D:/Nightly Neu/Firefox/profile/chrome/Icons/1.gif")!important;
             }
        `;

    funktioniert auch das einwandfrei.

    Bei der Art muss/kann man ja das Icon auch ganz einfach ändern.

    Was leider nicht funktioniert ist die Kurzform davon: :/

    CSS
     var css =`
             #profileschange-button { 
             list-style-image: url("..//Icons/1.gif")!important;
             }
        `;

    Trage ich das aber so in die userChrome.css ein, dann passt es.

    Alles anzeigen

    In der userChrome.css brauchst du ja keinen (vollen) Dateipfad festzulegen, bzw. nur wenn die bezügliche Datei nicht im gleichen Ordner wie die zugehörige CSS Datei liegt.

    In diesem Fall dann eben list-style-image: url("Icons/1.gif");, gleiches Prinzip für importierte CSS Dateien, die evtl. in Unterordnern liegen.

    Im Gegensatz zur CSS weiss das JS Script aber nicht wo es die Datei suchen soll, wenn man den vollen Pfad nicht irgendwie definiert.

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 2. August 2023 um 21:05
    Zitat von Mira_Belle

    Erst einmal soll es hier aber um diese blöde nicht mehr funktionierende Pfadangabe gehen,

    Die da wäre:

    JavaScript
    let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    let buttonicon = "bookmark-hollow.svg";
    let props = {
        style: "list-style-image: url('" + ProfilePath + buttonicon + "');"
    };

    und die ich so habe ändern müssen:

    JavaScript
    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    let buttonicon = "bookmark-hollow.svg";
    let props = {
        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) +'");',
    };

    Warum funktioniert die erste Variante nicht mehr :?:

    Mal ganz doof gefragt - die 2te Variante ist doch schon relativ alt, soweit ich das abschätzen kann, und funktioniert anscheinend immer noch.

    Wieso braucht es die erste (neuere?) Variante überhaupt?


    Zitat von 2002Andreas

    PS:

    Vor Jahren hatten wir immer base64 Icons, da brauchte man das alles nicht ;)

    Mal abgesehen von den fragwürdigen Geschmäckern der Erzeuger (was sich hier noch in einigen Scripts an Icons rumtreibt ist schockierend) ;) , und dem furchtbaren Datenwulst in der Datei - was wäre der Vorteil gegenüber .svg?

  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • Horstmann
    • 2. August 2023 um 16:30
    Zitat von Mira_Belle
    JavaScript
    let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
    let buttonicon = "bookmark-hollow.svg";
    let props = {
        style: "list-style-image: url('" + ProfilePath + buttonicon + "');"
    };

    eingebunden wurden nicht mehr angezeigt.

    Daher musste ich das anpassen:

    JavaScript
    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
    let buttonicon = "bookmark-hollow.svg";
    let props = {
        style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonicon) +'");',
    };

    Danke! :)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 2. August 2023 um 15:37
    Zitat von Mira_Belle

    Zur Erklärung!

    Die Parameter von PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));

    funktionieren so nicht mehr, warum auch immer.

    Das kann uns Sören Hentzschel vielleicht erkären.

    Daraus folgt, dass auch style: "list-style-image: url('" + ProfilePath + buttonicon + "');"

    das Icon (Symbol) nicht mehr einbindet.

    Alles anzeigen

    Danke für die Erklärung! :)

    Zitat von Mira_Belle

    Zu Deinem Vorschlag, die Symbole per CSS einzubinden.

    Kann man machen, ist eventuell, wenn man eben sonst keine oder halt nur wenige Symbole hat,

    eine ganz gute Möglichkeit.

    Nur bei zig CSS-Dateien im Fall der Fälle den Fehler zu finden, ... :/

    Und ich habe gerne alles beisammen.

    Kann man so oder so sehen - wenn Icons nur über separates CSS benutzt werden, kann - zumindest momentan - der einzige Fehler eigentlich nur ein nicht existierendes/falsch benanntes oder abgelegtes Icon sein.

    Was das gleiche Problem in der Scriptvariante wäre, aber halt mit dem zusätzlichen Dateipfadgedöns.

    Mir gefällt es auch alles in einer Datei zu haben - andererseits ändere ich auch gerne mal individuelle Icons (Farbe, Deckkraft, Position in der toolbar oder im Überhangmenü, etc.), und dann müsste ich immer in das jeweilige Script rein - das dann auch die entsprechenden Parameter mitbringen müsste.

    Vielleicht sollte ich mir einfach eine separate icons.css anlegen. :/ ;)

  • Button um weiteres Profil zu öffnen

    • Horstmann
    • 2. August 2023 um 13:54
    Zitat von Mira_Belle

    Update

    Version 1.05 vom 27. Juli zeigt kein Symbol mehr an.

    Daher das Skript aktualisiert.

    Wäre interessant zu erfahren, was generell die aktuell funktionierende Variante für Dateipfade/Iconeinbindung in Scripts ist, bzw. was nicht mehr geht und warum. :/

    Ist aber vielleicht ein eigenes Thema, oder zu aufwendig zu erklären.

    Alternativ, könnte es mehr Sinn machen Icons einfach mit CSS einzubetten?

    Mach ich bei den meisten meiner Scripts so.

    Wenn man sich die Button ID aus dem Script nimmt, sollte das doch eigentlich generell klappen, ohne das Theater mit den Dateipfaden im Script?

    zB:

    CSS
    #profileschange-button {
        list-style-image: url("icons/profileschange-button.png") !important;
    }
  • Schaltfläche um Lesezeichen Leiste ein/auszublenden ?

    • Horstmann
    • 2. August 2023 um 13:26
    Zitat von Mira_Belle

    Update

    Da mein Skript unter Version 116 nicht mehr funktioniert,

    habe ich es umgeschrieben.

    Nur aus Neugierde - welcher Teil hatte denn nicht mehr funktioniert mit Fx 116?

    Kann meine Version nicht testen in der neusten Fx oder Nightly, mein OS ist zu alt und jetzt auf 115ESR ...

    Selber habe ich meine alte, einfache JS/CSS Kombo am laufen, könnte ich bei Gelegenheit mal zusammenlegen im Script:

    JavaScript
    //Toggle PersonalToolbar v3 left click button
    
    (function ptbut() {
        
            if (location.href !== 'chrome://browser/content/browser.xhtml')
           return;
    
        try {
            CustomizableUI.createWidget({
                id: 'PersonalToolbar-button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                    onBuild: function(aDocument) {
                        var toolbaritem = aDocument.createXULElement('toolbarbutton');
                        var props = {
                            id: 'PersonalToolbar-button',
                            class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                            removable: true,
                            label: 'Toggle',
                            tooltiptext: 'Toggle Bookmarktoolbar',
                        };
                                       for(var p in props)
                            toolbaritem.setAttribute(p, props[p]);
                        return toolbaritem;
                    }
            });
        } catch(e) { };
        
    document.addEventListener('keydown', (event) => {
            var keyName = event.key;
    
           // Mac German keyboard shortcut Cmd + < 
            if (event.metaKey && keyName == '<') {
               onClick(event, true);        
            }
        }, false
    );
    
    document.getElementById('PersonalToolbar-button').addEventListener( "click", onClick );
    
            function onClick(aEvent, keyEvent=false) {          
            if(!keyEvent && aEvent.button != 0) {
                return;    
            }
    
           PersonalToolbar.classList.toggle("low-mode");
        }
    
    })();
    Alles anzeigen
    CSS
    /**  Bookmarks bar height Toggle  **/
    
    #PersonalToolbar:not([customizing]) {
        height: var(--uc-personalbar-height) !important;
        --uc-personalbar-height: 0px !important;
        min-height: 0px !important;
        transition: all 0.25s ease !important;
    }
    
    #PersonalToolbar.low-mode {
        --uc-personalbar-height: 24px !important;
    }
    
    #PersonalToolbar-button .toolbarbutton-icon {
        list-style-image: url("icons/toolbar12up.png") !important;
    }
    Alles anzeigen
  • Keine automatische Umstellung auf ESR für älteres OS (Mac?)

    • Horstmann
    • 2. August 2023 um 08:28

    Danke für die Antwort, Sören. :)

    Tatsächlich hat sich das Problem über Nacht gelöst - heute morgen liess sich das Update - wie "normale" Updates - in Fx intern laden und installieren.

  • Keine automatische Umstellung auf ESR für älteres OS (Mac?)

    • Horstmann
    • 1. August 2023 um 22:20

    Mein Firefox lässt sich nicht intern von 115.03 auf 115.x ESR updaten, was ursprünglich so angekündigt war als Vorgehensweise für ältere Betriebssysteme.

    ESR kann ich zwar separat herunterladen; meine Befürchtung ist nur, dass die Installation einer neuen Firefox.app meine bisherigen Änderungen mit CSS und JS Scripts zunichte macht.

    Gedanken oder evtl. schon Erfahrungen dazu?

Unterstütze uns!

Jährlich (2026)

0 %

0% (0,00 von 650 EUR)

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