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

Beiträge von Boersenfeger

  • Neue Version ExtraConfigMenu.uc.js; die Kosmetik stimmt nicht mehr

    • Boersenfeger
    • 1. April 2025 um 16:40

    Alte Version!

    Deine Einstellungen musst du dann wieder eintragen..

    CSS
    /*
    // ==UserScript==
    // @name           extras_config_menu.uc.js
    // @compatibility  Firefox 135*.*
    // @include        main
    // @version        1.0.20250112
    // @edit           @aborix 7/21 CSS Dateien als Untermenü eingefügt 
    // @edit           @2002Andreas 8/21 Shadow CSS Dateien als Untermenü + Ordner eingefügt
    // @edit 	   @BrokenHeart	1/25 Anpass. wg. Änderung der Sicherheitsrichtlinien bei 'inlineEvents'
    // ==/UserScript==
    */
    var uProfMenu = {
      // Beginn der Konfiguration
      // In der folgenden Zeile (11) den Pfad zum Texteditor eintragen (unter Ubuntu 10.04 z.B.: '/usr/bin/gedit'). Bei Fehleintrag wird view_source.editor.path ausgelesen:
      //TextOpenExe: 'C:\\Program Files (x86)\\Notepad++\\notepad++.exe',
      TextOpenExe: 'H:\\Notepad++\\notepad++.exe',
      // Falls gewuenscht, in Zeile 15 einen Dateimanager eintragen (komplett leer lassen fuer Dateimanager des Systems) Beispiele:
      // vFileManager: 'E:\\Total Commander\\Totalcmd.exe',
      // vFileManager: 'C:\\Program Files (x86)\\FreeCommander\\FreeCommander.exe'
      vFileManager: 'H:\\TotalCommander\\TOTALCMD64.exe',
      // In der folgenden Zeile (19) 'menu' eintragen, damit es unter "Extras" als Menue erscheint, sonst die id des gewuenschten
      // Elements *nach* dem der Button erscheinen soll (z.B. 'urlbar', 'searchbar', 'undoclosetab-button','abp-toolbarbutton')
      // Bitte nicht so etwas wie die Menue- oder Navigationsleiste (sondern einen Menuepunkt oder einen Button mit id auf diesen Leisten) eintragen:
      warpmenuto: 'back-Button',
      // Unter Linux sollte/kann versucht werden, die userChromeJS-Skripte zu sortieren, unter Windows ist das evtl. nicht noetig (die Sortierung wird Gross- und Kleinschreibung *nicht* beruecksichtigen - dazu wird die sort()-Funktion entsprechend mit einer Vergleichsfunktion aufgerufen)
      sortScripts: 0,   // 1 zum Erzwingen der Sortierung
      // Einbindung GM-Skripte-Ordner (0: nein, 1: Greasemonkey [Profil-Verzeichnis], 2: UserScriptLoader [Chrome-Verzeichnis], 3: Scriptish [Profil-Verzeichnis]):
      gmOrdner: 0,
      // Einbindung CSS-Ordner (0: nein, 1: UserCSSLoader-Ordner im Chrome-Verzeichnis):
      cssOrdner: 1,
      // In Zeile 30 gueltige about:Adressen eintragen, die ebenfalls aufgerufen werden sollen.
      // - Zum Ausblenden: abouts: [],
      // - Damit die about:-Seiten nicht als Untermenue, sondern direkt als Menuepunkte aufgefuehrt werden, muss das erste Element '0' sein:
      // abouts: ['0','about:about','about:addons','about:cache','about:config','about:support'],
      abouts: ['about:about','about:addons','about:cache','about:config','about:crashes','about:downloads','about:home','about:logins','about:memory','about:support','about:preferences','about:performance','about:profiles'],
      // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja):
      showNormalPrefs: 1,
      // Stellt "Skriptliste in Zwischenablage" zur Verfuegung (1: ja, 2: mit getrennter Nummerierung, 3: mit gemeinsamer Nummerierung) oder nicht (0):
      enableScriptsToClip: 1,
      // Um den Eintrag "Neustart" zu erzwingen (falls z.B. das andere Skript zu spaet eingebunden und nicht erkannt wird), auf 1 setzen:
      enableRestart: 0,
      // Ende der Konfiguration
    
      init: function() {
    	      if (location.href !== 'chrome://browser/content/browser.xhtml') return;
        if (this.warpmenuto.toLowerCase() == 'menu') {
          // aufgrund des gewaehlten warpmenuto als Untermenue von Extras anlegen
          var zielmenu = document.getElementById('menu_ToolsPopup');
          if (zielmenu==null) {
            userChrome.log("extras_config_menu.uc.js findet Zielmenue nicht, evtl. weil ein anderes Fenster als das Hauptfenster " +
                           "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " +
                           "von 'zielmenu' kontrollieren.");
           return
          }
          var menu = zielmenu.appendChild(this.createME("menu","Config Men\u00FC",0,0,"ExtraConfigMenu"));
          menu.setAttribute("class","menu-iconic");
          menu.setAttribute("ondblclick","openTrustedLinkIn('about:config', 'tab');");
         } else {
    		 
    	 // als verschiebbaren Button anlegen
          if (window.__SSi == "window0") {
            CustomizableUI.createWidget({
              id: "ExtraConfigMenu-button",
              defaultArea: CustomizableUI.AREA_NAVBAR,
              label: "Extra Config Menü",
              tooltiptext: "Extra Config Menü\nRechtsklick \öffnet about:config"
            });
    		
          }
          var menu = document.getElementById("ExtraConfigMenu-button");
          menu.setAttribute("type", "menu");
    	  menu.addEventListener('click', function(event) {
    			if (event.button == 2 && !this.open) { 
    				openTrustedLinkIn("about:config", "tab");
    				event.preventDefault();
    			};
    	 },true);
    	  
        }
    	
        //ab hier ist alles gleich, egal ob Button oder Menue
        var css = " \
          #ExtraConfigMenu, #ExtraConfigMenu-button { \
            list-style-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACnElEQVR4Xm2RzYtbZRSHn/fr3pvJzTB3qiNM2k2pMBUGhEHaqsUqdeFGQalCobgREaFu/B/cqCtxVSjoQhBEQRBmIfWDKgNGJUPt0Nhah9JJ4iSd5E6+bu5972tAO4SS5/DjXZ1znsMrNiq1eikMQqYYJCmjxNH5+zdW777L0J5KKl9VPmnf+ut9KWkwhbheuzNcOVYOmGKc5iRO0r1ykeXCx0h7kt4fC3z5wfqbQnAJwQHa5S7jAZSRuJ0mkf81cheobhBXZa+ri1uptQjHAZoZCEC1PiPgDuwxCfwerBU7b73zXn//3usCcdt4HkZ7SGZg431U51NUCgwlO3cV/bVXhR/6p9ut+nP9QYeNn7/n8qUPZxvQ/Q6VVWHk4ZqWRvlJjpx9hcGfW2wO95N2q8m3618A2WwDt/0RplSAXsBed57eyossHl5GYdHacG3zGpADM06wjQ1UUIN+CLHPvfAxojPnKLiE+bDE1R9+5GatAmgPeGCAteQ7l5GBhGSyuROyd/gFouUyWkqEErR2mwXAAA8BRS0AgMQBjSra30ZkEeDzz9Dn4ZcvMO51SMcJcTdGChmA0ABA6cAgzyG3I8jLEBylV4fWoaeIc0V7t0Uv7pFbC+CA+28mp/8+SwXKnMVmz1O9HpE+eobMZdjcoY1GIHD/NwIdoH1fBaNguzlg88pVyoUi4vTbFI8eJxsNAIfSkrliESllH/L0v0jktNNomFGv1TFrL3Fo9QSMR3jaEEXzLC09gjaKp595No0WjyCEB4zRclICUMDxtRMce/wJ1MIi2SglXShhfI/cOjxPoZRmbq4gXzt/gVrtBrdvbiG+Wf+p/mvll1BpiVAGhCDPxuAUDotz4HKHlIJON6bRbL4hhPjcMx5mkn8BBLEUrsVZbq0AAAAASUVORK5CYII=);  \
    		 margin-top: 0px !important; \);  \
    		 margin-top: 0px !important; \
    		 opacity: 1 !important;\
          } \
          #ExtraConfigMenu-button > dropmarker, #ExtraConfigMenu-button > hbox > .toolbarbutton-menu-dropmarker { \
            display: none !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.AGENT_SHEET);
    	menu.addEventListener('popupshowing', function(event) {
    			uProfMenu.getScripts(0);
    			uProfMenu.getCss(3);
    			uProfMenu.getCss(4);
    			uProfMenu.getCss(5);
    	 },true);
    	
        var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup"));
        // Anlegen von Untermenues fuer userChromeJS-Skripte und CSS-Dateien (befuellen spaeter)
        var submenu = menupopup.appendChild(this.createME("menu","Meine Scripte",0,0,"submenu-ucjs"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-items"));
        // var submenu = menupopup.appendChild(this.createME("menu","uc.xul",0,0,"submenu-ucxul"));
        // var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucxul-items"));
        var submenu = menupopup.appendChild(this.createME("menu","Meine CSS-Dateien",0,0,"submenu-css"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-css-items"));
        //var submenu = menupopup.appendChild(this.createME("menu","CSSShadow",0,0,"submenu-CSSShadow"));
        //var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-CSSShadow-items"));
        //var submenu = menupopup.appendChild(this.createME("menu","cssweb",0,0,"submenu-cssweb"));
        var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssweb-items"));
        if (this.enableScriptsToClip) menupopup.appendChild(this.createME("menuitem","Skriptliste in Zwischenablage","uProfMenu.getScripts(1)","uProfMenu_clipboard",0));
        // Ende Anlegen von Untermenues
        menupopup.appendChild(document.createXULElement('menuseparator'));
        // Einbindung von Konfigdateien
        //menupopup.appendChild(this.createME("menuitem","Bild Url","uProfMenu.edit(0,'Bild Url.css');","uProfMenu_edit",0));
        //menupopup.appendChild(this.createME("menuitem","config Einträge.css","uProfMenu.edit(0,'config Einträge.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChrome.css","uProfMenu.edit(0,'userChrome.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(0,'userChromeShadow.css');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(0,'userContent.css');","uProfMenu_edit",0));
        //menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(0,'userChrome.js');","uProfMenu_edit",0));
        //menupopup.appendChild(this.createME("menuitem","prefs.js","uProfMenu.edit(1,'prefs.js');","uProfMenu_edit",0));
        menupopup.appendChild(this.createME("menuitem","user.js","uProfMenu.edit(1,'user.js');","uProfMenu_edit"),0);
    
        // Ende Einbindung von Konfigdateien
        menupopup.appendChild(document.createXULElement('menuseparator'));
        // Einbindung von Ordnern
        switch (this.gmOrdner) {
          case 1:
            menupopup.appendChild(this.createME("menuitem","GM-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0);
            break;
          case 2:
            menupopup.appendChild(this.createME("menuitem","USL-skripty","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0);
            break;
          case 3:
            menupopup.appendChild(this.createME("menuitem","Skripty Scriptish","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0);
            break;
        }
    
        menupopup.appendChild(this.createME("menuitem","CSS-Ordner ","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","uProfMenu_folder"),0);
        //menupopup.appendChild(this.createME("menuitem","CSSShadow-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSShadow');","uProfMenu_folder"),0);
        //menupopup.appendChild(this.createME("menuitem","CSSWeb-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Chromeordner","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","uProfMenu_folder"),0);
        //menupopup.appendChild(this.createME("menuitem","Icons-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Icons');","uProfMenu_folder"),0);
        //menupopup.appendChild(this.createME("menuitem","Installationsordner","uProfMenu.prefDirOpen('CurProcD');","uProfMenu_folder"),0);
        //menupopup.appendChild(this.createME("menuitem","Addonordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');","uProfMenu_folder"),0);
        menupopup.appendChild(this.createME("menuitem","Startup-Cacheordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfLD')+uProfMenu.getDirSep()+'startupCache');","uProfMenu_folder"),0);
      /*   menupopup.appendChild(this.createME("menuitem","Ordner about","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'about');","uProfMenu_folder"),0); */
        // Ende Einbindung von Ordnern
    	
        // Einbindung von abouts
        if (this.abouts.length>0) {
          menupopup.appendChild(document.createXULElement('menuseparator'));
          // falls der erste Eintrag des Arrays = '0' ist, dann kein Untermenue anlegen, sondern direkt als Menuepunkte einbinden
          if (this.abouts[0]=='0') {
            for (var i = 1; i < this.abouts.length; i++) {
            menupopup.appendChild(this.createME("menuitem",this.abouts[i],"openTrustedLinkIn('"+this.abouts[i]+"','tab')","uProfMenu_about"),0);
            }
           } else {
            // der erste Eintrag des arrays ist ungleich '0', deshalb als Untermenue einrichten
            var submenu = menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-about"));
            var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-about-items"));
            this.fillMenu("submenu-about","submenu-about-items", "about:",this.abouts,"uProfMenu_about",1);
          }
        }
        // Ende Einbindung von abouts
        // Separator, falls dieser nicht schon durch abouts generiert wurde und weitere Menuepunkte folgen werden
        if (this.abouts.length==0 && (this.showNormalPrefs || typeof(ToolRstartMod) != "undefined")) menupopup.appendChild(document.createXULElement('menuseparator'));
        // Falls gewuenscht (s. Konfigurationsabschnitt), Zugriff auf die normalen Einstellungen
        if (this.showNormalPrefs) menupopup.appendChild(this.createME("menuitem","Einstellungen","try{openOptionsDialog();}catch(e){openPreferences();}","uProfMenu_prefs"),0);
        // Falls addRestartButton installiert ist, Neustart zur Verfuegung stellen (addRestartButton 1.0.20120105mod erforderlich)
        if(this.enableRestart) menupopup.appendChild(this.createME("menuitem","Neustart",
        "Services.appinfo.invalidateCachesOnRestart(); Services.startup.quit(Ci.nsIAppStartup.eRestart | Ci.nsIAppStartup.eAttemptQuit,0);"));
        },
    
      getDirSep:function() {
        // Betriebssystem nach https://developer.mozilla.org/en/Code_snippets/Miscellaneous ermitteln
        var osString = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime).OS;
        var dirsep = "/";
        switch(osString) {
          case "WINNT":
            dirsep = "\\";
            break;
          case "Linux":
            dirsep = "/";
            break;
          case "Darwin":
            dirsep = "/";
            break;
        }
        return dirsep;
      },
    
      edit:function(OpenMode,Filename){
        var Path = "";
        var dSep = this.getDirSep();  // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen
        switch (OpenMode){
          //Current is Chrome Directory
          case 0:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename;
            break;
          //Current is Profile Directory
          case 1:
            var Path = this.getPrefDirectoryPath("ProfD") + dSep + Filename;
            break;
          //Current is Root
          case 2:
            var Path = Filename;
            break;
          //Current is CSS folder
          case 3:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSS" + dSep + Filename;
            break;
          //Current is CSSWeb folder
          case 4:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSWeb" + dSep + Filename;
            break;
    		//Current is CSSShadow folder
          case 5:
            var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename;
            break;
        }
        this.launch(this.TextOpenExe,Path);
      },
    
      dirOpen:function(Path){
        if (this.vFileManager.length != 0) {
          var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
          var process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess);
          var args = [Path];
          file.initWithPath(this.vFileManager);
          process.init(file);
          // Verzeichnis mit anderem Dateimanager oeffnen
          process.run(false, args, args.length);
         } else {
          // Verzeichnis mit Dateimanager des Systems oeffnen
          var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile);
          dir.initWithPath(Path);
          dir.launch();
        }
      },
    
      prefDirOpen:function(prefDir){
        Path = this.getPrefDirectoryPath(prefDir);
        this.dirOpen(Path);
      },
    
      getPrefDirectoryPath:function(str){
        // get profile directory
        var file = Components.classes["@mozilla.org/file/directory_service;1"]
          .getService(Components.interfaces.nsIProperties)
          .get(str, Components.interfaces.nsIFile);
        if (str == 'CurProcD') {
          file = file.parent;
        };
        return file.path;
      },
    
      launch:function(RanPath,OpenPath){
        var file = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsIFile);
        var proc = Components.classes["@mozilla.org/process/util;1"].createInstance(Components.interfaces.nsIProcess);
        var args = [OpenPath];
        file.initWithPath(RanPath);
        // falls der im Konfigurationsabschnitt definierte Editor nicht gefunden wird, auf Einstellung in about:config ausweichen:
        if (!file.exists()) {
          var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
          RanPath = pref.getCharPref("view_source.editor.path");
          file.initWithPath(RanPath);
        }
        proc.init(file);
        proc.run(false, args, args.length);
      },
    
      stringComparison:function(a, b){
        a = a.toLowerCase();
        a = a.replace(/ä/g,"a");
        a = a.replace(/ö/g,"o");
        a = a.replace(/ü/g,"u");
        a = a.replace(/ß/g,"s");
        b = b.toLowerCase();
        b = b.replace(/ä/g,"a");
        b = b.replace(/ö/g,"o");
        b = b.replace(/ü/g,"u");
        b = b.replace(/ß/g,"s");
        return(a==b)?0:(a>b)?1:-1;
      },
    
      getScripts:function(iType) {
        // Arrays (jeweils ein Array fuer uc.js und uc.xul) nehmen Namen der gefundenen Skripte auf
        let ucJsScripts = [];
        let ucXulScripts = [];
        // Suchmuster, also die Dateierweiterungen uc.js und uc.xul
        let extjs = /\.uc\.js$/i;
        //let extxul = /\.uc\.xul$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path);
        // files mit Eintraegen im Chrome-Ordner befuellen
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          // keine gewuenschte Datei, deshalb continue
          //if (!extjs.test(file.leafName) && !extxul.test(file.leafName)) continue;
          // uc.js gefunden -> im Array ablegen
          if (extjs.test(file.leafName)) ucJsScripts.push(file.leafName);
          // uc.xul gefunden -> im Array ablegen
          //if (extxul.test(file.leafName)) ucXulScripts.push(file.leafName);
        }
        if (this.sortScripts) {
          ucJsScripts.sort(this.stringComparison);
          //ucXulScripts.sort(this.stringComparison);
        }
        // Aufruf der naechsten Methoden um die beiden Untermenues oder die Zwischenablage zu befuellen
        if (iType==0) {
          this.fillMenu("submenu-ucjs","submenu-ucjs-items", "Meine Scripte",ucJsScripts,"uProfMenu_ucjs",0);
          //this.fillMenu("submenu-ucxul","submenu-ucxul-items", "uc.xul",ucXulScripts,"uProfMenu_ucxul",0);
         } else {
          var result = this.fillClipboardValue(ucJsScripts,ucXulScripts);
          Components.classes["@mozilla.org/widget/clipboardhelper;1"].getService(Components.interfaces.nsIClipboardHelper).copyString(result);
        }
      },
    
      getCss:function(iType) {
        // Array nimmt Namen der gefundenen css-Dateien auf
        let cssFiles = [];
        // Suchmuster, also die Dateierweiterung css
        let extcss = /\.css$/i;
        let aFolder = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
        if (iType==3) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSS");
         } else if (iType==4) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSWeb");
        }  else if (iType==5) {
          aFolder.initWithPath(Services.dirsvc.get("UChrm", Ci.nsIFile).path+this.getDirSep()+"CSSShadow");
        }
        // files mit Eintraegen im CSS- bzw. CSSWeb-Ordner befuellen
        let files = aFolder.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator);
        // Ordner bzw. files durchlaufen und kontrollieren, ob gesuchte Dateien dabei sind
        while (files.hasMoreElements()) {
          let file = files.getNext().QueryInterface(Ci.nsIFile);
          // css gefunden -> im Array ablegen
          if (extcss.test(file.leafName)) cssFiles.push(file.leafName);
        }
        if (this.sortScripts) {
          cssFiles.sort(this.stringComparison);
        }
        // Untermenue befuellen
        if (iType==3) {
          this.fillMenu("submenu-css","submenu-css-items","Meine CSS-Dateien",cssFiles,"uProfMenu_css",3);
         } else if (iType==4) {
          this.fillMenu("submenu-cssweb","submenu-cssweb-items","Meine CSSWeb-Dateien",cssFiles,"uProfMenu_css",4);
        }  else if (iType==5) {
          this.fillMenu("submenu-CSSShadow","submenu-CSSShadow-items","Meine CSSShadow-Dateien",cssFiles,"uProfMenu_css",5);
        }
      },
    
      fillMenu:function(whichsubmenu, whichsubmenuitems, strlabel, scriptArray,sClass,sTyp) {
        // Beschriftung des Untermenues mit Anzahl der gefundenen Dateien ergaenzen
        var e = document.getElementById(whichsubmenu);
        e.setAttribute('label',strlabel + ' (' + scriptArray.length + ')');
        var popup = document.getElementById(whichsubmenuitems);
        // zunaechst Untermenue zuruecksetzen
        while(popup.hasChildNodes()){
          popup.removeChild(popup.firstChild);
        }
        // Untermenue endlich befuellen
        for (var i = scriptArray.length-1; i > -1; i--) {
          // Typunterscheidung (userChromeJS-Skript oder about: oder css)
          if (sTyp==0){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(0,'"+scriptArray[i]+"')",sClass,0);
    		mitem.addEventListener('click', function(event) {
    			uProfMenu.openAtGithub(event,'"+scriptArray[i]+"');
    			event.preventDefault();
    		},true);
    		
            mitem.setAttribute("tooltiptext"," Linksklick: Bearbeiten,\n Mittelklick: https://github.com/.../"+this.cleanFileName(scriptArray[i])+" oeffnen,\n Rechtsklick: Suche auf GitHub");
           } else if (sTyp==1){
            var mitem = this.createME("menuitem",scriptArray[i],"openTrustedLinkIn('"+scriptArray[i]+"','tab')",sClass,0);
           } else if (sTyp==3){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(3,'"+scriptArray[i]+"')",sClass,0);
           } else if (sTyp==4){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(4,'"+scriptArray[i]+"')",sClass,0);
          }
    	  else if (sTyp==5){
            var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(5,'"+scriptArray[i]+"')",sClass,0);
          }
          popup.insertBefore(mitem, popup.firstChild);
        }
      },
    
      fillClipboardValue:function(sArray,xArray) {
        var retValue;
        var s = 0;
        var x = 0;
        s = sArray.length;
        x = xArray.length;
        switch(this.enableScriptsToClip) {
          case 1:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------\n"+sArray.join("\n")+
                       "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------\n"+xArray.join("\n");
            break;
          default:
            retValue = "userChromeJS/uc.js ("+s+"):\n------------------------";
            for (var i = 0; i < s ; i++) {
              j = i + 1;
              retValue = retValue + "\n" + j + ". " + sArray[i];
            }
            retValue = retValue + "\n\nuserChromeJS/uc.xul ("+x+"):\n-------------------------";
            if (this.enableScriptsToClip==2) s = 0;
            for (var i = 0; i < x ; i++) {
              j = i + s + 1;
              retValue = retValue + "\n" + j + ". " + xArray[i];
            }
            break;
        }
        return retValue;
      },
    
      createME:function(sTyp,sLabel,sCommand,sClass,sId) {
        // Anlegen von menuitem, menu oder menupop - fuer bestimmte Typen nicht eingesetzte Parameter werden als 0 uebergeben
        const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
        var m = document.createElementNS(XUL_NS, sTyp);
        switch (sTyp) {
          case "menuitem":
            // this.createME("menuitem","Label des Items","ZuzuweisenderCodeFueroncommand","GewuenschteKlasseDesItems",0)
            m.setAttribute('label', sLabel);
            m.setAttribute('class',sClass);
    		m.addEventListener('command', function(event) {
    			Function(sCommand)();
    		}, true);
    		
            break;
          case "menu":
            // this.createME("menu","Label des Menues",0,0,"GewuenschteIdDesMenues")
            m.setAttribute('label', sLabel);
            m.setAttribute('id', sId);
            break;
          case "menupopup":
            //this.createME("menupopup",0,0,0,"GewuenschteIdDesMenupopups");
            m.setAttribute('id', sId);
            break;
        }
        return m;
      },
    
      openAtGithub:function(e,sScript) {
        if (e.button==1){
          // Mittelklick - Seite auf GitHub oeffnen (funktioniert nur, wenn Ordner- und bereinigter Dateiname [ohne Erweiterung] uebereinstimmen):
          var sUrl = "https://github.com/ardiman/userChrome.js/tree/master/"+this.cleanFileName(sScript);
          openWebLinkIn(sUrl, 'tab');
        }
        if (e.button==2){
          // Rechtsklick - Suche auf GitHub starten (funktioniert nur, wenn der Dateiname im Code hinterlegt ist):
          e.preventDefault();
          var sUrl = "https://github.com/search?langOverride=&language=&q="+sScript+"&repo=&start_value=1&type=Code";
          openWebLinkIn(sUrl, 'tab');
        }
      },
    
      cleanFileName:function(sName) {
        sName = sName.toLowerCase();
        /* Das folgende Array enthaelt regulaere Ausdruecke, um ungueltige Zeichenfolgen entfernen:
        /Datei-Erweiterungen am Ende/, /"ucjs_" am Anfang/, /"_"gefolgtVonZahlUndDanachBeliebigenZeichen/
        / "_fx"gefolgtVonZahl(en)/, /"-" oder "+" oder "."/, /"_v"gefolgtVonZahlen
        */
        var regs = [/\.uc\.js$/,/\.uc\.xul$/,/^ucjs_/,/_\d.+/,/_fx\d+/,/[-+\.]/g,/_v\d+/];
        for (var i = 0; i < regs.length; i++) {
          sName = sName.replace(regs[i],"");
        }
        return sName;
      }
    
    };
    
    uProfMenu.init();
    Alles anzeigen
  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 1. April 2025 um 16:36

    Ihr habt recht, nun ist es fast gut...

    Damit wäre ich zufrieden.

    Horstmann Was könnte man denn im Tab CSS verbessern? ;)

  • AddBookmark here Script arbeitet nicht in Nightly

    • Boersenfeger
    • 1. April 2025 um 16:27

    Der Sinn und Zweck des Script war, das man einen Ordner seiner Lesezeichen ansteuern kann und das Lesezeichen genau dort ablegt. Das ich ein Lesezeichen in dem Lesezeichenordner abspeichern kann, ist klar.

    Das Amsteuern funktioniert nur wird das Lesezeichen mit deinem und auch mit den anderen Scriptvariationen im Ordner Lesezeichen-Menü als letzter Eintrag abgespeichert.

  • In der Menüzeile die Abstände der Einträge verringern

    • Boersenfeger
    • 1. April 2025 um 16:25

    Nee, das soll schon mittig sein...

    Danke grisu2099


    Ich bin so zufrieden

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 1. April 2025 um 16:20

    Nee bleibt er nicht, mit deinem Code sieht es so aus:

    Keine grüne Ecke und der Aktive Tab ist nicht rot nur Fettschrift.

  • In der Menüzeile die Abstände der Einträge verringern

    • Boersenfeger
    • 1. April 2025 um 16:17

    Volltreffer! :)

    Danke! :thumbup:

  • In der Menüzeile die Abstände der Einträge verringern

    • Boersenfeger
    • 1. April 2025 um 16:09

    Seit heute sind im Nightly 139 die Abstände der Menüeinträge größer als vorher. Ich verwende nachstehenden CSS. Kann dieser entsprechend geändert oder angepasst werden?

    CSS
    /* Menüzeile fett */
    
       #file-menu, #edit-menu, #view-menu, #bookmarksMenu, #tools-menu, #helpMenu{
       font-weight:bold!important;    
       font-size:20px!important; 
       color:white!important;
       }
       
       #file-menu:hover, #edit-menu:hover, #view-menu:hover, #bookmarksMenu:hover, #tools-menu:hover, #helpMenu:hover{
       font-weight:bold!important;    
       font-size:20px!important; 
       color:red!important;
       }
       
        
    /* Lupe und Text im Suchfeld ausblenden */
    
        .searchbar-search-button{
        display:none!important;
        }
    
       #search-container input::placeholder{
       color: transparent!important;
        }
           
    
    
    /* Chronik aus Menueleiste ausblenden */
    
        menu#history-menu{
        display: none! important;
    	}
    	
    	#profiles-menu {
        display: none !important;
        }
    
    /**********************************************************
     ********** Vollbildmodus *********************************
     **********************************************************/
    
    /* Damit die Rückkehr aus dem Vollbildmodus mit der Maus klappt:
     * Bei 0 bleiben die URL-Leiste und die Tab-Leiste immer sichtbar,
     * je größer der negative Wert, desto mehr verschwindet aus dem sichtbaren
     * Bereich, ein Pixel muß für den Mauskontakt am oberen Rand immer sichtbar
     * bleiben. Den Wert an die Leistenhöhe anpassen!
     */
    
    
    	#main-window[inFullscreen="true"] #navigator-toolbox{		
    	margin-top: -80px !important;
    	}
    	
    /* Bei Mauskontakt des noch sichtbaren Pixels die Leisten wieder einblenden */
    
    	#main-window[inFullscreen="true"] #navigator-toolbox:hover{
    	margin-top: 0 !important;
    	}
    
    /* Etwas schnellere Animation beim ein- und ausblenden, normal ist 1.5s */
    
    	#navigator-toolbox{
    	transition: 0.5s !important;
    	}
    Alles anzeigen
  • AddBookmark here Script arbeitet nicht in Nightly

    • Boersenfeger
    • 1. April 2025 um 15:59

    Nein, funktioniert hier leider nicht im mittlerweile Nightly 139

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 1. April 2025 um 15:57

    Danke, aber dann lasse ich den Code lieber so, wie er ist. Mir ist schon wichtig, dass der aktuelle Tab rot ist. Wenn Ungelesene nicht abgerundet werden können, ist das zwar unschön, aber dann wohl nicht zu ändern.

    Der Link auf die technische Seite hilft mir nicht weiter, da ich daraus keine Lösung ziehen kann. Bin absolut kein Coder! 8o

  • Firefox 138: Link-Vorschau mit lokaler KI-Zusammenfassung

    • Boersenfeger
    • 1. April 2025 um 15:24

    .. der Teufel ist immer noch unterwegs..

    beinaltet

  • zwei Firefox versionen parallel

    • Boersenfeger
    • 31. März 2025 um 18:17

    Da rennst du bei mir offene Türen ein.. ;)

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 31. März 2025 um 17:38

    Richtig! Die Frage ist ja, wie Skript und Code so zusammengeschrieben werden, das alle Tabs abgerundet sind und die grüne Ecke in ungelesenen ebenfalls zu sehen ist.

  • zwei Firefox versionen parallel

    • Boersenfeger
    • 31. März 2025 um 17:37

    Wobei zu bedenken ist, das auch Windows 10 ab Herbst nicht mehr unterstützt wird.

  • Mehrzeilige Tableiste + ungelesene Tabs farbig

    • Boersenfeger
    • 31. März 2025 um 17:36

    Ja, das hatte Sö:)ren bereits berichtet. Aber auch nachdem ich diese Zeile entfernt habe, tat sich dann ein neues Problem auf. Guckst du in diesen Thread :)

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 31. März 2025 um 17:33

    Das war vorher auch schon so, es sollen aber aller Tabs so abgerundet sein. Guckst du oben in Beitrag 1.

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 31. März 2025 um 17:24

    Vielen Dank fürs Verschieben 2002Andreas

    Zur Erklärung: In diesem Thread wurde der Vorschlag eingebracht, dass man die nicht gelesenen Tabs mit einer grünen Ecke auf Basis eines Scripts ausstatten kann. Daraus ergab sich dann die obige Frage. Kann da jemand beides zusammenfrickeln? :)

    Edit: Nee das ergibt keine Änderung!


    CSS
        /* Tabs rund und farbig */
    
        /* Angaben für die TAB-Leiste */
    
        /* TAB bei bei angewähltem TAB (aktiv): */
        /* Hintergrundfarbe, Rahmen,*/
        /* Schriftfarbe. */
     
     /*  .tabbrowser-tab:is([visuallyselected], [multiselected]) > .tab-stack > .tab-background {
        background: red !important;
        border-radius: 18px !important;
        margin-top: 2px !important;  
        border: none !important;
        color: black ! important; 
        margin-bottom: 0 !important;
        }
        
    	.tab-background {
        outline: none !important;
        }  */
    
        /* Schliessen-Button nur wenn angewählt */
    
        tab:not([selected]) .tab-close-button {
    	display: none !important; 
        }
    
        /* Schriftgröße Tabs */
    
        .tab-text {
        font-size: 18px !important;
        }
    
        /* Damit wird der Tabtext am Ende schleichend ausgeblendet */
    
        .tab-label-container[textoverflow][labeldirection=ltr]:not([pinned]),
        .tab-label-container[textoverflow]:not([labeldirection]):not([pinned]):-locale-dir(ltr) {
        direction: ltr;
        mask-image: linear-gradient(to left, transparent, black 1em) !important; 
        }
        
        /* Doppelte Schliessung ausblenden */
    
        #TabsToolbar > .titlebar-buttonbox-container {
        display:none !important; 
        }
    
        .tabbrowser-tab[visuallyselected] .tab-label {
        font-weight:  bold !important;
        }
    
        #TabsToolbar .tabbrowser-tab:not([selected]) {
        border-radius: 16px !important;
        height: 22px ! important;
        margin-top: 5px !important;
        padding: 0 !important;
        color: black ! important; 
        }
        
        /* Tab-Icon etwas größer,
        * links weniger, unten etwas mehr Abstand zum TAB-Rand */
    	
        #TabsToolbar .tab-icon-image {
        height: 20px !important;
        width:  20px !important;
        margin-left: -2px !important;    
        margin-bottom: 2px !important;
        }
        
        /* Tab-Schließen-Button:
        * Rechts weniger Abstand zum TAB-Rand, etwas größer,
        * Textfarbe (Kreuz)
        * Hintergrundfarbe, an den Eckenradius des Buttons angepasst */
     
        #TabsToolbar .tab-close-button {
        margin-right: -6px !important; 
        font-weight: bold !important;    
        color: black !important; 
        }
    
        #TabsToolbar .tab-close-button .toolbarbutton-icon {
        height: 6px !important;
        width:  6px !important;    
        background-color: red !important;
        border-radius: 12px !important;
        }
        
        /* Aktiver Tab breiter */
        
        .tabbrowser-tab:not([pinned]):not([selected]) {
        min-width: 185px !important;
    	min-height: 30px !important;
    	max-height: 40px !important;
        flex-grow: 0 !important;
        }
    	
        .tabbrowser-tab:not([pinned])[selected] {
        min-width: 200px !important;
    	min-height: 30px !important;
    	max-height: 40px !important;
        flex-grow: 0 !important;
        }
    
    	/* Lautsprechersymbol größer und ohne Hintergrund */
    	
    	.tab-audio-button[soundplaying] {
    	--button-icon-fill: blue !important;
    	scale: 1.8 !important;  
    	border: none !important;
    	--button-background-color-ghost-hover: transparent !important;
    	}
    	
    	/* Lautsprechersymbol blauviolett bei Sound */
    	
    	[soundplaying] {
    		fill: blueviolet !important;
    	}
      
    	/* Lautsprechersymbol gelb bei stumm */
    		
    	.tab-audio-button[muted] {
    	--button-icon-fill: yellow !important;
    	scale: 1.8 !important;  
    	border: none !important;
    	--button-background-color-ghost-hover: transparent !important;
    	}
    
    		
        /* Tab Beschriftung mittig */
        
        .tab-content {
        display: flex !important; 
        margin-top: -1px !important;
        justify-content: center !important;
        align-items: center !important;
        }
        
        #TabsToolbar .tabbrowser-tab[selected] .tab-content {
        margin-top: 2px !important;
        }
    
    	.tabbrowser-tab {
    	min-height: 40px !important;
    	max-height: 40px !important;
    	}
    
        .tab-label-container {
        margin: auto !important;
        }
    
        .tabbrowser-tab > .tab-stack > .tab-content > .tab-close-button {
        padding: 0  !important; 
        width: 17px !important;
    	height: 17px !important;
        }
    
        #TabsToolbar .toolbarbutton-1 {
        min-height: 34px !important;    
        margin-top: 2px !important;    
        margin-bottom: 2px !important;
        } 
        
        #TabsToolbar .tabbrowser-tab:not([selected])  {
        min-height: 34px !important;
        border: 1px solid #B2B2B2 !important;
        } 
    
        #TabsToolbar .toolbarbutton-1 > image {
        padding: 2px 4px !important;
        } 
    
        /* Rahmen um die Tableiste durchsichtig */
    
        #TabsToolbar {
        border: 0.2px solid transparent !important;
        }
         
        #TabsToolbar:hover {
        border: 0.2px solid transparent !important;
        }
    
    	/* Fortschrittsanzeige für das Laden der Seite */
    
    	.tabbrowser-tab:not([usercontextid]) > .tab-stack > .tab-background > .tab-context-line {
        opacity: 0;
        background-color: #00ff00;
        height: 6px;
    	margin-inline: 8px;
        margin-top: 2px;
    	border-radius: 90px;
    	}
    	.tabbrowser-tab:is([busy], [progress]) > .tab-stack > .tab-background > .tab-context-line {
        opacity: 1;
        transform-origin: left center;
        animation: 2s ease-in-out scale;
    	}
    	.tabbrowser-tab[bursting] > .tab-stack > .tab-background > .tab-context-line {
        transition: opacity 2s ease-out;
    	}
    	@keyframes scale {
        0% {transform: scaleX(0);}
        100% {transform: scaleX(1);}
    	}
    
    	/* Tab Pluszeichen einfärben*/
    	
    	#tabs-newtab-button {
        color: red !important;
    	font-size: 100px !important;
    	font-weight: bold !important;
    	
        }
    	
    	/* Tabs mittig */
    
    	#tabbrowser-tabs:not([overflow], [orient="vertical"]) .tabbrowser-tab:nth-child(1 of :not([pinned], [hidden])) {
        margin-left: auto !important;
    	}
    	#tabbrowser-tabs:not([overflow], [orient="vertical"]) #tabbrowser-arrowscrollbox-periphery {
        margin-right: auto !important;
    	
    	}
    Alles anzeigen

    Hier mal der ganze CSS, der sich mit den Tabs beschäftigt, der entsprechende Teil Zeile 9 bis 20 ist ausdokumentiert.

  • Violent Monkey Script "Remove Adblock Thing" entfernt in der neuen Version 5.6 die Grössenansicht im Menü

    • Boersenfeger
    • 31. März 2025 um 17:20

    Habe jetzt Version 5.8 getestet und das funktioniert für mich! :)

  • Wie kann ich das Script und den CSS zusammenbringen?

    • Boersenfeger
    • 31. März 2025 um 16:08

    :):thumbup:

    Jetzt klappt es, Danke!

    Ich habe die Tabs in einem CSS angepasst, sie sind rund; mit Einsatz des Scripts sind allerdings die nicht gelesenen Tabs nicht rund. wie kann ich das Script und den CSS zusammenbringen?

    CSS
    .tabbrowser-tab:is([visuallyselected], [multiselected]) > .tab-stack > .tab-background {
        background: red !important;
        border-radius: 18px !important;
        margin-top: 2px !important;  
        border: none !important;
        color: black ! important; 
        margin-bottom: 0 !important;
        }
        
    	.tab-background {
        outline: none !important;
        }
    Alles anzeigen


    CSS
    	/* Ungelesen Tabs mit grüner Ecke */
    	
    (async (url) => {
       if (location != url) return;
       let css =`
           #TabsToolbar .tabbrowser-tab[notselectedsinceload="true"] {
               border-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAcCAYAAABh2p9gAAAACXBIWXMAAAsSAAALEgHS3X78AAABQklEQVR42q3TP0vDQBjH8atDhQ4uFhSnTg66FieHuljQRUpAbZI2bZqmSf+kQehbEN+Fr6fuvgM7+w7i84M7OI7YHPQJfAkcTz5HEk4URSE4E82zixp1TT1Sr7IxNaJcbW0TxcmzqLposP3Uc/rb7ZdDO3RkXeqeulNrNBdk+ds73W+qQOdnt3ugh06pI62aMTdsfDcKut/ijT5bv8JMDbr08JUJlGw8ACjRLtXaB15afBpfgRLtUedloGcJejooUfy0ExP0LUHXBCUaUnUdHBwCSjTVwaEl6PwHSnSjBgNLsL0PRC997wODI0vwuOREBfJU+WoNg2MbsOqCAQtgyAiGACeM4ARgxAhGAKeM4BRgzAjGAGeM4AxgwggmAFNGMAU4ZwTnABeM4ALgkhFcAlwxgiuAGSOYAVwzgmuAOSOY/wGB0oICMFHRdQAAAABJRU5ErkJggg==") 4 10 3 3 / 4px 10px 0px 3px stretch !important;
           }
       `;
       let sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
       let uri = "data:text/css;charset=utf-8," + encodeURIComponent(css);
       sss.loadAndRegisterSheet(Services.io.newURI(uri), sss.AGENT_SHEET);
       gBrowser.tabContainer.addEventListener("TabSelect", e => e.target.setAttribute("notselectedsinceload", "false"));
    })("chrome://browser/content/browser.xhtml");
    Alles anzeigen
  • Mehrzeilige Tableiste + ungelesene Tabs farbig

    • Boersenfeger
    • 31. März 2025 um 15:57

    lenny2 Soll das ein CSS oder ein Script sein?

    Beides funktioniert bei mir nicht!?

  • Eigener E-Mail-Dienst und KI-Assistent von Thunderbird angekündigt

    • Boersenfeger
    • 30. März 2025 um 17:57

    Ich hatte früher ein Web.de Konto und eins bei 1+1. Da wurde ich mit der Zeit geflutet mit SPAM und Werbung. Seit ich bei POSTEO bin, kriege ich kein SPAM mehr. Dort gibts auch kostenlose ALIAS-Adressen. Und schließlich habe ich für einmalige Gelegenheiten noch ein kostenloses Trashmailkonto.

    TrashMail - Wegwerf E-Mail-Adressen

Unterstütze uns!

Jährlich (2025)

82,4 %

82,4% (535,86 von 650 EUR)

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