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

  • Skript für Tamper- Violentmonkey gesucht

    • Mitleser
    • 7. Juni 2025 um 22:21

    Ich kann das nicht testen, aber der Anfang könnte so sein?

    JavaScript
    // ==UserScript==
    // @name         New Userscript
    // @namespace    http://tampermonkey.net/
    // @version      2025-06-07
    // @description  try to take over the world!
    // @author       You
    // @match        https:/fritz.box
    // @match        http:/fritz.box
    // @icon         none
    // @grant        none
    // ==/UserScript==
    (function() {
       'use strict';
    document.getElementById('uiEntryname-input').value = 'Spam';
    ...
    document.getElementById('uiNumbernew1-input').focus();
    ...
    })();
    Alles anzeigen

    Sonst muss sich wohl mal ein Profi damit beschäftigen...

  • Skript für Tamper- Violentmonkey gesucht

    • Mitleser
    • 7. Juni 2025 um 19:48
    Zitat von 2002Andreas

    ein Skript für folgende Funktion erstellen.

    Das geht nur, wenn der 'script erstellende' auch die gleiche Vers. deiner Box hat um mit den Entwicklertools darauf zugreifen zu können (Info der Vers. wäre gut); meine FB! ist einfach zu alt; leider kann ich deinen Wunsch nicht erfÜlen....

  • Unterschiedliche Versionen des Skriptes "Mehrzeilige Tableiste"

    • Mitleser
    • 7. Juni 2025 um 00:00

    Nun mach mal Schlusss...und handle Deine Agressionen...

  • Unterschiedliche Versionen des Skriptes "Mehrzeilige Tableiste"

    • Mitleser
    • 6. Juni 2025 um 22:36

    Meine Meinung:
    Die meisten Anpassungen der Bastler innerhalb einer js-Datei betreffen 'css'. Es spricht nichts dagegen, Dateien einfach nur mit dem gleiche Dateinamen aber unterschiedlichen Erweiterung zu bennenen! Der Bezug ist aufgrund des gleichen Dateinamens gegeben (die Dateien mit der Erweiterung .css/.js bleiben in ihren dafür vorgesehene Habitaten/Ordnern). Soweit-sogut, was aber wenn js direkt Einfluss auf css nimmt, z.B. durch Variablen (Beispiel hier)? Mein Fazit: es ist immer eine 'Fall zu Fall' Entscheidung.

  • Seitennavigation - Fly Out Menü

    • Mitleser
    • 2. Juni 2025 um 20:19
    Zitat von Horstmann

    Sieht prima aus auf meiner Seite, danke! :)

    Danke für die fundamentale Kritik!

  • Seitennavigation - Fly Out Menü

    • Mitleser
    • 2. Juni 2025 um 18:37

    Horstmann , die Idee deiner 'Toggle newtoolbar 7D' fand ich gut und habe diese jetzt endlich (nach einem Jahr) für mich umgesetzt und angepasst. Wenn du mal schauen mochtest:

    EDIT: Neue Version (mit zusätzlichem Feature: Mittelklick verschiebt die Tb an den gegenüberliegenden Fensterrand; Rechtsklick wieder zurück) am 06.06.25

    JavaScript
    // JavaScript Document
    // 00_VertToolbarWithButton_lite.uc.js
    // FF 139
    // Vers. 2
    
    // Quelle: https://www.....
    
    // Idee von @Horstmann: https://www.camp-firefox.de/forum/thema/137714-seitennavigation-fly-out-men%C3%BC/?postID=1246875#post1246875
    
    // Das Script erstellt eine vertikale Toolbar, die sich per Button ein/ausblenden lässt. Im eingeblendeten Zustand sind nur die Buttons sichtbar, beim Mouseover auf die B.'s werden die Labels aller B.'s 'ausgeklappt'. Die Verzögerungszeit vom Mouseover bis zum 'Ausklappzeitpunkt' der Labels kann konfiguriert werden [transition-delay]. Z.B so, dass die Labels der Buttons erst nach > 5.0s mouseover sichtbar sind - also eigentlich nie; oder nach < 0.5s - fast sofort. 
    // Die horizontale Position (oben/unten) ist prozentual einstellbar. Die TB ist in der in der Höhe flexibel (je nach Anzahl der Buttons).
    // Die vertikale Position der TB (links/rechts) beim Start (Linksklick) ist konfigurierbar. Mittelklick verschiebt die Tb an den gegenüberliegenden Fensterrand; Rechtsklick wieder zurück.
    // Das .svg-Icon des Buttons zum Ein/Ausblenden der Bar kann - je nach Hover-Zustand - mit zwei unterschiedlichen Farben gefüllt werden [fill/stroke]. Je nach vertikaler Pos. wird das TB-Button-Icon gespiegelt [scaleX] und als TB-links-Icon/TB-rechts-Icon verwendet. 
    // 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'.
    
    // ACHTUNG: Einige Systembuttons lassen sich in zusätzliche/eigene Tb's zwar noch verschieben, haben aber KEINE Funktion. Dazu gibt es einen Patch von @BrokenHeart:  https://www.camp-firefox.de/forum/thema/138875-fix-toolbar-buttons-reagieren-nicht-mehr-ab-ff-134/
    
    (function() {
      if (!window.gBrowser)
    	return;
    const
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
            id = 'vert_toolbar-button', // Id des neuen Buttons (wie in CSS: [#vert_toolbar-button])
          label = 'Vertikale Toolbar', // Bezeichnung des neuen Buttons
    tooltiptext = 'Vertikale Toolbar\n\nLinksklick: ein/aus\nMittelklick: links/rechts\nRechtsklick: rechts/links',
    // Icon-------------------------------------------------------
           icon = '16_ci-bar-right_moz.svg', // [Name.Dateiendung] des anzuzeigenden Symbols
       iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
      iconColOu = 'currentColor', // Farbe des Icons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOu keine Funktion)
      iconColOv = '#9aff9a', // Farbe des Icons beim Überfahren des Buttons (nur .svg-Datei mit [moz-context-properties], bei anderen Icons hat const iconColOv keine Funktion)
    // Toolbar---------------------------------------------------- 
    	 isPosV = 'R', 
    //   isPosV = 'R', für Toolbar am rechten Fensterrand;
    //   isPosV = 'L', für Toolbar am linken Fensterrand;  
    	 isPosH = '50%', 
    //   isPosH = '50%',  für Toolbar mittig zur Fensterhöhe;
    //   isPosH = '0%',   für Toolbar am oberen Fensterrand;
    //   isPosH = '100%', für Toolbar am unteren Fensterrand;  
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
     curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir)),
             cl = '.toolbarbutton-icon';
    //----         
    const swR =()=>{
    	switch (isPosV) {
    		case 'R':
    			right();
    			css(); 
    		break;
    		case 'L':
    			left();
    			css();
    		break;
    	}     
    };
    const swL =()=>{
    	switch (isPosV) {
    		case 'R':
    			left();
    			css();
    		break;
    		case 'L':
    			right();
    			css(); 
    		break;
    	}
    };    
    //----
    if (Services.prefs.getBoolPref('svg.context-properties.content.enabled') == false) {
    	Services.prefs.setBoolPref('svg.context-properties.content.enabled', true );
    }         
    //TOOLBAR
    const toolbar = document.createXULElement('toolbar');
          toolbar.id = 'vert_toolbar';
    	  toolbar.setAttribute('orient', 'vertical');
          toolbar.setAttribute('customizable', true);
    	  toolbar.setAttribute('mode', 'icons');
    	  toolbar.setAttribute('class','toolbar-primary chromeclass-toolbar browser-toolbar customization-target');
    	  toolbar.classList.toggle('button-off');
    	  
    const toolbox = document.createXULElement('toolbox');
          toolbox.setAttribute('id','vert_toolbox');
          toolbox.setAttribute('orient','horizontal');
    	  toolbox.appendChild(toolbar);
    
    document.getElementById('browser').parentNode.appendChild(toolbox);
    
    CustomizableUI.registerArea('vert_toolbar', {legacy: true});
    CustomizableUI.registerToolbarNode(toolbar);
    //BUTTON  
    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.stroke = iconColOu;
    //over
    button.addEventListener('mouseover', () => {
    		button.style.stroke = iconColOv;
    });
    //out
    button.addEventListener('mouseout', () => {
    		button.style.stroke = iconColOu;
    });
    //click
    button.addEventListener('click', () => {
    	if (event.button === 0) {
    		swR();
    		event.target.ownerGlobal.vert_toolbar.classList.toggle('button-off');
    	}
    	else
    	if (event.button === 1) {
    		swL();
    	}
    	else
    	if (event.button === 2) {
    		swR();
    	}
    });
    	}
    });
    //start
    swR();
    //links
    function left (){
    const vtButton = document.getElementById(id);
    	  vtButton.querySelector(cl).style.transform = 'scaleX(-1)';
    		isLeft = 'right';
    		isRight = 'left';
    };
    //rechts
    function right (){
    const vtButton = document.getElementById(id);
    	  vtButton.querySelector(cl).style.transform = 'scaleX(1)';
    		isLeft = 'left';
    		isRight = 'right';
    };
    //css
    function css (){
    var css =`
    	#vert_toolbar {
    /* ■■ START UserConfiguration TOOLBAR ■■■■■■■■■■■■■■■■■■■■■■■ Dark Theme */
    		--vt-toolbar-min-width: 32px; /*Leistenbreite bei mouseout*/
    		--vt-toolbar-max-width: 260px; /*Leistenbreite bei mouseover*/
    		--vt-delay_min_max-width: 1.5s; /*Verzögerung bei mouseover*/
    		--vt-row-height: 32px; /*Zeilenhöhe*/
    		--vt-bg-color: #3d3d3d; /*Leistenhintergrundfarbe*/
    		--vt-bg-color-hover: #57575766; /*Zeilenhintergrundfarbe bei mouseover*/
    		--vt-border-width: 0; /*Leistenrandbreite*/
    		--vt-border-radius: 4px; /*Leistenrandeckenhalbdurchmesser*/
    		--vt-border-color: purple; /*Leistenrandfarbe*/
    		--vt-customizing-bg-color: #3d3d3d; /*Leistenhintergrundfarbe im Anpassenfenster*/
    		--vt-customizing-border-color: #E9E9E9; /*Leistenrandfarbe im Anpassenfenster*/
    		--vt-toolbarbutton-inner-padding: 8px; /*Zentrierungsmöglichkeit des Buttonicons (wenn Buttonbreite < 32px => --vt-toolbarbutton-inner-padding < 8px) */
    /* ■■ END UserConfiguration TOOLBAR ■■■■■■■■■■■■■■■■■■■■■■■■■ */		
    	}
    	#vert_toolbox {
    		position: fixed;
    		display: flex;
    		top: ${isPosH};
    		transform: translateY(-${isPosH});
    		${isRight}: 0 !important;
    		${isLeft}: unset !important;
    		height: fit-content;
    		width: fit-content;
    		z-index: 2 !important;
    	}
    	
    	#vert_toolbar {
    		display: flex;
    		width: var(--vt-toolbar-min-width);
    		padding: 0;
    		background-color: var(--vt-bg-color) !important;
    		border: var(--vt-border-width) solid var(--vt-border-color) !important;
    		border-top-${isRight}-radius: 0 !important;
    		border-top-${isLeft}-radius: var(--vt-border-radius) !important;
    		border-bottom-${isRight}-radius: 0 !important;		
    		border-bottom-${isLeft}-radius: var(--vt-border-radius) !important;		
    		transition: width 0.5s ease-in-out 0.2s;
    	}
    
    	#vert_toolbar:not([customizing]):hover {
    		width: var(--vt-toolbar-max-width);
    		transition-delay: var(--vt-delay_min_max-width);
    	}
    
    	#vert_toolbar:not([customizing]).button-off {
    		display: none !important;
    	}
    
    	#vert_toolbar:not([customizing]) .toolbarbutton-1  {
    		justify-content: flex-start !important;
    		min-width: var(--vt-toolbar-min-width) !important;
    		height: var(--vt-row-height) !important;
    		min-height: var(--vt-row-height) !important;
    		max-height: var(--vt-row-height) !important;
    		overflow: hidden !important;
    		border: none !important;
    		box-shadow: none !important;
    		--toolbarbutton-inner-padding: var(--vt-toolbarbutton-inner-padding) !important;
    	 	--toolbarbutton-outer-padding: 0px !important;
    	 	--toolbarbutton-border-radius: 0px !important;
    	}
    	#vert_toolbar:not([customizing]) .toolbarbutton-1:hover {
    		background-color: var(--vt-bg-color-hover) !important;
    	}
    
    	#vert_toolbar:not([customizing]) .toolbarbutton-1:first-of-type {
    		border-top-${isRight}-radius: 0 !important;
    		border-top-${isLeft}-radius: var(--vt-border-radius) !important;
    	}
    	#vert_toolbar:not([customizing]) .toolbarbutton-1:last-of-type {
    		border-bottom-${isRight}-radius: 0 !important;
    		border-bottom-${isLeft}-radius: var(--vt-border-radius) !important;
    	}
    
    	#vert_toolbar:not([customizing]) .toolbarbutton-1 .toolbarbutton-text {
    		display: flex !important;
    		opacity: 0 !important;
    		transition: opacity 0.5s ease-in-out 0.18s !important;
    		text-overflow: ellipsis !important;
    		align-items: center !important;
    		padding: 0 !important;
    	 	border-radius: 0 !important;
    	}
    	#vert_toolbar:not([customizing]):hover .toolbarbutton-1 .toolbarbutton-text {
    		opacity: 1 !important;
    		transition: opacity 0.5s ease-in-out 0.2s !important;
    	}	
    
    	#vert_toolbar[customizing] {
    		min-width: 38px !important;
    		padding-bottom: var(--vt-row-height) !important;		
    		background: var(--vt-customizing-bg-color) !important;
    		border: 1px dashed var(--vt-customizing-border-color) !important;
    	}
    `;
    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);
    };
    //----
    })();
    Alles anzeigen

    Dateien

    16_ci-bar-right_moz.svg 1,29 kB – 16 Downloads
  • UndoListInTabmenuToo mit funktionierendem Tooltip

    • Mitleser
    • 31. Mai 2025 um 08:13
    Zitat von Speravir

    von Alice0775 zuletzt für Firefox 135 aktualisierte Version des Skriptes: UndoListInTabmenuToo.uc.js. Man muss dort die Zeile 145 ändern

    Läuft, Danke...

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

    • Mitleser
    • 27. Mai 2025 um 22:05

    Da an dem Script aus Link offensichtlich Interesse besteht, habe ich es für FF139 angepasst (Icons im verlinkten Beitr.):

    JavaScript
    // JavaScript Document
    // M_NumOfBookmfold+Bookm_light.uc.js
    // FF 139
    
    // 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;
    	}
             `;
    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('popupshowing', onPopupShowing )
    	};
    	if(bookMenu){
    		bookMenu.addEventListener('popupshowing', 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);
                }, 100);
            }
    }
    //----
    })();
    Alles anzeigen

    Bilder

    • Bildschirmfoto vom 2025-05-27 21-50-07.png
      • 15,04 kB
      • 325 × 170
  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Mitleser
    • 20. Mai 2025 um 22:34
    Zitat von Horstmann

    aber zumindest .menu-right gibt es wohl nicht mehr.

    Danke, das meine ich hier auch schon mal gelesen zu haben. Na ja, ist ja bisher nur der Twisty. Es gibt viel zu tun, warten wirs ab.

  • Meldungen über Spam im Forum

    • Mitleser
    • 20. Mai 2025 um 01:21

    Spam: RE: Menü "Einstellungen" erfordert neuerdings Passwort

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

    • Mitleser
    • 18. Mai 2025 um 20:57

    Geht denn das in FF 139?+:

    EDIT: Neue Version hier

    JavaScript
    // JavaScript Document
    // M_NumOfBookmfold+Bookm_light.uc.js
    
    // 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.
    // Die Anzeige für Ordner oder Bookmarks ist für maximal 2-stellige Werte ausgelegt.
    // 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}');
                 }
                 .countClass[data-value$='\xa0'][data-value^='\xa0'] ~ .menu-right image  {
                	fill-opacity: 1 !important;
    				list-style-image: url('${curProfDir}${iconPath}${iconTrash}');
    				fill: ${iconFillTrash};
    				height: 13px;
    				width: 13px;
    				scale: 1.07;
    				margin-right: 11px !important;
                 }
    menu:hover > .countClass[data-value$='\xa0'][data-value^='\xa0'] ~ .menu-right image  {
                	fill: ${iconFillTrashOv};
                 }
             `;
    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('popupshowing', onPopupShowing )
    	}
    	if(bookMenu){
    		bookMenu.addEventListener('popupshowing', 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);
                }, 100);
            }
    }
    //----
    })();
    Alles anzeigen

    Dateien

    icons.zip 1,96 kB – 42 Downloads
  • Youtube - wie Download ?

    • Mitleser
    • 17. Mai 2025 um 17:42
    Zitat von Mitleser

    Dieses Script (als Alternative) macht das ähnlich, allerdings mit einem Linksklick (Das Icon sowie die Funktion schaltet nur im aktiven Fenster) auch in 138+ :

    Zitat von Dato

    weil in Post #57 steht mit links klick.

    Dato , sorry war mein Fehler.

  • Beenden Button

    • Mitleser
    • 16. Mai 2025 um 19:28

    Oder so:

    JavaScript
    // JavaScript Document
    // M_Quit_Firefox.uc.js
    
    // 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 anzuzeigenden Symbols
       iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
      iconColOu = 'red',  // 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 = 'image',
          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.style.MozContextProperties = 'fill';
    	  menuitem.style.listStyleImage = 'url("' + curProfDir + iconPath + icon + '")';
    //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 – 27 Downloads
  • Youtube - wie Download ?

    • Mitleser
    • 15. Mai 2025 um 21:43
    Zitat von Dato

    ich finde da nix denn voher konnte ich mit 2 mal rechts klick in das video ... Speichern unter"

    Das funktioniert genau so, da hat sich nichts geändert.

  • Einbindung von Icons in Skripts

    • Mitleser
    • 14. Mai 2025 um 22:56

    Guten Abend Horstmann , wir im Norden würden jetzt sagen: 'Der Weizen wuchs zu nah an der Autobahn.' gN8

  • Einbindung von Icons in Skripts

    • Mitleser
    • 14. Mai 2025 um 22:30
    Zitat von Mira_Belle

    Sören Hentzschel Horstmann 2002Andreas milupo Mitleser .DeJaVu grisu2099 BrokenHeart Endor Dharkness und all die anderen.
    Sollte ich jemanden vergessen haben, dann bitte ich um Entschuldigung, es war keine böse Absicht.

    Nur so als Vorschlag.

    Hallo Mira_Belle, ich wundere mich, dass du mich in dieser illustren Aufzählung erwähnst, obwohl meine Scripte 'einfach programmiert' (aber damit auch 'relativ updatesicher') sind und lediglich Alternativen zu den hier schon seit Jahren genutzten (und gepflegten) S. darstellen. Ich werde den Kopf meiner Scripte NICHT ändern. Das kann der User machen und Quelle, Datum, Entwickler hinzufügen. Auch steht in meinen Scripten ein großer Bereich im Haeder zur Konfiguration durch den User zur Verfügung. Eine ausführliche Beschreibung am Anfang des S. ist selbstverständlich. Außerdem kann der User den Pfad zum Icon-Ordner innerhalb des 'chrome-Ordners' selbst festlegen. Wer den absoluten Pfad zum Icon bevorzugt, sollte wissen wie man das S. umschreibt. Oder alternativ einfach einen neuen Ordner innerhalb des 'chrome-Ordners' neu anlegen.
    (Wenn der absolute Pfad im Kommentar erklärt werden sollte, dann bitte für Win, Lin, Mac.)

    Akt. Beispiel-Scripte mit diesen Voraussetzungen:

    Spoiler anzeigen

    RE: Beenden Button

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

    RE: Div. Skripte funktionieren im aktuellem Nightly nicht mehr

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

    RE: Youtube - wie Download ?

  • Youtube - wie Download ?

    • Mitleser
    • 14. Mai 2025 um 00:40
    Zitat von Dato

    Das Script macht, das man mit rechter Maustaste Videos speichern kann von Youtube.

    Dieses Script (als Alternative) macht das ähnlich, allerdings mit einem Linksklick (Das Icon sowie die Funktion schaltet nur im aktiven Fenster) auch in 138+ :

    JavaScript
    // JavaScript Document
    // B_UserPrefMediaSource.uc.js
    
    // Das Script erstellt einen Button, der in about:config boolsche Werte ändert. In der UserConfiguration unter 'const boolPref' kann die zu ändernde Einstellung festgelegt werden. Das icon/label/tooltiptext kann in der UserConfiguration dem jeweiligen Zustand angepasst werden (true/false).
    // 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'.
    // In einem neuen Profil ist die Einstellung in about:config 'media.mediasource.enabled, true' gesetzt. Allerdings werden einige Menuitems im Mediendropdown nicht angezeigt z.B.:'Video speichern unter'. Dieses Script toggelt 'media.mediasource.enabled, true'/'media.mediasource.enabled, false'. Die Einstellung 'media.mediasource.enabled, false' könnte z.B.: auf 'youtube.com' interessant sein ( =>'Video speichern unter'). Bei Livestreams (z.b.: 'ardmediathek.de/live/') kann es bei der Einstellung 'media.mediasource.enabled, false' zu Fehlermeldungen der Seite (Wiedergabefehler) kommen. Beim Umschalten wird der Seiteninhalt des AKTIVEN Tabs neu geladen.
    
    (function() {
      if (!window.gBrowser)
    	return;
    const
    // ■■ START UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
              id = 'UserPref-msE-button', // Id des neuen Buttons
        boolPref = 'media.mediasource.enabled', // Einstellung in about:config deren boolesche Variable geschaltet werden soll (Wichtig: Beim Umschalten wird der Seiteninhalt des aktiven Tabs neu geladen)
          labelT = 'Mediendropdown ohne DL-Item (Live-TV)', // Bezeichnung des neuen Buttons bei boolPref=true
          labelF = 'Mediendropdown mit Dl-Item (Youtube)', // Bezeichnung des neuen Buttons bei boolPref=false
    tooltiptextT = 'Mediendropdown ohne DownloadItem (Livestream)',
    tooltiptextF = 'Mediendropdown mit DownloadItem (Youtube)',
    // Icon-------------------------------------------------------
           iconT = '16-control-panel-18_moz.svg',  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=true
           iconF = '16-control-panel-20_moz.svg',  // [Name.Dateiendung] des anzuzeigenden Symbols für boolPref=false
         bgImage = 'magenta', // Farbe des Indikators (zur Unterscheidung mehrerer UserPref-buttons,)
        iconPath = '/chrome/icons/', // Pfad zum Ordner der das Icon beinhaltet
      iconColorT = 'firebrick',  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=true, bei anderen Icons hat const iconColorT keine Funktion)
      iconColorF = 'forestgreen',  // Farbe des Icons (nur .svg-Datei mit [moz-context-properties] für boolPref=false, bei anderen Icons hat const iconColorF keine Funktion)
    // ■■ END UserConfiguration ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
      curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    //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,
     
        onCreated: (button) => {
    		button.style.MozContextProperties = 'fill, stroke, fill-opacity';
    //bgImage
    		button.style = 'background-image:linear-gradient('+bgImage+','+bgImage+'); background-repeat: no-repeat; background-size: 4px 4px; background-position: left 2px top calc(50% - 8px);';
    //start
    if (Services.prefs.getBoolPref(boolPref) == false ) {
    		button.style.fill = iconColorF;
    		button.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	button.setAttribute('label', labelF);
        	button.setAttribute('tooltiptext', tooltiptextF);
    }
    else
    if (Services.prefs.getBoolPref(boolPref) == true ) {
    		button.style.fill = iconColorT;
    		button.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	button.setAttribute('label', labelT);
        	button.setAttribute('tooltiptext', tooltiptextT);
    }
    //click
    button.addEventListener('click', () => {
    if (event.button == 0) {
      event.target.ownerGlobal.BrowserCommands.reloadSkipCache();
    	if (Services.prefs.getBoolPref(boolPref) == false ) {
    		button.style.fill = iconColorT;
    		Services.prefs.setBoolPref(boolPref, true);
    		button.style.listStyleImage = 'url("' + curProfDir + iconPath + iconT + '")';
        	button.setAttribute('label', labelT);
        	button.setAttribute('tooltiptext', tooltiptextT);
    	}
    	else
    	if (Services.prefs.getBoolPref(boolPref) == true ) {
    		button.style.fill = iconColorF;
    		Services.prefs.setBoolPref(boolPref, false);
    		button.style.listStyleImage = 'url("' + curProfDir + iconPath + iconF + '")';
        	button.setAttribute('label', labelF);
        	button.setAttribute('tooltiptext', tooltiptextF);
    	}
    }
    });
    //----
    	}
    });
    //----
    })();
    Alles anzeigen

    Dateien

    icons.zip 1,09 kB – 30 Downloads
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Mitleser
    • 9. Mai 2025 um 22:02

    Horstmann,

    Zitat von Horstmann

    Ich weiss immer noch nicht was das Script machen soll, also auch nicht wie ich es selber testen könnte.

    Trotz Beschreibung? Ich habe kein Interesse an dieser Art von Diskussion.

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

    • Mitleser
    • 9. Mai 2025 um 21:02
    Zitat von Horstmann

    Nicht bei mir, Problem #1, wie beschrieben. :/
    Erstes Fenster A schliessen, dann in Fenster B probieren.

    Zitat von Horstmann

    ist damit gleichzeitig auch dieses Problem gelöst? :/

    An Deinem Smily sehe ich, dass Du die Antwort schon kennst. Das war aber auch nicht das Thema in dieser Kommunikation.

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

    • Mitleser
    • 9. Mai 2025 um 18:39
    Zitat von Speravir

    Dadurch, dass man mit Hilfe des Skriptes eine Einstellung im Firefox ändert, die im gesamten Profil gültig ist, lässt sich letzteres meines Wissens nach nicht verhindern.

    Kleine Anmerkung:
    Das Script aus RE: userChrome.js Scripte für den Fuchs (Diskussion) funktioniert wie erwartet (Änderung der Animation sowie des Icons ausschließlich im aktiven Fenster).

Unterstütze uns!

Jährlich (2025)

65,5 %

65,5% (425,86 von 650 EUR)

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