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. Mitleser

Beiträge von Mitleser

  • ScrollTopAndBottom.uc.js und Open with.uc.js zeigen keine Icons mehr an im Nightly

    • Mitleser
    • 2. August 2025 um 00:10

    Ich hänge mich mal an (eine andere Art der Einbindung von --menuitem-icon in Zeile 59):
    Beispiel:

    JavaScript
    // JavaScript Document
    // M_Quit_Firefox.uc.js
    // FF 143
    // Quelle: https://www...
    
    // Das Script erstellt einen neuen Menüeintrag, der ein einzelnes Firefox-Fenster separat schließt (Linksklick) oder Firefox beendet (Mittel-/Rechtsklick). Das .svg-Icon kann - je nach Hover-Zustand - mit zwei unterschiedlichen Farben gefüllt werden [fill]. Beim Überfahren des Menuitems rotiert das Icon um 180deg [rotate: 180deg].
    // Das Menü für den Menüeintrag kann selektiert werden (Seitenkontextmenü oder Tabkontextmenü).
    // Die Position des Menüeintrags innerhalb des Menüs kann bestimmt werden.
    // Eine Darstellung des Menüeintrags mit/ohne Icon kann gewählt werden.
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script - bei gewählter Iconanzeige [const isIcon = 1;] -  die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    
    (function() {
      if (!window.gBrowser)
    	return;
    const
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
             id = 'contextQuit', // ID des neuen menuitems
          label = 'Fenster schließen/Firefox beenden', // Bezeichnung des neuen menuitems
    tooltiptext = 'Fenster schließen/Firefox beenden\n\nLinksklick: Fenster schließen\nMittel-/Rechtsklick: Firefox beenden',
    // Icon-------------------------------------------------------
         isIcon = 1,
    //   isIcon = 1, mit Icon
    //   isIcon = 0, ohne Icon; die Konstanten icon, iconPath, iconColOu und iconColOv haben dann keine Funktion und sollten unberührt bleiben
           icon = 'quit-16.svg',  // [Name.Dateiendung] des Symbols
       iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
      iconColOu = 'firebrick',  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOu keine Funktion)
      iconColOv = 'currentColor',  // Farbe des Icons beim Überfahren des Items (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOv keine Funktion)
    // Menü-------------------------------------------------------
         isMenu = 2,
    //   isMenu = 1, für Seitenkontextmenü;
    //   isMenu = 2, für Tabkontextmenü';
          isPos = 12,
    // Option A:
    //    isPos = 12, [Zahlen von -5 bis 20]
    // Menuitem an einer bestimmten Position im Menü einfügen
    // wie in CSS: [order:12!important;]
    // Option B:
    //    isPos = 'context-inspect'; [String]
    // Menuitem auf diesen Menüpunkt folgend einfügen
    // wie in CSS: [#context-inspect]
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
     curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)),
             cl = '.menu-icon',
          menu1 = document.getElementById('contentAreaContextMenu'),
          menu2 = document.getElementById('tabContextMenu'),
       menuitem = document.createXULElement('menuitem');
    //const end
          menuitem.id = id;
          menuitem.setAttribute('label', label);
          menuitem.setAttribute('tooltiptext', tooltiptext);
    //mit Icon
    if (isIcon ===  1) {
    //----
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----
    	  menuitem.classList.add('menuitem-iconic');
    	  menuitem.setAttribute('style','--menuitem-icon: url("' + curProfDir + iconPath + icon + '")');
    	  menuitem.style.MozContextProperties = 'fill, stroke, fill-opacity';
    
    //Icon start
    switch (isMenu) {
    	case 1:
    	menu1.addEventListener('popupshowing', () => {
    	menuitem.querySelector(cl).style.fill = iconColOu;
    });
    	break;
    	case 2:
    	menu2.addEventListener('popupshowing', () => {
    	menuitem.querySelector(cl).style.fill = iconColOu;
    });
    	break;
    }
    //Icon over
    menuitem.addEventListener('mouseover', () => {
    	  menuitem.querySelector(cl).setAttribute('style','fill:'+iconColOv+';rotate: 180deg; transition: rotate 0.2s ease-in-out 0.1s;');
    });
    //Icon out
    menuitem.addEventListener('mouseout', () => {
    	  menuitem.querySelector(cl).setAttribute('style','fill:'+iconColOu+';rotate: 0deg; transition: rotate 0.2s ease-in-out 0.1s;');
    });
    
    }
    //Icon end
    //click
    menuitem.addEventListener('click', () => {
    	if (event.button === 0) {
            	event.target.ownerGlobal.BrowserCommands.tryToCloseWindow(event);
    	}
    	else
    	if (event.button === 1 || event.button === 2) {
    			event.target.ownerGlobal.goQuitApplication(event);
    	}
    });
    //Position order
    if (isPos > -6 && isPos < 21) {
    	if (isMenu === 1) {
    		  menu1.append(menuitem);
    	}
    	else
    	if (isMenu === 2) {
    	  	  menu2.append(menuitem);
    	}
    menuitem.style.order = isPos;
    }
    //Position reference
    else {
    const refItem = document.getElementById(isPos);
     	  refItem.parentNode.insertBefore(menuitem, refItem.nextSibling);
    }
    //----
    })();
    Alles anzeigen

    Dateien

    quit-16.svg 512 Byte – 88 Downloads
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Mitleser
    • 25. Juli 2025 um 21:35

    Was hat die Ki verändert? Ein Auszug aus dem Quelltext wäre hilfreich.

  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Mitleser
    • 25. Juli 2025 um 20:14

    Der Fehler könnte in Zeile 73 (#4.582) liegen:
    searchfox.org

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 25. Juli 2025 um 17:46

    lenny2, das geht nur mit einer Versionsabfrage (ist das überhaupt möglich?)
    Ab 141.0 gibt es diese Änderung:

    Zitat von Mitleser

    Der Grund könnte dieser sein (Die Befehle haben sich geändert):

    browser-sets.js - mozsearch

    Aber ich habe einen Vermerk im Script eingefügt.
    // Firefox 141.0+
    Für FF 140.0 sollte Zeile 60 ersetzt werden mit: event.target.ownerGlobal.restoreLastClosedTabOrWindowOrSession(); (ungetestet)

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 24. Juli 2025 um 09:06

    lenny2, danke fürs Testen.

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 23:27

    Danke für Deine Ausführungen! Aber ändert das irgendetwas an dem Script/Icon aus Beitrag #8? Ich denke nicht...Schöner Beitrag, aber in diesem Thema von Anfang an unpassend und nicht zutreffend!

  • Was hört Ihr gerade?

    • Mitleser
    • 23. Juli 2025 um 21:48

    Zum runterkommen:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 21:40
    Zitat von Mira_Belle

    Schaut Euch den Code eines SVG an.

    Super, wollte ich schon immer mal sehen! Bin ich gerade blind von geworden. Danke!

    @Horstmann 
    Wenn der Code nicht im .svg enthalten ist kann das css den entsprechenden Code einfügen.

    es reicht, gN8

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 20:55
    Zitat von Horstmann

    wollte nur höflich auf deinen Irrtum hinweisen

    Welchen Irrtum meinerseits meinst Du? Das Icon funzt jetzt sowohl im Fileexplorer unter Windows sowie im Script!

    Zitat von Horstmann

    Und wie gesagt, color zu setzen kann Nebenwirkungen haben, deshalb ist currentColor oft keine Lösung.

    Könntest Du diese Aussage präzisieren?

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 20:19
    Zitat von Horstmann

    Dann dürften aber in Fx CSS sowohl fill als auch fill-opacity nicht mehr funktionieren, oder?

    Warum testest Du es nicht einfach selbst und postest dann hier die Antwort?

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 19:44
    Zitat von lenny2

    Ich werde das morgen überprüfen können.

    Hat sich erledigt, funzt. Dankeschön für den Hinweis! Habe das Icon in Beitrag #8 ersetzt.

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 18:55
    Zitat von lenny2

    entferne ich immer den Code
    fill-opacity:context-fill-opacity; aus dem Icon.

    Danke für den Tipp! Funzt das auch, wenn du fill:context-fill;fill-opacity:context-fill-opacity; komplett entfernst (Bin auf Linux; deshalb die Frage)? Und funzt das mouseover im Script dann trotzdem?

  • Firefox v141.0 UndoCloseTabButton.uc.js Skript funktioniert nicht mehr

    • Mitleser
    • 23. Juli 2025 um 15:15

    Der Grund könnte dieser sein (Die Befehle haben sich geändert):

    browser-sets.js - mozsearch

    EDIT: Icon ausgetauscht (wegen Darstellungsproblemen im Fileexplorer unter Windows)
    EDIT: Icons nochmal getauscht 24.07.25, 9:50 Uhr

    z.B.:

    JavaScript
    // JavaScript Document
    // B_RestoreLastClosedTab.uc.js
    // Firefox 141.0+
    
    // Das Script erstellt einen Button der den letzten geschlossenen Tab/die letzte geschlossene Sitzung oder das letzte geschlossene Fenster wiederherstellt. Das .svg-Icon kann - je nach Hover-Zustand - mit zwei unterschiedlichen Farben gefüllt werden [fill].
    // Für das mitgelieferte Icon als .svg-Datei mit [moz-context-properties] ändert das Script die Einstellung [svg.context-properties.content.enabled] in about:config auf 'true'.
    
    (function() {
      if (!window.gBrowser)
    	return;
    const
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
             id = 'restoreLastClosed-button', // Id des neuen Buttons
          label = 'Geschl. Tab/Sitzung/Fenster wiederherst.', // Bezeichnung des neuen Buttons
    tooltiptext = 'Geschlossenen Tab/Sitzung/Fenster wiederherstellen',
    // Icon-------------------------------------------------------
           icon = '16_reload_moz.svg',  // [Name.Dateiendung] des Symbols
       iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
      iconColOu = 'gray',  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOu keine Funktion)
      iconColOv = 'currentColor',  // Farbe des Icons beim Überfahren des Buttons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOv keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
     curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)),
             cl = '.toolbarbutton-icon';
    //const end
    	if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    		Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    	}
    //----
    CustomizableUI.createWidget({
        id: id,
    	type: 'button',
        defaultArea: CustomizableUI.AREA_NAVBAR,
        label: label,
        tooltiptext: tooltiptext,
    
        onCreated: (button) => {
    		button.style.MozContextProperties = 'fill, stroke, fill-opacity';
    		button.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
    		button.style.fill = iconColOu;
    		button.style.minWidth = 'fit-content';
    //over
    button.addEventListener('mouseover', () => {
    		button.style.fill = iconColOv;
    //		button.querySelector(cl).style.rotate = '90deg';
    });
    //out
    button.addEventListener('mouseout', () => {
    		button.style.fill = iconColOu;
    //		button.querySelector(cl).style.rotate = '0deg';
    });
    //contextmenu
    button.addEventListener('contextmenu', e => {
    	if (event.button === 2) {
    			e.preventDefault();
    	}
    });
    //click
    button.addEventListener('click', () => {
    	if (event.button === 0) {
    			event.target.ownerGlobal.SessionWindowUI.restoreLastClosedTabOrWindowOrSession(window);
    	}
    });
    	}
    });
    //----
    })();
    Alles anzeigen

    Dateien

    16_reload_moz.svg 724 Byte – 107 Downloads
  • v141 Suche nach einem Skript zum Show\Hide Title Bar

    • Mitleser
    • 19. Juli 2025 um 16:25

    @Horstmann , es fehlt - damit es in neueren Firefoxversionen funzt - ein Slash nach der Angabe des Profilpfades. Den könnte man z.B. hier einfügen:

    style: 'list-style-image: url("' + ProfilePath +'/'+ buttonicon + '");'

  • Kann keine Lesezeichen mehr starten

    • Mitleser
    • 13. Juli 2025 um 00:09

    Mit dieser allgemeinen Aussage, die mit der Frage des TE's nichts zu tun hat, hat er dem TE sicherlich bei seiner Problemlösung nicht geholfen, das ist reine Selbstdarstellung seinerseits. Ich kann dem TE leider nicht helfen => Linux.

  • Kann keine Lesezeichen mehr starten

    • Mitleser
    • 12. Juli 2025 um 23:28
    Zitat von berny46

    Ich benutze G-Data auf ca. 10 verschiedenen Win10 Systemen.

    Nur bei meinem tritt der Fehler ab und zu auf.

    Zitat von schlingo

    deinstalliere diese unnütze Systembremse vollständig und rückstandsfrei. Anschließend bist Du nicht etwa schlechter, sondern mit dem Defender sogar besser geschützt.

    schlingo, ist dieser Satz eigentlich der Einzige den du drauf hast? Bei 10 Rechnern liegt das Problem sicherlich woanders!

  • Suche Lösung per CSS oder JS damit sich die Menüs "soft" öffnen.

    • Mitleser
    • 6. Juli 2025 um 13:15
    Zitat von Mira_Belle

    Kann mir Blondine jemand mit einfachen Sätzen erklären, was dieses Skript tun soll?

    Zitat von Horstmann

    den kleinen AI JS Code

    Dann kannst Du diese Frage sicherlich beantworten.....

  • Suche Lösung per CSS oder JS damit sich die Menüs "soft" öffnen.

    • Mitleser
    • 6. Juli 2025 um 11:28
    Zitat von Mira_Belle

    Kann mir Blondine jemand mit einfachen Sätzen erklären, was dieses Skript tun soll?

    Zitat von Horstmann

    Warnung: dieses JS ist modifiziertes AI, konnte sonst nix finden. ;)

    Frag doch einfach mal Deine Französin, auf diese Antwort wäre ich gespannt. Sozusagen Ki fragt AI...

  • Suche Lösung per CSS oder JS damit sich die Menüs "soft" öffnen.

    • Mitleser
    • 5. Juli 2025 um 21:59
    Zitat von Endor

    Ja es blockiert auch Logins

    Deshalb habe ich mal angefangen den css-Teil mit den Dropdowns aufzudröseln, diese Sammlung blockiert bei mir jedenfalls kein Login; ich habe längst nicht alle Popups erfasst, einige funktionieren auch nur nach einem Neustart [hasbeenopened = "true"], vielleicht kann ja jemand damit was anfangen und weiterentwickeln (Die Rahmen sind nur zum testen):

    CSS
    menu > menupopup {
        --trans_x: -100%;
    }
    menu > menupopup.flipper {
        --trans_x: 100%;
    }
    /*--------------------------------*/
    menu > #usercssloader-menupopup {
        outline: 2px solid magenta;
        outline-offset: -2px !important;
    }
    menu > #usercssloader-menupopup {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    menu[open] > #usercssloader-menupopup {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    /*funzt nur beim ersten mal nach Neustart*/
    #tabContextMenu {
        outline: 2px solid gold;
        outline-offset: -2px !important;
    }
    #tabContextMenu:not([hasbeenopened = "true"]) {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #tabContextMenu[hasbeenopened = "true"] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    /*funzt nur beim ersten mal nach Neustart*/
    #contentAreaContextMenu {
        outline: 2px solid lightblue;
        outline-offset: -2px !important;
    }
    #contentAreaContextMenu:not([hasbeenopened = "true"]) {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #contentAreaContextMenu[hasbeenopened = "true"] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    #confirmation-hint {
        outline: 2px solid red;
        outline-offset: -2px !important;
    }
    #confirmation-hint {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #confirmation-hint[panelopen] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    #appMenu-popup {
        outline: 2px solid cyan;
        outline-offset: -2px !important;
    }
    #appMenu-popup {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #appMenu-popup[panelopen] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    #unified-extensions-panel {
        outline: 2px solid green;
        outline-offset: -2px !important;
    }
    #unified-extensions-panel {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #unified-extensions-panel[panelopen] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    /*funzt nur beim ersten mal nach Neustart*/
    #textbox-contextmenu {
        outline: 2px solid goldenrod;
        outline-offset: -2px !important;
    }
    #textbox-contextmenu:not([hasbeenopened = "true"]) {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #textbox-contextmenu[hasbeenopened = "true"] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    /*funzt nur beim ersten mal nach Neustart*/
    .textbox-contextmenu {
        outline: 2px solid firebrick;
        outline-offset: -2px !important;
    }
    .textbox-contextmenu:not([hasbeenopened = "true"]) {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    .textbox-contextmenu[hasbeenopened = "true"] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    #widget-overflow {
        outline: 2px solid purple;
        outline-offset: -2px !important;
    }
    #widget-overflow {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #widget-overflow[panelopen] {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*Submenus Tab, Context*/
    menu:not( menubar > menu) > menupopup:not(#usercssloader-menupopup) {
        outline: 2px solid teal;
        outline-offset: -2px !important;
    }
    menu:not( menubar > menu) > menupopup:not(#usercssloader-menupopup) {
        opacity: 0 !important;
        transform: translateX(var(--trans_x)) !important;
    }
    menu:not( menubar > menu)[open] > menupopup:not(#usercssloader-menupopup) {
        opacity: 1 !important;
        transform: translateX(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    :is(toolbarbutton, menubar > menu) > menupopup {
        outline: 2px solid black;
        outline-offset: -4px !important;
    }
    :is(toolbarbutton, menubar > menu) > menupopup {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    :is(toolbarbutton, menubar > menu)[open] > menupopup {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    /*--------------------------------*/
    #bookmarks-menu-button > menupopup  {
        outline: 2px solid magenta;
        outline-offset: -2px !important;
    }
    #bookmarks-menu-button > menupopup {
        opacity: 0 !important;
        transform: translateY(-100%) !important;
    }
    #bookmarks-menu-button[open] > menupopup {
        opacity: 1 !important;
        transform: translateY(0) !important;
        transition: transform 0.5s ease-in-out, opacity 0.5s ease-in-out !important;
    }
    Alles anzeigen
  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Mitleser
    • 5. Juli 2025 um 00:13

    BrokenHeart, ich habe dieses Script angepasst und sehe keine Probleme (Linux), auch nicht mit #bookmarks-menu-button oder #bookmarksMenuPopup (oder erkenne ich das Problem nicht?).

    Die Icons befinden sich in diesem Beitrag.

    Edit (05.07.25): doppelten EventListener gelöscht; funktioniert auch so.

    JavaScript
    // JavaScript Document
    // M_NumOfBookmfold+Bookm_lite.uc.js
    // FF 140
    
    // Fork of @BrokenHeart's code from https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1269879#post1269879
    
    // Das Script erstellt einen Zusatz zu Menüeinträgen in Bookmark-Ordner-Dropdowns.
    // Der Zusatz besteht aus der [Anzahl der beinhaltenden Ordner sowie aus der Anzahl der beinhaltenden Lesezeichen]. Als trennendes Element zwischen Ordner und Lesezeichen wird ein Ordnersymbol als Icon eingefügt.
    // Sollte kein Ordner sowie kein Lesezeichen vorhanden sein (der Ordner ist leer), erscheint ein Trashsymbol (als Aufforderung zur Löschung des leeren Ordners) und das Pfeil-Symbol(Twisty) wird ausgeblendet.
    
    (function() {
        if (!window.gBrowser)
            return;
    
    setTimeout(function() {
    	setFunction();
    },50);
    
    function setFunction() {
    const
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
           iconFold = '16SWfolder-10_moz.svg',
         iconFoldOv = '16SWfolder-12_moz.svg',
          iconTrash = '16_Trash-03_moz.svg',
       iconFillFold = '#b0b0b0',
     iconFillFoldOv = 'currentColor',
      iconFillTrash = '#f02228',
    iconFillTrashOv = 'currentColor',
            fontCol = '#b0b0b0',
          fontColOv = 'currentColor',
    
         iconPath = '/chrome/icons/',
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
    
         curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));//const end
    
    const css =`
    	.countClass {
    		justify-content: space-between !important;
    	}
    	.countClass::after {
            content: attr(data-value);
            color: ${fontCol};
    		padding-right: 3px;
    		background-image: url('${curProfDir}${iconPath}${iconFold}');
    		fill: ${iconFillFold};
    		background-repeat: no-repeat;
    		background-size: 13px 13px;
    		background-position: right 22px center;
    		margin-right: -17px !important;
    	}
    	menu:hover > .countClass::after {
    		color: ${fontColOv};
    		fill: ${iconFillFoldOv};
    	}
    	.countClass[data-value^='\xa0']::after {
    		background-image: none;
    	}
    	menu:hover > .countClass:not([data-value^='\xa0'])::after {
    		background-image: url('${curProfDir}${iconPath}${iconFoldOv}');
    	}
    	menu:has( > .countClass[data-value$='\xa0'][data-value^='\xa0'])::after {
        	fill-opacity: 1 !important;
    		background-image: url('${curProfDir}${iconPath}${iconTrash}') !important;
    		fill: ${iconFillTrash} !important;
    		height: 13px !important;
    		width: 13px !important;
    		scale: 1.07 !important;
    		margin-right: 11px !important;
    	}
    	menu:hover:has( > .countClass[data-value$='\xa0'][data-value^='\xa0'])::after {
        	fill: ${iconFillTrashOv} !important;
    	}
    	#bookmarksMenuPopup > menu > .countClass::after {
            background-position: right 29px center;
    		padding-right: 10px;
    	}
             `;
    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);
    //----
    const bmbMenu = document.getElementById('bookmarks-menu-button');
    const bookMenu = document.getElementById('bookmarksMenu');
    const persToolBar = document.getElementById('PersonalToolbar');
    
    	if(bmbMenu)
           bmbMenu.addEventListener('popupshown', onPopupShowing 
        );
    	if(bookMenu){
    		bookMenu.addEventListener('popupshown', onPopupShowing )
    	};
    	if(persToolBar){
    		persToolBar.addEventListener('popupshowing', onPopupShowing )
    	};
    };
    
    function onPopupShowing(aEvent) {
    
    const 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 label = item.childNodes[1]; //[1]links [3]rechts
                  label.classList.add('countClass');
    		  let menuDiv = '\xa0\xa0\xa0';
    			  if (menuCount == 0) {
    			    menuDiv = '\xa0\xa0';
    			    menuCount ='\xa0';
    			  }
    			  if (menuitemCount == 0) {
    			    menuitemCount ='\xa0';
    			  }
    			  if (menuCount > 0 && menuitemCount == 0) {
    				menuitemCount ='0';
    			  }
    			  if (menuCount > 0 && menuitemCount == '0') {
    				menuitemCount =  '\xa0‒';
    			  }
    		  let strCountOut = String(menuCount).padStart(2,'') + menuDiv + String(menuitemCount).padStart(2,'\xa0');
                  label.setAttribute('data-value', strCountOut);
                }, 1000);
            }
    }
    //----
    })();
    Alles anzeigen

Unterstütze uns!

Jährlich (2026)

59,3 %

59,3% (459,86 von 775 EUR)

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