Beiträge von FuchsFan
-
-
Ja stimmt! Bleibt die Frage ob es überhaupt funktioniert in Nightly?
Leider war die Vorfreude umsonst.
Bei Hover wird zwar das Icon angezeigt, das Submenü öffnet sich, aber sofern mit der Maus das Popup berührt wird verschwindet es . Da werde ich dann doch bei der Lösung von 2002Andreas bleiben. Oder gibt es dazu noch einen Lösungsvorschlag?
-
Da kann ich auch noch ein Script beisteuern, funktioniert in allen Fenstern, und ohne Fehler in der Konsole.
JavaScript
Alles anzeigen// Button zum Aufruf des Profil-Ordners (function() { if (location.href !== 'chrome://browser/content/browser.xhtml') return; try { ChromeUtils.importESModule("resource:///modules/CustomizableUI.sys.mjs"); const sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService); const button_label = "Profil Button (generic)"; const open_in_a_window = false; CustomizableUI.createWidget({ id: 'Profil-Button', defaultArea: CustomizableUI.AREA_NAVBAR, removable: true, label: button_label, tooltiptext: button_label, onClick: function(event) { const win = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator) .getMostRecentWindow("navigator:browser"); if(event.button=='0') { try { if(open_in_a_window) window.open("ProfD"); uProfMenu.prefDirOpen('ProfD'); } catch (e) {} } }, onCreated: function(button) { return button; } }); // style button icon const uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent('\ \ #Profil-Button .toolbarbutton-icon {\ list-style-image: url("file:///C:/FoxIcons2/prof.png"); \ }\ \ '), null, null); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); } catch (e) { Components.utils.reportError(e); }; })();
-
Geht das im Nightly? Als Kurzfassung?
Super, das funktioniert in dieser Fassung perfekt. Die Schreibweise von Sören Hentzschel ist dann aber wohl die bessere Idee.
Ich danke euch für diesen Ansatz.
-
Oder nimm gleich passende Icons:
Ja, das funktioniert dann wenigstens. Ich danke Dir!
-
Bekomme ich mal Deinen Code?
Sorry, habe ich jetzt erst gelesen. Das ist der Code für das Rechtsklick-Kontextmenü, so wie ich ihn verwende (für 139/140).
CSS
Alles anzeigen/*======= Rechtsklick-Kontextmenü =======*/ /* AGENT_SHEET */ @namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); @-moz-document url(chrome://browser/content/browser.xhtml){ /*==== zusätzliche Anpassungen Rechtsklick-Kontextmenü ====*/ /* Breite des Popup-Menüs begrenzt */ #mainPopupSet menupopup#contentAreaContextMenu{ max-width: 345px !important; min-width: 345px !important; } /* obere Box mit den Icons */ #context-navigation { appearance: none !important; background: #99ccff !important; padding: 8px !important; margin-bottom: 3px !important; min-height: 50px !important; max-height: 50px !important; max-width: 320px !important; box-shadow: inset 0.05em 0.05em 0.3em 0.3em #009926 !important; } /* Button mit den Icons */ #context-navigation menuitem.menuitem-iconic { background-color: transparent /* #fae7b5 */ !important; border: 1px solid royalblue !important; max-width: 47px !important; min-width: 47px !important; min-height: 35px !important; max-height: 35px !important; padding-left: 4px !important; margin-left: 3px !important; margin-top: 0px !important; } /* die aktiven Button oben im Kontextmenü bei hover */ #context-navigation > .menuitem-iconic:not([disabled]):hover{ background-color: #d2f2f8 !important; border: 1px solid brown !important; } /* die inaktiven Button oben im Kontextmenü bei hover */ #context-navigation > .menuitem-iconic[disabled]:hover{ background-color: #ababab !important; } /* die inaktiven (kleinen) Button oben im Kontextmenü ausgeblendet */ #context-navigation > .menuitem-iconic[disabled] > hbox > image { background-color: transparent !important; } /* die aktiven (kleinen) Button oben im Kontextmenü ausgeblendet */ #context-navigation > .menuitem-iconic:not([disabled]) > hbox > image { background-color: transparent !important; } /* Vor, Zurück, Stop, Neuladen und Lesezeichen farbig */ #context-back.menuitem-iconic image.menu-icon { fill: blue !important; margin-left: 4px !important; } #context-back:hover.menuitem-iconic image.menu-icon { fill: red !important; } #context-forward.menuitem-iconic image.menu-icon{ fill: #268e00 !important; } #context-forward:hover.menuitem-iconic image.menu-icon{ fill: red !important; } /* gehören zum Script SkipToTopAndBottom.uc.js */ #context-to-top.menuitem-iconic image.menu-icon{ margin-right: 0px !important; } #context-to-bottom.menuitem-iconic image.menu-icon{ margin-right: 0px !important; } #context-reload.menuitem-iconic image.menu-icon{ fill: forestgreen !important; } #context-reload:hover.menuitem-iconic image.menu-icon{ fill: red !important; } #context-stop.menuitem-iconic image.menu-icon{ fill: red !important; } #context-stop:hover.menuitem-iconic image.menu-icon{ fill: #cd0000 !important; } #context-bookmarkpage.menuitem-iconic image.menu-icon{ fill: #ff5f25 !important; margin-right: 4px !important; } #context-bookmarkpage:hover.menuitem-iconic image.menu-icon{ fill: brown !important; } } /* =========================== */ /* Skip To Top & Bottom Icons */ /* Einheitliche Icon-Größe */ /* =========================== */ #context-navigation { > .menuitem-iconic { /* Gemeinsame Icon-Größe */ > .menu-icon { width: 34px !important; height: 34px !important; max-width: 34px !important; max-height: 34px !important; background-size: contain !important; /* für perfekte Skalierung */ object-fit: contain !important; /* falls SVGs oder PNGs verwendet werden */ } } }
Bekomme die Farbe nicht geändert, liegt eventuell am Script selbst. Dieses verwende ich:
Code
Alles anzeigen//SkipToTopAndBottom.uc.js (function() { let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-to-top'; menuitem.classList.add('menuitem-iconic'); menuitem.setAttribute('tooltiptext' , 'Zum Seitenanfang springen'); menuitem.style.listStyleImage='url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik00NjcuNiwyNjMuNEwyNS43LDY2NS4yYy0xOS42LDE3LjktMjEuMSw0OC40LTMuMyw2OC4xYzE4LDE5LjcsNDguNCwyMS4xLDY4LjEsMy4zbDQwOS41LTM3Mi4ybDQwOS4zLDM3Mi4yYzE5LjgsMTcuOSw1MC4zLDE2LjUsNjguMi0zLjNjOC4zLTkuMiwxMi41LTIwLjgsMTIuNS0zMi40YzAtMTMuMS01LjMtMjYuMi0xNS43LTM1LjdMNTMyLjQsMjYzLjRDNTE0LDI0Ni44LDQ4NS45LDI0Ni44LDQ2Ny42LDI2My40eiIvPjwvZz48L3N2Zz4=")'; let refItem = document.getElementById('context-reload'); refItem.parentNode.insertBefore(menuitem, refItem); //click menuitem.addEventListener('click', () => { if (event.button == 0) { ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,0) ' , false); } }); })(); (function() { let menuitem = document.createXULElement('menuitem'); menuitem.id = 'context-to-bottom'; menuitem.classList.add('menuitem-iconic'); menuitem.setAttribute('tooltiptext' , 'Zum Seitenende springen'); menuitem.style.listStyleImage='url("data:image/svg+xml;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMTAwMCAxMDAwIiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAxMDAwIDEwMDAiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxnPjxwYXRoIGQ9Ik01MzIuNCw3MzYuNmw0NDEuOS00MDEuOGMxOS42LTE3LjgsMjEuMS00OC40LDMuMi02Ny45Yy0xNy45LTE5LjgtNDguNC0yMS4zLTY3LjktMy40TDUwMCw2MzUuOEw5MC44LDI2My40Yy0xOS44LTE3LjgtNTAuNC0xNi4zLTY4LjIsMy40Yy04LjQsOS4yLTEyLjYsMjAuOC0xMi42LDMyLjRjMCwxMyw1LjQsMjYuMiwxNS44LDM1LjZsNDQxLjksNDAxLjhDNDg2LjEsNzUzLjIsNTE0LjIsNzUzLjIsNTMyLjQsNzM2LjZ6Ii8+PC9nPjwvc3ZnPg==")'; let refItem = document.getElementById('context-reload'); refItem.parentNode.insertBefore(menuitem, refItem); //click menuitem.addEventListener('click', () => { if (event.button == 0) { ownerGlobal.gBrowser.selectedBrowser.messageManager.loadFrameScript(' data: , content.scrollTo(0,100000) ' , false); } }); var cssUri = Services.io.newURI('data:text/css,' + encodeURIComponent(css), null, null); var SSS = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); SSS.loadAndRegisterSheet(cssUri, SSS.AGENT_SHEET); })();
-
-
Nun habe ich doch noch einen Weg gefunden, so z.B. für Scripte.
CSS#ExtraConfigMenu-popup:hover menu#submenu-ucjs::after { content: "" !important; background-image: url("..//icons/down2.png") !important; margin-right: 12px !important; display: block !important; background-repeat: no-repeat !important; background-position: 0px 3px !important; background-size: 14px 14px !important; }
Hast du noch eine Idee, wie man das auf die restlichen übertragen könnte (um nicht jedes einzeln aufzuführen)?
-
Meines Erachtens kannst du dir ein zusätzliches background-image sparen, denn mit content: kannst du das genauso ausdrücken. Eine Eigenschaft weniger und keine leere content-Eigenschaft.
Danke für den Hinweis, ich erinnere mich, das haben wir schon mal gemacht.
Damals beim Einrichten der Seite von camp-firefox z.B.
-
-
Wurdest Du nicht aufgefordert ganze Skripte zu posten?
Nun fangt doch nicht schon wieder damit an, das nervt ja langsam. Aber du hast ja nicht ganz Unrecht, bitteschön.
CSS
Alles anzeigen// ==UserScript== // @name extras_config_menu.uc.js // @compatibility Firefox 6*.* // @include main // @version 1.0.20190504 // @edit @aborix - Erweiterung mit Submenüs / 02.12.2022 // @edit @FuchsFan - Erweiterung mit Ordner JS und Submenü Scripte // @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: 'C:\\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: '', // Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind, // in der folgenden Zeile das Unterverzeichnis eintragen, sonst '': jsSubfolder: 'Scripte', // 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: 'searchbar', // 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: 0, // 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:buildconfig','about:cache','about:certificate','about:compat','about:config','about:crashes','about:debugging', 'about:logging','about:logins','about:loginsimportreport','about:memory','about:networking','about:performance','about:plugins','about:policies','about:preferences','about:privatebrowsing','about:profiles','about:processes','about:profiling', 'about:protections','about:serviceworkers','about:support','about:telemetry','about:third-party','about:unloads','about:url-classifier','about:webrtc','about:welcome','about:welcomeback','about:windows-messages'], // Die normalen Firefox-Einstellungen auch zur Verfuegung stellen (0: nein, 1: ja): showNormalPrefs: 0, // 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: 1, // Ende der Konfiguration init: function() { if (location != '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 Button nach dem per warpmenuto gewaehlten Element anlegen (s. Kommentar ueber warpmenuto im Konfigurationsabschnitt) /* var zielmenu = document.getElementById(this.warpmenuto); if (zielmenu==null) { userChrome.log("extras_config_menu.uc.js findet Zielpunkt '"+this.warpmenuto+"' nicht, evtl. weil ein anderes Fenster als das Hauptfenster " + "geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition " + "von 'warpmenuto' kontrollieren."); return; } var menu = zielmenu.parentNode.insertBefore(document.createXULElement('toolbarbutton'), zielmenu.nextSibling); menu.setAttribute("id", "ExtraConfigMenu-button"); menu.setAttribute("class", "toolbarbutton-1"); menu.setAttribute("type", "menu"); menu.setAttribute("tooltiptext", "Extra Config Menü\nMittelklick \öffnet about:config"); menu.setAttribute("onclick", "if (event.button===1 && event.target==this) openTrustedLinkIn('about:config','tab');"); } */ // 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(file:///C:/FoxIcons/1206.png) !important; margin-right: 10px !important; margin-bottom: 2px !important; margin-top: 2px !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); uProfMenu.getCss(6); },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","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","css",0,0,"submenu-css")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-css-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")); var submenu = menupopup.appendChild(this.createME("menu","cssabout",0,0,"submenu-cssabout")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-cssabout-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")); 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","userChrome.css","uProfMenu.edit(7,'userChrome.css');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","userContent.css","uProfMenu.edit(7,'userContent.css');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","userChromeShadow.css","uProfMenu.edit(7,'userChromeShadow.css');","uProfMenu_edit",0)); menupopup.appendChild(this.createME("menuitem","userChrome.js","uProfMenu.edit(7,'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); menupopup.appendChild(this.createME("menuitem","policies.json","uProfMenu.edit(9,'policies.json');","uProfMenu_edit"),0); // Ende Einbindung von Konfigdateien // 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 Funktionen",this.abouts,"uProfMenu_about",1); } } // Ende Einbindung von abouts // Einbindung von Menü Funktionen var submenu = menupopup.appendChild(this.createME("menu","Funktionen",0,0,"submenu-extra2")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-extra2-items")); this.fillMenu("submenu-extra2","submenu-extra2-items", "Funktionen", [ {label:'Addon-Manager', command:"BrowserAddonUI.openAddonsMgr();"}, {label:'Einstellungen', command:"openPreferences();"}, {label:'about:config', command:"openTrustedLinkIn('about:config', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');"}, {label:'about:support', command:"openTrustedLinkIn('about:support', gBrowser.selectedTab.isEmpty ? 'current' : 'tab');"}, {label:'Browser-Werkzeuge', command:"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\ var { BrowserToolboxLauncher } = require('resource://devtools/client/framework/browser-toolbox/Launcher.sys.mjs');\ BrowserToolboxLauncher.init();", }, {label:'Browser-Konsole', command:"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\ var { BrowserConsoleManager } = require('resource://devtools/client/webconsole/browser-console-manager');\ BrowserConsoleManager.openBrowserConsoleOrFocus();", }, {label:'Entwickler-Werkzeuge', command:"var { require } = ChromeUtils.importESModule('resource://devtools/shared/loader/Loader.sys.mjs', {});\ var { gDevToolsBrowser } = require('devtools/client/framework/devtools-browser');\ gDevToolsBrowser.toggleToolboxCommand(window.gBrowser, Cu.now());", }, {label:'Neustart im abgesicherten Modus', command:"safeModeRestart();"}, ], "extra2-directory",7); // Ende Einbindung von Menü Funktionen // Einbindung von Menü Verzeichnisse var submenu = menupopup.appendChild(this.createME("menu","Verzeichnisse",0,0,"submenu-extra")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-extra-items")); this.fillMenu("submenu-extra","submenu-extra-items", "Verzeichnisse", [ {label:'Installationsordner', command:"uProfMenu.prefDirOpen('CurProcD')"}, {label:'Profilordner', command:"uProfMenu.prefDirOpen('ProfD')"}, {label:'Icons', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Icons');"}, {label:'IconsMenü', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'IconsMenü');"}, {label:'IconsHamburger', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'IconsHamburger');"}, {label:'Bookmark-Backups', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'bookmarkbackups');"}, {label:'Addonordner', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'extensions');"}, {label:'Startup-Cacheordner', command:"uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'startupCache');"}, {label:'FoxIcons', command:"uProfMenu.dirOpen('C:\\FoxIcons');"}, {label:'FoxIcons2', command:"uProfMenu.dirOpen('C:\\FoxIcons2');"}, {label:'FoxBilder', command:"uProfMenu.dirOpen('C:\\FoxBilder');"}, {label:'Download Firefox', command:"uProfMenu.dirOpen('D:\\Download Firefox');"} ], "extra-directory",7); // Ende Einbindung von Menü Verzeichnisse 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; } if (this.cssOrdner) { menupopup.appendChild(this.createME("menuitem","CSS-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSS');","uProfMenu_folder"),0); } menupopup.appendChild(this.createME("menuitem","Ordner chrome","uProfMenu.prefDirOpen('UChrm');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Ordner CSSWeb","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSWeb');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Ordner CSS","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","uProfMenu_folder"),0); //menupopup.appendChild(this.createME("menuitem","Profilordner","uProfMenu.prefDirOpen('ProfD');","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 CSSAbout","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSAbout');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Ordner Scripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Scripte');","uProfMenu_folder"),0); menupopup.appendChild(this.createME("menuitem","Ordner CSSShadow","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'CSSShadow');","uProfMenu_folder"),0); // Ende Einbindung von Ordnern // 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: if (this.jsSubfolder.length != 0) { var Path = this.getPrefDirectoryPath("UChrm") + dSep + this.jsSubfolder + dSep + Filename; } else { 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 Sonstige CSS-Dateien folder case 5: var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSAbout" + dSep + Filename; break; //Current is CSSShadow folder case 6: var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break; //Current is Chrome Directory case 7: var Path = this.getPrefDirectoryPath("UChrm") + dSep + Filename; break; //Current is Scripte folder case 8: var Path = this.getPrefDirectoryPath("UChrm") + dSep + "Scripte" + dSep + Filename; break; //Current is distribution folder case 9: var Path = this.getPrefDirectoryPath("CurProcD") + dSep + "distribution" + 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+uProfMenu.getDirSep()+this.jsSubfolder); // 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); // 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", "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()+"CSSAbout"); } else if (iType==6) { 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","CSS-Dateien",cssFiles,"uProfMenu_css",3); } else if (iType==4) { this.fillMenu("submenu-cssweb","submenu-cssweb-items","CSSWeb-Dateien",cssFiles,"uProfMenu_css",4); } else if (iType==5) { this.fillMenu("submenu-cssabout","submenu-cssabout-items","CSSAbout-Dateien",cssFiles,"uProfMenu_css",5); } else if (iType==6) { this.fillMenu("submenu-cssshadow","submenu-cssshadow-items","CSSShadow-Dateien",cssFiles,"uProfMenu_css",6); } }, 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); }else if (sTyp==6){ var mitem = this.createME("menuitem",scriptArray[i],"uProfMenu.edit(6,'"+scriptArray[i]+"')",sClass,0); } else if (sTyp==7){ var mitem = this.createME("menuitem",scriptArray[i].label,scriptArray[i].command,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'); document.getElementById("ExtraConfigMenu-popup").hidePopup(); } }, 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();
wobei xyz123 das Element des entsprechenden Eintrags ist.
Alles was ich dazu gefunden habe ist probiert worden, aber ohne Erfolg.
-
aber mir ist aufgefallen, dass in der Nightly nicht mehr "gehovert" wird!
Den Button selbst schon, aber mir gelingt es auch nicht, den Pfeilen eine andere Farbe zu geben.
-
Ich bitte in der Sache nochmals um Hilfe. Im Beitrag #1 ist der zweite Codee für Hoover vorhanden, was bis zur Version 138 für jeden einzelnen Button den roten Pfeil bringt. Sieht dann so aus:
In Version 139/140 will mir das nicht gelingen, es auch dort so einzurichten. Wenn ich z.B. diesen Code dafür einsetze, so werden alle Button gleichzeitig angesprochen.
CSS/*rechts der kleine Pfeil bei hoover*/ #ExtraConfigMenu-popup:hover > menu::after { content: "" !important; background-image: url("..//icons/down2.png") !important; margin-right: 12px !important; display: block !important; background-repeat: no-repeat !important; background-position: 0px 3px !important; background-size: 14px 14px !important; }
Was dann so aussieht:
-
-
oder es wurde nicht bedacht, dass wenn ::after genutzt wird, es zwingend die Eigenschaft content geben muss
Das war natürlich der gröbste Fehler, ich bedanke mich für den Hinweis.
Wäre noch hilfreich, das Script zu posten, mindestens zu verlinken.
Es lag aber nicht zwingend an dem Script, denn darin hat sich nichts geändert. Gibt es hier im Forum an jeder Ecke.
Wie ebenfalls erwähnt, ist .menu-right jetzt wohl menu::after, und hat einen anderen Pfad, irgendwie sowas.
Danke, das hat mich jetzt auf die Lösung gebracht, denn content fehlte, und es muss jetzt dazu background-image heißen.
Damit funktioniert es dann wieder;
-
-
Bis zur Version 138 funktioniert dafür dieser Code:
CSS
Alles anzeigen/*rechts der kleine Pfeil*/ #ExtraConfigMenu-popup menu > .menu-right { list-style-image: url("..//icons/rechts6.png") !important; } #ExtraConfigMenu-popup menu:hover > .menu-right { list-style-image: url("..//icons/down2.png") !important; margin-right: 8px !important; padding-right: 20px !important; display: block !important; width: 16px !important; height: 16px !important; background-repeat: no-repeat !important; background-position: 0px 0px !important; background-size: 17px 17px !important; }
Ich finde den neuen Selektor dafür nicht, bitte helfen.
-
Kompl. Skript dann:
Sorry, Andreas, konnte nicht mehr online sein.
Mein Dank geht an dich, das funktioniert perfekt, wie immer bei dir.
Ich wünsche dir, und auch allen Mitlesern, schöne Osterfeiertage.
-
Zeile 25 im Skript:
Habe es im Original übernommen, aber lässt sich nicht ändern.
Ich stelle mal das geänderte Script hier ein, schaust du mal bitte, ob es bei dir funktioniert.
CSS
Alles anzeigen// ==UserScript== // @include chrome://mozapps/content/downloads/unknownContentType.xhtml // @charset UTF-8 // @version Fx114+ // ==/UserScript== (function () { if (location.href !== 'chrome://mozapps/content/downloads/unknownContentType.xhtml') return; const Cu = Components.utils; const { FileUtils } = ChromeUtils.importESModule( 'resource://gre/modules/FileUtils.sys.mjs'); setTimeout(function () { saveTo(); }, 200); function saveTo() { // Config const dirArray = [ ['D:\\Download Firefox', 'Download Firefox'], ['D:\\Download Firefox\\Dokumente'], ['D:\\Download Firefox\\Bilder'], ['D:\\Download Firefox\\Software'], ['D:\\Download Firefox\\Ablage'], ['D:\\Download Firefox\\Sonstiges'], ["C:\\", "C:"], ["E:\\", "E:"], ]; const button = document.getElementById('unknownContentType').getButton('cancel'); const saveTo = button.parentNode.insertBefore(document.createXULElement('button'), button); const saveToMenu = saveTo.appendChild(document.createXULElement('menupopup')); saveTo.classList.toggle('dialog-button'); saveTo.label = 'Speichern in…'; saveTo.type = 'menu'; const css =` hbox.dialog-button-box button.dialog-button menupopup { background: gold !important; min-width: 220px !important; padding: 5px !important; margin: 15px 0 0 -62px !important; border: 3px solid dodgerblue !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem{ appearance: none !important; color: blue !important; background: #fefefc !important; border: 1px solid silver !important; margin-top: 1px !important; padding-left: 12px !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem:hover { background: greenyellow !important; border: 1px solid red !important; } hbox.dialog-button-box button.dialog-button menupopup menuitem.menuitem-iconic label.menu-iconic-text{ color: blue !important; font-size: 15px !important; font-weight: 600 !important; padding: 3px !important; padding-left: 85px !important; padding-right: 12px !important; } /* [FF139+] -> */ hbox.dialog-button-box button.dialog-button menupopup menuitem:not([highlightable]) > .menu-highlightable-text, menuitem[highlightable] > .menu-text { display: none; } /* <- [FF139+] */ `; 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); dirArray.forEach(function (directory) { const [name, dir] = [directory[1], directory[0]]; const mi = document.createXULElement('menuitem'); const item = saveToMenu.appendChild(mi); item.setAttribute('label', (name || (dir.match(/[^\\/]+$/) || [dir])[0])); item.setAttribute('image', 'moz-icon:file:///' + dir + '\\'); item.setAttribute('class', 'menuitem-iconic'); item.addEventListener('click', function () { const locationtext = document.getElementById('locationtext'); const pathFile = dir + '\\' + (locationtext ? locationtext.value : document.getElementById('location').value); const file = new FileUtils.File(pathFile); dialog.mLauncher.saveDestinationAvailable(file); dialog.onCancel = function () {}; close(); }); }); } }());
-
Hilf mir mal bitte, ich bekomme den Text nicht nach rechts verlagert.