Beiträge von seipe
-
-
-
-
Mira_Belle Bei mir ist alles so eingestellt wie aus Beitrag #132. Trotzdem kein Button sichtbar.
-
-
-
Ich finde den verschiebbaren Button (Standart) für extra_config_menu nicht. Script von Mira_Belle aus #117.
-
Sören Hentzschel danke für den Hinweis.
-
2002Andreas per about:config geht es nicht? Ich beende es sonst immer mit der esc-Taste.
-
Wie bekomme ich diese Popup dauerhaft weg?
-
2002Andreas jetzt passt es. Dankeschön.
-
Ich habe jetzt bei mir Folgendes beobachtet. Wenn ich das Script von bege aus #184 verwende, dann wird mir das Style LoaderMenu etwa 3-4 Sekunden später erst angezeigt. Somit sind dann sämtliche css-Dateien momentan deaktiviert. Kann jemand von euch das vielleicht erklären?
Hier noch mein voriges Script.
Code
Alles anzeigen/* UserCSSLoader 2025-10-10 * * original author: Griever - * https://github.com/Griever/userChromeJS/tree/master/UserCSSLoader * * Enhancements and several other changes including German translation and * configuration section by users aborix, Endor, bege, Mira_Belle, Speravir * of Camp Firefox forum - https://www.camp-firefox.de/forum/ - latest version: * https://www.camp-firefox.de/forum/thema/138814/?postID=1280726#post1280726 */ /****** Bedienungsanleitung ****** CSS-Ordner im Chrome-Ordner erstellen, CSS-Dateien dort ablegen - speichern. Diejenigen, deren Dateiname mit "xul-" beginnen, diejenigen, die mit ".as.css" enden, sind AGENT_SHEET, alle anderen außer USER_SHEET werden gelesen. Da der Inhalt der Datei nicht überprüft wird, darauf achten, die Angabe von @namespace nicht zu vergessen! Schaltfläche oder Menü wird in Navigationsleiste eingefügt (einstellbar, siehe Variable "position" in unten anschließender Konfiguration). Dateiordner, Dateimanager und Texteditor können in der unten anschließenden Konfiguration geändert werden. Die Verwendung des in "view_source.editor.path" angegebenen Editors ist möglich. Linksklick auf Stil, zum Aktivieren/Deaktivieren Mittelklick auf Stil zum Aktivieren/Deaktivieren, ohne Menü zu schließen Rechtsklick auf Stil zum Öffnen im Editor Strg+Linksklick zum Anzeigen im Dateimanager Die Tastenkombinationen können im Menü eingeblendet werden, dazu nach "acceltext" suchen und den Zeilenkommentar "//" entfernen. Ein Symbol für die Schaltfläche muss in der "userChrome.css" festgelegt werden, Pfad zum Bild (PNG nur als Beispiel): * relativ zur userChrome.css background-image: url("Relativer/Pfad/zum/CSS_Symbol.png"); * eine absolute Pfadangabe zum Symbol muss mit File-Protokoll-Präfix erfolgen: background-image: url("file:///Absoluter/Pfad/zum/CSS_Symbol.png"); Absolute Zahlenwerte müssen eventuell etwas an die eigenen Gegebenheiten angepasst werden (größeres Symbol, anderer Rand); der Zahlenwert für Höhe und Breite des Menütextes ("CSS") sollte nicht größer sein als für das Symbol (hier 16px). #usercssloader-menu-item { background-image: url("Relativer/Pfad/zum/CSS_Symbol.png"); background-position: center; background-repeat: no-repeat; background-size: 16px; border-radius: var(--toolbarbutton-border-radius); margin-block: 3px; &:hover { background-color: var(--toolbarbutton-hover-background); } & #usercssloader-menu > .menu-text[value="CSS"] { opacity: 0; width: calc(2 * var(--toolbarbutton-inner-padding) + 16px); height: calc(2 * var(--toolbarbutton-inner-padding) + 16px); } } **** Ende der Anleitung ****/ (function(){ /***** Konfiguration *****/ /* Position: als frei verschiebbare-Schaltfläche = 0, als Menü anzeigen = 1 */ let position = 0;//1 /* Dateimanager festlegen, Beispiele: * let fileManager = "C:\\Programme\\FreeCommanderXE\\FreeCommander.exe"; * let fileManager = "C:\\Programme\\totalcmd\\TOTALCMD.EXE"; * auch möglich (Achtung, nur mit fileManagerParam = "/select,"!): * let fileManager = "C:\\Windows\\explorer.exe"; * Bleibt Parameter leer, wird Standardmanager des Systems ohne Parameter * verwendet mit leicht eingeschränkter Funktionalität. */ let fileManager = "C:\\Program Files\\FreeCommander XE\\FreeCommander.exe"; /* eventuelle Parameter für den Dateimanager, Beispiele: * let fileManagerParam = "/T";//FreeCommander oder Totalcommander * let fileManagerParam = "/select,";//Windows Explorer, mit Komma korrekt! */ let fileManagerParam = ""; /* manche Manager benötigen den Parameter nach der Pfadangabe, dann "fileManagerParamPost" auf true setzen */ let fileManagerParamPost = false; /* eigener Texteditor mit Pfad - Standard leer, dann wird Wert aus * Einstellung "view_source.editor.path" verwendet mit Warnmeldung, * wenn auch dieser leer ist, Beispiel: * let customEditor = "C:\\Windows\\System32\\notepad.exe"; */ let customEditor = "C:\\Program Files\\Notepad++\\notepad++.exe"; /* Unterordner für die CSS-Dateien */ let cssFolder = "CSS"; /* zusätzlich Chrome-Ordner im Untermenü anzeigen (true) oder verstecken (false) */ let showChrome = true; /* Menüeintrag zum Bearbeiten der userChrome.css anzeigen (true) oder verstecken (false) */ let showUserChromeCSS = true; /* Menüeintrag zum Bearbeiten der userContent.css anzeigen (true) oder verstecken (false) */ let showUserContentCSS = true; /* Menüeintrag zum Bearbeiten der userChromeShadow.css anzeigen (true) oder verstecken (false) */ let showUserChromeShadowCSS = true; /* Menüeintrag zum Bearbeiten der userChrome.js anzeigen (true) oder verstecken (false) */ let showUserChromeJS = false; /* Menüeintrag zum Bearbeiten der pref.js anzeigen (true) oder verstecken (false); Achtung, diese Datei sollte nur zum Ansehen geöffnet werden, bei laufendem Firefox werden Änderungen wieder überschrieben! */ let showPrefsJS = false; /* Menüeintrag zum Bearbeiten der user.js anzeigen (true) oder verstecken (false) */ let showUserJS = false; /***** Ende der Konfiguration *****/ // Wenn beim Start ein weiteres Fenster (zweites Fenster) vorhanden ist, beenden let list = Services.wm.getEnumerator("navigator:browser"); while(list.hasMoreElements()){ if(list.getNext() != window) return; } if (window.UCL) { window.UCL.destroy(); delete window.UCL; } let menutooltip = "Linksklick: an/aus, Menü schließt\nMittelklick: an/aus, Menü bleibt offen\nRechtsklick: bearbeiten"; if (fileManager !== "") { menutooltip = menutooltip + "\nStrg+Rechtsklick: im Dateimanager anzeigen"; } window.UCL = { AGENT_SHEET : Ci.nsIStyleSheetService.AGENT_SHEET, USER_SHEET : Ci.nsIStyleSheetService.USER_SHEET, AUTHOR_SHEET: Ci.nsIStyleSheetService.AUTHOR_SHEET, readCSS: {}, get disabled_list() { let obj = []; try { obj = decodeURIComponent(this.prefs.getCharPref("disabled_list")).split("|"); } catch(e) {} delete this.disabled_list; return this.disabled_list = obj; }, get prefs() { delete this.prefs; return this.prefs = Services.prefs.getBranch("UserCSSLoader."); }, get styleSheetServices() { delete this.styleSheetServices; return this.styleSheetServices = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService); }, get FOLDER() { let aFolder; try { // UserCSSLoader.FOLDER verwenden let folderPath = this.prefs.getCharPref("FOLDER"); aFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); aFolder.initWithPath(folderPath); } catch (e) { aFolder = Services.dirsvc.get("UChrm", Ci.nsIFile); aFolder.appendRelativePath(cssFolder); } if (!aFolder.exists() || !aFolder.isDirectory()) { aFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0o664); } delete this.FOLDER; return this.FOLDER = aFolder; }, get CHRMFOLDER() { let cFolder; try { // UserCSSLoader.CHRMFOLDER verwenden let CHRMfolderPath = this.prefs.getCharPref("CHRMFOLDER"); cFolder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); cFolder.initWithPath(CHRMfolderPath); } catch (e) { cFolder = Services.dirsvc.get("UChrm", Ci.nsIFile); } if (!cFolder.exists() || !cFolder.isDirectory()) { cFolder.create(Ci.nsIFile.DIRECTORY_TYPE, 0o664); } delete this.CHRMFOLDER; return this.CHRMFOLDER = cFolder; }, init: function() { const cssmenu = $C("menu", { id: "usercssloader-menu", label: "CSS", tooltiptext: "UserCSSLoader\n\nLinksklick: Stylesheets anzeigen\nMittelklick: Styles importieren", accesskey: "Y" }); cssmenu.addEventListener("click", (event) => { if (event.button === 1) UCL.rebuild(); }); const menupopup = $C("menupopup", { id: "usercssloader-menupopup" }); cssmenu.appendChild(menupopup); let menu = $C("menu", { label: "Style-Loader-Menü", id: "style-loader-menu", accesskey: "S", //acceltext: "S" }); menupopup.appendChild(menu); menupopup.appendChild($C("menuseparator")); let mp = $C("menupopup", { id: "usercssloader-submenupopup" }); menu.appendChild(mp); let rebuildItem = $C("menuitem", { label: "Styles importieren", accesskey: "I", //acceltext: "I" }); rebuildItem.addEventListener("command", () => UCL.rebuild()); mp.appendChild(rebuildItem); mp.appendChild($C("menuseparator")); // let createCSS = $C("menuitem", { label: "CSS-Datei erstellen", accesskey: "D", //acceltext: "D" }); createCSS.addEventListener("command", () => UCL.create()); mp.appendChild(createCSS); let openFolder = $C("menuitem", { label: "CSS-Ordner öffnen", accesskey: "O", //acceltext: "O" }); openFolder.addEventListener("command", () => UCL.openCSSFolder()); mp.appendChild(openFolder); if (showChrome) { let openChromeFolder = $C("menuitem", { label: "Chrome-Ordner öffnen", accesskey: "X", //acceltext: "X" }); openChromeFolder.addEventListener("command", () => UCL.openCHRMFolder()); mp.appendChild(openChromeFolder); } if (showUserChromeCSS || showUserContentCSS || showUserChromeShadowCSS) // wenigstens eine der Variablen muss "true" sein, … mp.appendChild($C('menuseparator')); // … damit Trennlinie angezeigt wird if (showUserChromeCSS) { let editChromeItem = $C("menuitem", { label: "userChrome.css bearbeiten" }); editChromeItem.addEventListener("command", () => UCL.editUCFile("userChrome.css")); mp.appendChild(editChromeItem); } if (showUserContentCSS) { let editContentItem = $C("menuitem", { label: "userContent.css bearbeiten" }); editContentItem.addEventListener("command", () => UCL.editUCFile("userContent.css")); mp.appendChild(editContentItem); } if (showUserChromeShadowCSS) { let editUCShadowItem = $C("menuitem", { label: "userChromeShadow.css bearbeiten" }); editUCShadowItem.addEventListener("command", () => UCL.editUCFile("userChromeShadow.css")); mp.appendChild(editUCShadowItem); } if (showUserChromeJS || showPrefsJS || showUserJS) // wenigstens eine der Variablen muss "true" sein, … mp.appendChild($C('menuseparator')); // … damit Trennlinie angezeigt wird if (showUserChromeJS) { let editUCjsItem = $C("menuitem", { label: "userChrome.js bearbeiten" }); editUCjsItem.addEventListener("command", () => UCL.editUCFile("userChrome.js")); mp.appendChild(editUCjsItem); } if (showPrefsJS) { let editPrefsItem = $C("menuitem", { label: "prefs.js bearbeiten" }); editPrefsItem.addEventListener("command", () => UCL.editProfileFile("prefs.js")); mp.appendChild(editPrefsItem); } if (showUserJS) { let editUserJsItem = $C("menuitem", { label: "user.js bearbeiten" }); editUserJsItem.addEventListener("command", () => UCL.editProfileFile("user.js")); mp.appendChild(editUserJsItem); } CustomizableUI.createWidget({ id: 'usercssloader-menu-item', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbaritem'); toolbaritem.id = 'usercssloader-menu-item'; toolbaritem.className = 'chromeclass-toolbar-additional'; return toolbaritem; } }); $('usercssloader-menu-item').appendChild(cssmenu); if (position === 1) { let refNode = $('helpMenu'); refNode.parentNode.insertBefore(cssmenu, refNode.nextSibling); } // Stile neu laden, ohne Menü zu öffnen let key = $C("key", { id: "usercssloader-rebuild-key", key: "R", modifiers: "alt", }); key.addEventListener("command", () => UCL.rebuild()); $("mainKeyset").appendChild(key); this.rebuild(); this.initialized = true; window.addEventListener("unload", this, false); }, uninit: function() { const dis = []; for (let x of Object.keys(this.readCSS)) { if (!this.readCSS[x].enabled) dis.push(x); } this.prefs.setCharPref("disabled_list", encodeURIComponent(dis.join("|"))); window.removeEventListener("unload", this, false); }, destroy: function() { var i = document.getElementById("usercssloader-menu"); if (i) i.parentNode.removeChild(i); var i = document.getElementById("usercssloader-rebuild-key"); if (i) i.parentNode.removeChild(i); this.uninit(); }, handleEvent: function(event) { switch(event.type){ case "unload": this.uninit(); break; } }, rebuild: function() { let ext = /\.css$/i; let not = /\.uc\.css/i; let files = this.FOLDER.directoryEntries.QueryInterface(Ci.nsISimpleEnumerator); while (files.hasMoreElements()) { let file = files.getNext().QueryInterface(Ci.nsIFile); if (!ext.test(file.leafName) || not.test(file.leafName)) continue; let CSS = this.loadCSS(file); CSS.flag = true; } for (let leafName of Object.keys(this.readCSS)) { const CSS = this.readCSS[leafName]; if (!CSS.flag) { CSS.enabled = false; delete this.readCSS[leafName]; } delete CSS.flag; this.rebuildMenu(leafName); } if (this.initialized) { if (typeof(StatusPanel) !== "undefined") StatusPanel._label = "Styles importiert"; else XULBrowserWindow.statusTextField.label = "Styles importiert"; } }, loadCSS: function(aFile) { let CSS = this.readCSS[aFile.leafName]; if (!CSS) { CSS = this.readCSS[aFile.leafName] = new CSSEntry(aFile); if (this.disabled_list.indexOf(CSS.leafName) === -1) { CSS.enabled = true; } } else if (CSS.enabled) { CSS.enabled = true; } return CSS; }, rebuildMenu: function(aLeafName) { let CSS = this.readCSS[aLeafName]; let menuitem = document.getElementById("usercssloader-" + aLeafName); if (!CSS) { if (menuitem) menuitem.parentNode.removeChild(menuitem); return; } if (!menuitem) { menuitem = $C("menuitem", { label: aLeafName, id: "usercssloader-" + aLeafName, class: "usercssloader-item " + (CSS.SHEET == this.AGENT_SHEET? "AGENT_SHEET" : CSS.SHEET == this.AUTHOR_SHEET? "AUTHOR_SHEET": "USER_SHEET"), type: "checkbox", autocheck: "false", tooltiptext: menutooltip }); menuitem.addEventListener("command", () => UCL.toggle(aLeafName)); menuitem.addEventListener("click", (event) => UCL.itemClick(event)); menuitem.addEventListener("mouseup", (event) => { if (event.button === 1) event.preventDefault(); }); document.getElementById("usercssloader-menupopup").appendChild(menuitem); } menuitem.setAttribute("checked", CSS.enabled); }, toggle: function(aLeafName) { let CSS = this.readCSS[aLeafName]; if (!CSS || event.ctrlKey) return; CSS.enabled = !CSS.enabled; this.rebuildMenu(aLeafName); }, itemClick: function(event) { let label = event.currentTarget.getAttribute("label"); event.preventDefault(); event.stopPropagation(); if (event.button === 0) { return; } else if (event.button === 1) { this.toggle(label); } else if (event.button === 2) { if (event.ctrlKey && fileManager !== "") { UCL.showFile(label); } else { closeMenus(event.target); this.edit(this.getFileFromLeafName(label)); } } }, getFileFromLeafName: function(aLeafName) { let f = this.FOLDER.clone(); f.QueryInterface(Ci.nsIFile); // use appendRelativePath f.appendRelativePath(aLeafName); return f; }, showFile: function(fname) { const PathSep = AppConstants.platform === "win" ? "\\" : "/"; let target= this.FOLDER.path + PathSep + fname; let file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); let args = (!fileManagerParamPost) ? [fileManagerParam,target] : [target,fileManagerParam]; file.initWithPath(fileManager); process.init(file); // Verzeichnis mit anderem Dateimanager öffnen process.run(false, args, args.length); }, openCSSFolder:function(){ if (fileManager !== "" && fileManagerParam !== "/select,") { let target = this.FOLDER.path; let file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); let args = (!fileManagerParamPost) ? [fileManagerParam,target] : [target,fileManagerParam]; file.initWithPath(fileManager); process.init(file); // Verzeichnis mit anderem Dateimanager öffnen process.run(false, args, args.length); } else { // Verzeichnis mit Dateimanager des Systems öffnen this.FOLDER.launch(); } }, openCHRMFolder:function(){ if (fileManager !== "" && fileManagerParam !== "/select,") { let target = this.CHRMFOLDER.path; let file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile); let process = Cc['@mozilla.org/process/util;1'].createInstance(Ci.nsIProcess); let args = (!fileManagerParamPost) ? [fileManagerParam,target] : [target,fileManagerParam]; file.initWithPath(fileManager); process.init(file); // Verzeichnis mit anderem Dateimanager öffnen process.run(false, args, args.length); } else { // Verzeichnis mit Dateimanager des Systems öffnen this.CHRMFOLDER.launch(); } }, editUCFile: function(aLeafName) { let file = Services.dirsvc.get("UChrm", Ci.nsIFile); file.appendRelativePath(aLeafName); this.edit(file); }, editProfileFile: function(filename) { let file = Services.dirsvc.get("ProfD", Ci.nsIFile); file.append(filename); this.edit(file); }, edit: function(aFile) { let editor = (customEditor !== "") ? customEditor : Services.prefs.getCharPref("view_source.editor.path"); if (!editor) return alert('In der Konfiguration einen Texteditor festlegen ("customEditor") oder\n unter about:config im vorhandenen Schalter "view_source.editor.path"\n den vollständigen Editorpfad eintragen.'); try { let UI = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); UI.charset = window.navigator.platform.toLowerCase().indexOf("win") >= 0? "Shift_JIS": "UTF-8"; let path = UI.ConvertFromUnicode(aFile.path); let app = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); app.initWithPath(editor); let process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); process.init(app); process.run(false, [path], 1); } catch (e) {} }, create: function(aLeafName) { if (!aLeafName) aLeafName = prompt("Name des Styles", dateFormat(new Date(), "%Y_%m%d_%H%M%S")); if (aLeafName) aLeafName = aLeafName.replace(/\s+/g, " ").replace(/[\\/:*?\"<>|]/g, ""); if (!aLeafName || !/\S/.test(aLeafName)) return; if (!/\.css$/.test(aLeafName)) aLeafName += ".css"; let file = this.getFileFromLeafName(aLeafName); this.edit(file); }, UCrebuild: function() { let re = /^file:.*\.uc\.css(?:\?\d+)?$/i; let query = "?" + new Date().getTime(); Array.slice(document.styleSheets).forEach(function(css){ if (!re.test(css.href)) return; if (css.ownerNode) { css.ownerNode.parentNode.removeChild(css.ownerNode); } let pi = document.createProcessingInstruction('xml-stylesheet','type="text/css" href="'+ css.href.replace(/\?.*/, '') + query +'"'); document.insertBefore(pi, document.documentElement); }); UCL.UCcreateMenuitem(); }, UCcreateMenuitem: function() { let sep = $("usercssloader-ucseparator"); let popup = sep.parentNode; if (sep.nextSibling) { let range = document.createRange(); range.setStartAfter(sep); range.setEndAfter(popup.lastChild); range.deleteContents(); range.detach(); } let re = /^file:.*\.uc\.css(?:\?\d+)?$/i; Array.slice(document.styleSheets).forEach(function(css) { if (!re.test(css.href)) return; let fileURL = decodeURIComponent(css.href).split("?")[0]; let aLeafName = fileURL.split("/").pop(); let m = $C("menuitem", { label: aLeafName, tooltiptext: fileURL, id: "usercssloader-" + aLeafName, type: "checkbox", autocheck: "false", checked: "true", }); m.css = css; m.addEventListener("command", function() { if (!event.ctrlKey) {this.setAttribute("checked", !(this.css.disabled = !this.css.disabled));} }); m.addEventListener("mouseup", function(event) { if (event.button === 1) event.preventDefault(); }); m.addEventListener("click", function(event) { UCL.UCItemClick(event); }); popup.appendChild(m); }); }, UCItemClick: function(event) { if (event.button === 0) return; event.preventDefault(); event.stopPropagation(); if (event.button === 1) { event.target.doCommand(); } else if (event.button === 2) { closeMenus(event.target); let fileURL = event.currentTarget.getAttribute("tooltiptext"); let file = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getFileFromURLSpec(fileURL); this.edit(file); } }, }; function CSSEntry(aFile) { this.path = aFile.path; this.leafName = aFile.leafName; this.lastModifiedTime = 1; this.SHEET = /^xul-|\.as\.css$/i.test(this.leafName) ? Ci.nsIStyleSheetService.AGENT_SHEET: /\.author\.css$/i.test(this.leafName)? Ci.nsIStyleSheetService.AUTHOR_SHEET: Ci.nsIStyleSheetService.USER_SHEET; } CSSEntry.prototype = { sss: Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService), _enabled: false, get enabled() { return this._enabled; }, set enabled(isEnable) { let aFile = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile) aFile.initWithPath(this.path); let isExists = aFile.exists(); // true, wenn die Datei bereits existiert let lastModifiedTime = isExists ? aFile.lastModifiedTime : 0; let isForced = this.lastModifiedTime != lastModifiedTime; //true, wenn es eine Änderung in der Datei gibt let fileURL = Services.io.getProtocolHandler("file").QueryInterface(Ci.nsIFileProtocolHandler).getURLSpecFromActualFile(aFile); let uri = Services.io.newURI(fileURL, null, null); if (this.sss.sheetRegistered(uri, this.SHEET)) { // Wenn diese Datei bereits gelesen wurde if (!isEnable || !isExists) { this.sss.unregisterSheet(uri, this.SHEET); } else if (isForced) { // Nach Stornierung erneut einlesen this.sss.unregisterSheet(uri, this.SHEET); this.sss.loadAndRegisterSheet(uri, this.SHEET); } } else { // Datei wurde nicht gelesen if (isEnable && isExists) { this.sss.loadAndRegisterSheet(uri, this.SHEET); } } if (this.lastModifiedTime !== 1 && isEnable && isForced) { log(this.leafName + " wurde aktualisiert"); } this.lastModifiedTime = lastModifiedTime; return this._enabled = isEnable; }, }; UCL.init(); function $(id) { return document.getElementById(id); } function $A(arr) { return Array.slice(arr); } function $C(name, attr) { const el = document.createXULElement(name); if (attr) Object.keys(attr).forEach(function(n) { el.setAttribute(n, attr[n]) }); return el; } function dateFormat(date, format) { format = format.replace("%Y", ("000" + date.getFullYear()).substr(-4)); format = format.replace("%m", ("0" + (date.getMonth()+1)).substr(-2)); format = format.replace("%d", ("0" + date.getDate()).substr(-2)); format = format.replace("%H", ("0" + date.getHours()).substr(-2)); format = format.replace("%M", ("0" + date.getMinutes()).substr(-2)); format = format.replace("%S", ("0" + date.getSeconds()).substr(-2)); return format; } function log(mes) { console.log(mes); } })(); -
Die Größenänderung hatte ich bereits in 153 und jetzt auch in 154. Das wird euch aber auch nicht weiterhelfen. Ich wollte es nur mal anmerken. Bei mir ist Nova aktiv und ich kann auch die Größe der Kacheln umschalten.
-
Seit dem Update von 140 auf 153 funktionieren zwei Sachen nicht mehr. Es ist der Punkt Einstellungen und das Icon für den Restart von Betterbird wird im Dateimenu nicht mehr angezeigt. Ich habe mich schon im Thunderbirdforum damit gemeldet, bis jetzt aber noch keine Rückmeldung. Kann mal einer der Spezialisten drüber schaun. Danke schon mal.
JavaScript
Alles anzeigen// ==UserScript== // @name extras_config_menu.uc.js // @compatibility Betterbird 140+ // @include main // @version 1.0.20190504 // Aktuallisiert am 05.06.2023 von Endor // ==/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\\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: 'C:\\Program Files\\FreeCommander XE\\FreeCommander.exe', // Falls die JavaScript-Scripte nicht im chrome-Verzeichnis, sondern einem Unterverzeichnis sind, // in der folgenden Zeile 18 das Unterverzeichnis eintragen, sonst '': jsSubfolder: '', // In der Zeile (23) '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: 'unifiedToolbarContent', // 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, CSSWebOrdner: 1, // In einer der folgenden Zeilen 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:config','about:about','about:cache','about:certificate','about:checkerboard','about:crashes','about:debugging','about:devtools','about:memory','about:networking','about:performance','about:policies','about:profiles','about:serviceworkers','about:support','about:telemetry','about:url-classifier','about:webrtc'], abouts: ['about:about','about:cache','about:config','about:crashes','about:debugging','about:import','about:memory','about:performance','about:profiles','about:preferences','about:support'], // abouts: [], // Einbindung config-Dateien wie user.js etc. (0: nein, 1: ja) configFiles: 0, // Die Betterbird-Ordner anzeigen (0: nein, 1: ja): BetterbirdOrdner: 1, // Die normalen Betterbird-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, // Den Eintrag "Neustart" anzeigen (0: nein, 1: ja): enableRestart: 1, // Ende der Konfiguration init: function() { if (location != 'chrome://messenger/content/messenger.xhtml') return; if (this.warpmenuto.toLowerCase() == 'menu') { // aufgrund des gewaehlten warpmenuto als Untermenue von Extras anlegen var zielmenu = document.getElementById('unifiedToolbarContent'); /* 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("onclick","openTrustedLinkIn('about:config', 'tab');"); menu.setAttribute("tooltiptext","Rechtsklick öffnet about:config"); } 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ü\nRechtsklick öffnet about:config"); menu.setAttribute("onclick", "if (event.button == 2) openTrustedLinkIn('about:config', 'tab');"); } //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=) !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.setAttribute("onpopupshowing","uProfMenu.getScripts(0);uProfMenu.getCss(3);uProfMenu.getCss(4);uProfMenu.getCss(5)"); var menupopup = menu.appendChild(this.createME("menupopup",0,0,0,"ExtraConfigMenu-popup")); // Anlegen von Untermenues fuer die userChromeJS-Skripte (befuellt werden sie spaeter) var submenu=menupopup.appendChild(this.createME("menu","uc.js",0,0,"submenu-ucjs")); var submenupopup = submenu.appendChild(this.createME("menupopup",0,0,0,"submenu-ucjs-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","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 fuer die userChromeJS-Skripte menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von Konfigdateien 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 if (this.gmOrdner || this.cssOrdner) menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von Ordnern switch (this.gmOrdner) { case 1: menupopup.appendChild(this.createME("menuitem","GM Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'gm_scripts');","uProfMenu_folder"),0); break; case 2: menupopup.appendChild(this.createME("menuitem","USL Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'UserScriptLoader');","uProfMenu_folder"),0); break; case 3: menupopup.appendChild(this.createME("menuitem","Scriptish Skripte","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('ProfD')+uProfMenu.getDirSep()+'scriptish_scripts');","uProfMenu_folder"),0); break; } if (this.cssOrdner) { 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","Images-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'Images');","uProfMenu_folder"),0); } menupopup.appendChild(this.createME("menuitem","CSS-Ordner","uProfMenu.dirOpen(uProfMenu.getPrefDirectoryPath('UChrm')+uProfMenu.getDirSep()+'css');","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","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); // Ende Einbindung von Ordnern if (this.abouts || this.showNormalPrefs) menupopup.appendChild(document.createXULElement('menuseparator')); // Einbindung von abouts if (this.abouts.length>0) { var tabmail = document.getElementById("tabmail"); // 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],"tabmail.openTab('contentTab', { url:'"+this.abouts[i]+"'})","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 // 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); if (this.enableRestart) menupopup.appendChild(document.createXULElement('menuseparator')); // Falls enableRestart = 1, Neustart-Menuepunkt zur Verfügung stellen 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; }, /* move: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 CSSShadow folder case 5: var Path = this.getPrefDirectoryPath("UChrm") + dSep + "CSSShadow" + dSep + Filename; break; } fs.rename(Path, "F:\\Users\\bege\\AppData\\Roaming\\Mozilla\\Firefox\\Profiles\\487kit50.Quantum\\chrome\\JS.aus\\" + Filename); }, */ edit:function(OpenMode,Filename){ var Path = ""; var dSep = this.getDirSep(); // die Trennzeichen zwischen Ordnern abhaengig vom Betriebssystem machen switch (OpenMode){ //Current is Chrome Directory or Subfolder 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 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); // folgende 3 Zeilen nur für Firefox, nicht für Betterbird // 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 Scripts",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--) { // bisher nur eine 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.setAttribute("onclick","uProfMenu.openAtGithub(event,'"+scriptArray[i]+"')"); 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('oncommand',sCommand); m.setAttribute('class',sClass); 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): e.preventDefault(); var sUrl="https://github.com/Endor8/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="+this.cleanFileName(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(); -
Immer noch nicht. Alles retoure. Hatte einen Schrägstrich falsch gesetzt. Danke an 2002Andreas und Sören Hentzschel .
JavaScript
Alles anzeigentry { CustomizableUI.createWidget({ id: "add-BB-app", label: "Betterbird", tooltiptext: "Betterbird Start", onCreated: btn => btn.image = "file:///C:/Users/User/AppData/Roaming/Mozilla/Firefox/Profiles/vo9u0wa6.default-release-1690616328947/chrome/images/messengerWindow-bb-green.ico", onCommand: function(event) { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath("C:\\Program Files\\Betterbird\\betterbird.exe"); if (file.exists()) file.launch(); } }); } catch(e) {} -
2002Andreas Das Icon taucht aber in der Adressleiste nicht auf.
JavaScript
Alles anzeigentry { CustomizableUI.createWidget({ id: "add-BB-app", label: "Betterbird", tooltiptext: "Betterbird Start", onCreated: btn => btn.image = "file:///C:/Users/User/AppData/Roaming/Mozilla\Firefox/Profiles/vo9u0wa6.default-release-1690616328947/chrome/icons", onCommand: function(event) { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath("C:\\Program Files\\Betterbird\\betterbird.exe"); if (file.exists()) file.launch(); } }); } catch(e) {} -
JavaScript
Alles anzeigentry { CustomizableUI.createWidget({ id: "add-BB-app", label: "Betterbird", tooltiptext: "Betterbird Start", onCreated: btn => btn.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAE+UlEQVRIibVVXWxUVRCec8/9272729otbm0CtoWGEgFFygMKMdUEEjVWMV0N/pGYWIwPojEmao2amMgDRkVDAolo0DQECkEkEhRYiEFEa6VNKKXdttKltrttl+7uvXv3nl8fsKVFqEDCJPNwZubMN+ebyRmAWyzo/wJkLhdhjK1ACC1ECIVBSiIRGsAAv0Eo1IYQIjcFYCeTd+sYv4XynQ9IxdClUe4DxW+CoBzxiw4qJKg0K0aEWrLNCIe3IoTc6wKQUuJcMtmkjZ96VR1qlvTOV0xpzfcjND1UCo/jwW+zijuIaeWGPk8Y60pmz26fEUDGYup4ddXXvvjn9Xhov+Le950mtSJtJgrUxE7H6NmsFGq/ypHQ/GhJefnxqX5l6mGsqmqj0bGp3vjzE5+9YBOiyNIYYzCTumVP+pm2QPiONBSj8fjOVCJRfVWA4Xj8IeGMNGrn9oFnLfO80F0+yhgwN8P0tk8vhvatzhW1rMhbh55zcPcehxBXUMaAcY7sqkZFSY+quP9HQ3jOtlgspk4DkFJiRvLvB4++STkvMQolKxHjAhjnILJ/54Tr5VAqoeDhAb/Re0IN/PwhuW3f0wXmpBnjHNxAtc5pCUfJHmx0fFM7r7z8sWkA/Z2dtfq5g0vMzlhI5lGG4FJOKQVKKcD4sGn98mU5TtsW2ADCwRpkvJDR124W//SuRykFJhEWLFhQL/S4gV+3q4wWGid7BABAGXvEPBtDYEusDcQ1WZlTGeeAaIGV7nkd4XxBBQA5tuJlZ/ze53Wh+TQjddaddXRjgXFuSSGkzDHQUl1FiLiGkuxZ2tXVVVpTUzOqAAAwSu9xg9Ue2AA4bRfp8dOcMgb+joNETY2ZYAN4ZoWbXPqiRbCpMyGRU1rjv7D6I5MyBjKTJOpQ0ofTeZNDqeeplkldd/7lHuSz4UDbEUGV27NgAwTbjmkyO0Z8Z04KsAHABpCuCozzaRNUsGZZjDEItB5gSpapYAMU/BWZ0IndlFNaNkkR41wa/f0BRD0ACYBtW4+0fOwo2RET7EtcmnavYcbbXbtykX/qGOojCS9yYLsGBQABiAU7WkudcI3DOb/cA0/Rxwq+O8BK9xkTF8PHD/q5qgtgExaJKze/oZ6PvuZkFyzTJAAUdbfRObs/03DW1i/RIVUAJO3SSt2jdHgSgAhxuvuZprqq5s2kqOt08N+MCAPBU6vV7Kw+74sPdKGoBABAEcya6me6SROPPmunFq5UCOfnJntACfnB6IuD1RlXwEZ8gvdrqZJlupJl+pV2ZEsSOXxIo5yfqqurG518wWgm0yoXL2uvFP5a1banVX0jgsGzEk88bBMpt07YFACAaDTKmaa/d/aFRo+7SAgX4GY0E6nI/1W3ulUzzf1XrWD/3r2bzjQ05BwAkQeQN6IXi4u9w1u2DH3f0jLts5tGx0vr1x8drKioIRjPDXR2qkJKxAGAAwDRdYcJoVLDsAXnxoSdA4Adibh/NDVlnbKypx5vaGibmvM/C2fXrl0YOH8n2N29Ye6OHUagr8+HpESp5ctHZ508GXbmzHEUQrB/eNgnDIMMrlpFB9as6SaGsW7t2rUdV+a75spsbm5eLDl/O9jb+2Cgv98vEeKRY8ck9/lQor4ezHQap5csGaCh0FZN07ZFo9HrW5lXAYpQSu+XUi4CgLACQCRC5xUhfjcsqy0ajc649G+5/ANe1OtU6F5WHAAAAABJRU5ErkJggg==", onCommand: function(event) { var file = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsIFile); file.initWithPath("C:\\Program Files\\Betterbird\\betterbird.exe"); if (file.exists()) file.launch(); } }); } catch(e) {}Ich habe ein Script (Betterbird in Firefox starten). Jetzt möchte ich das Symbol farblich ändern bzw. austauschen. Die ico-Datei habe ich im icons-Ordner des Chrome-Ordner hinterlegt. Kann mir da vielleicht jemand behilflich sein?
-
Ich dachte, du wolltest gar keinen Tooltip mehr haben.
Du hast richtig gedacht.

-
2002Andreas Danke für den Hinweis. Ich habe den config Eintrag geändert. Der Standarttooltip sehe ich jetzt aber auch nicht mehr.
-
Sören Hentzschel Danke für die Erklärung.