Beiträge von Horstmann
-
-
Horstmann , es fehlt - damit es in neueren Firefoxversionen funzt - ein Slash nach der Angabe des Profilpfades. Den könnte man z.B. hier einfügen:
style: 'list-style-image: url("' + ProfilePath +'/'+ buttonicon + '");'
Das is alles?
Also würde das evtl. funktionieren - ohne meine dampfbetriebene Teststation anwerfen zu müssen (Iconname anpassen oder das im Anhang nehmen):
JavaScript
Alles anzeigen//tabsInTitlebar_toggle.uc.js //Icon erwartet in Profilordner/chrome/icons, icons Ordner falls noetig erstellen, buttonicon Dateinamen anpassen //https://www.camp-firefox.de/forum/thema/139604-v141-suche-nach-einem-skript-zum-show-hide-title-bar/?postID=1275461#post1275461 (function() { if (!window.gBrowser) return; const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try { CustomizableUI.createWidget({ id: 'title_toggle', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); let buttonicon = 'Letterst-2a.png'; let props = { id: 'title_toggle', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Titlebar Tabs', tooltiptext: 'Tabs in Titlebar', style: 'list-style-image: url("' + ProfilePath +'/'+ buttonicon + '");' }; for (let p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); } catch(e) { } document.getElementById('title_toggle').addEventListener('click', event => { if (event.button === 0) { tabsTitlebar(); } }); function tabsTitlebar() { if (prefs.getIntPref("browser.tabs.inTitlebar") === 0) { prefs.setIntPref("browser.tabs.inTitlebar", 1); } else { prefs.setIntPref("browser.tabs.inTitlebar", 0); } }; })();
-
Mira_Belle Ihrer Erklärung entnehme ich, dass der relative Pfad funktioniert, wenn Sie das Symbol per CSS hinzufügen. Derzeit funktioniert das Skript es mit einem Ressourcen Icon oder mit einem Icon mit einem physischen Pfad
Wie von Mira und Andreas erklärt, war mein Dateipfad veraltet für diese Anwendung.
Sowas sollte hoffentlich klappen, Icon entspechend anpassen:
JavaScript
Alles anzeigen//tabsInTitlebar_toggle.uc.js //Icon erwartet in Profilordner/chrome/icons, icons Ordner falls noetig erstellen, buttonIcon Dateinamen anpassen (function() { if (!window.gBrowser) return; const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); try { CustomizableUI.createWidget({ id: 'title_toggle', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/"); let buttonIcon = 'Letterst-2a.png'; let props = { id: 'title_toggle', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Titlebar Tabs', tooltiptext: 'Tabs in Titlebar', style: 'list-style-image: url("' + ("file:" + currentProfileDirectory + "/chrome/icons/" + buttonIcon) +'");', }; for (let p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); } catch(e) { } document.getElementById('title_toggle').addEventListener('click', event => { if (event.button === 0) { tabsTitlebar(); } }); function tabsTitlebar() { if (prefs.getIntPref("browser.tabs.inTitlebar") === 0) { prefs.setIntPref("browser.tabs.inTitlebar", 1); } else { prefs.setIntPref("browser.tabs.inTitlebar", 0); } }; })();
-
Hi, die Variante mit :"let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir'));"
funktioniert nur, wenn der Pfad in CSS gebraucht wird.
Andi's Skript verwendet aber: "let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");"
So kann die Variabel direkt in JS verwendet werden.Ergo, Andi's Skript erzeugt einen Button mit Symbol, Horstmann's Skript nicht.
Kleiner Nachtrag!
Wenn ein "SVG" verwendet wird, kann dieses aber per CSS angepasst werden,
und wenn man das will, muss man die "erste" Variante nutzen.Ahh, vielen Dank, wieder was dazugelernt!
Sein Skript funktioniert in Fx 115, aber danach in keiner Fx Version mehr.
Danke, gut zu wissen!
-
Aber das Icon wird nicht angezeigt, weder Ihres noch meines. Das Icon befindet sich in /chrome/icons/.
Hmm, klappt hier mit den Icons.
Evtl. könnte unsere hiesige JS Icon Expertin Mira_Belle sich das mal anschauen. -
Falls du nach einem Button gesucht hast, funktioniert sowas evtl.?
JavaScript
Alles anzeigen// titlebar tabs (function() { if (!window.gBrowser) return; const prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); try { CustomizableUI.createWidget({ id: 'title_toggle', type: 'custom', defaultArea: CustomizableUI.AREA_NAVBAR, onBuild: function(aDocument) { let toolbaritem = aDocument.createXULElement('toolbarbutton'); let buttonicon = "Letterst-2a.png" let props = { id: 'title_toggle', class: 'toolbarbutton-1 chromeclass-toolbar-additional', label: 'Titlebar Tabs', tooltiptext: 'Tabs in Titlebar', style: 'list-style-image: url("' + ProfilePath + buttonicon + '");' }; for (let p in props) toolbaritem.setAttribute(p, props[p]); return toolbaritem; } }); } catch(e) { } document.getElementById('title_toggle').addEventListener('click', event => { if (event.button === 0) { tabsTitlebar(); } }); function tabsTitlebar() { if (prefs.getIntPref("browser.tabs.inTitlebar") === 0) { prefs.setIntPref("browser.tabs.inTitlebar", 1); } else { prefs.setIntPref("browser.tabs.inTitlebar", 0); } }; })();
Icon: Letterst-2a.png.zip
-
Danke für's Nachschauen.
Ich glaube fast dass es tatsächlich ein Mac, und evtl. auch ein Linux spezifisches Problem ist, s. hier.
Mac Fx hat ein eigenes inline Margin für diesen Pfeil, war schon lange so, und das wird anscheinend zu spät oder gar nicht dazugelesen mit dem in #636 erwähnten Code.Edit: meine aktuelle Version hier und eine BrokenHeart Variante hier, nur zur besseren Übersicht.
-
-
-
Hier der Block, der sich geändert hat. Geht im Test-Skript von Zeile 30 bis Zeile 50. Alles andere braucht nicht angepasst werden:
JavaScript
Alles anzeigenif(bmbMenu) { let bmbMenuPopup = document.getElementById('BMB_bookmarksPopup'); if(bmbMenuPopup) { bmbMenuPopup.openPopup(); bmbMenuPopup.hidePopup(); bmbMenuPopup.setAttribute("hasbeenopened","true"); } bmbMenu.addEventListener('popupshowing', onPopupShowing ); } if(bookMenu) { let bookMenuPopup = document.getElementById('bookmarksMenuPopup'); if(bookMenuPopup) { bookMenuPopup.openPopup(); bookMenuPopup.hidePopup(); bookMenuPopup.setAttribute("hasbeenopened","true"); } bookMenu.addEventListener('popupshowing', onPopupShowing ); } if(persToolBar) { persToolBar.addEventListener('popupshowing', onPopupShowing ); }
Leider ein kleines Problem, in diversen Scriptvarianten.
Im ersten Popup vom Lesezeichen Menu Button werden die Zähler zu weit nach rechts gerückt zum Pfeil > hin mit diesem Code, nicht aber mit den älteren Versionen.
Das bei rechtsbündigen Zählern, via zB margin-inline: auto 0;.Wenn ich Zeilen 4+5 auskommentiere, ist das Problem behoben, weiss aber nicht ob das für die Funktion der Menüleiste gebraucht wird.
Anhang #1 Lesezeichenleiste Popup, #2 Lesezeichen Menu Popup alter Code, #3 Lesezeichen Menu Popup neuer Code.
-
-
-
Das einzige, wenn ich padEnd in padStart ändere (wie von Mira_Belle in #620 beschrieben) ändert sich nichts.
Ich hätte die Symbole doch gerne vor den Zahlen. Die Frage ist wie ?
padEnd ist nur für die Ausrichtung der Zahlen, links- oder rechtsbündig.
Hier noch ein Code mit den Icons links, umgekehrt ist mit dabei, nur auskommentiert.
Feinabstimmung mit background-position, und den Leerzeichen "\xa0" ausserhalb von String(menuCount).padEnd(2, '\xa0') bzw. String(menuitemCount).padStart(3, '\xa0').
Edit: etwas aufgehübscht:
JavaScript
Alles anzeigen//bookmark_count_basic.uc.js //Mitte Juli 2025 //Zeigt Anzahl der Lesezeichenordner und Links an in Lesezeichenpopups, Basisversion mit eigenen Icons //basiert auf Script von BrokenHeart => //https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1274984#post1274984 //Release => //https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1275152#post1275152 (function() { if (!window.gBrowser) return; setTimeout(function() { setFunction(); },50); let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); function setFunction() { const css =` .countClass { /* Eigene Icons in chrome/icons Ordner benutzen */ /* --bm_icon_image_1: url("${ProfilePath}/YourFolderIcon.svg"); --bm_icon_image_2: url("${ProfilePath}/YourLinkIcon.svg"); */ /* Firefox Icons benutzen */ --bm_icon_image_1: url("chrome://global/skin/icons/folder.svg"); --bm_icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg"); --bm_icon_size: 16px; justify-content: space-between; } .countClass::after { content: attr(data-value); display: flex; align-items: center; max-height: var(--bm_icon_size); padding-block: 2px 0; /* Text vertikal ausrichten, optional */ /*margin-right: -12px;*/ /* Abstand rechts zu Pfeil > , optional */ font-family: Consolas, "Lucida Console", "Courier New", monospace !important; font-size: 12px !important; font-weight: 1000 !important; -webkit-text-fill-color: blue !important; fill: red !important; background-image: var(--bm_icon_image_1), var(--bm_icon_image_2); background-repeat: no-repeat; background-size: var(--bm_icon_size); /* Fuer Zahl links, s. JS Code ganz unten */ /* background-position: right 4.33em center, right 0 center; padding-left: 8px; */ /* Fuer Zahl rechts */ background-position: right 5.833em center, right 2.166em center; padding-left: 30px; } `; 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); let bmbMenu = document.getElementById('bookmarks-menu-button'); let bookMenu = document.getElementById('bookmarksMenu'); let persToolBar = document.getElementById('PersonalToolbar'); if(bmbMenu) { let bmbMenuPopup = document.getElementById('BMB_bookmarksPopup'); if(bmbMenuPopup) { bmbMenuPopup.openPopup(); bmbMenuPopup.hidePopup(); bmbMenuPopup.setAttribute("hasbeenopened","true"); } bmbMenu.addEventListener('popupshowing', onPopupShowing ); } if(bookMenu) { let bookMenuPopup = document.getElementById('bookmarksMenuPopup'); if(bookMenuPopup) { bookMenuPopup.openPopup(); bookMenuPopup.hidePopup(); bookMenuPopup.setAttribute("hasbeenopened","true"); } bookMenu.addEventListener('popupshowing', onPopupShowing ); } if(persToolBar) { persToolBar.addEventListener('popupshowing', onPopupShowing ); } } function onPopupShowing(aEvent) { let popup = aEvent.originalTarget; for (let item of popup.children) { if (item.localName != 'menu' || item.id?.startsWith('history')) continue; setTimeout(() => { let itemPopup = item.menupopup; itemPopup.hidden = true; itemPopup.collapsed = true; itemPopup.openPopup(); itemPopup.hidePopup(); let menuitemCount = 0; let menuCount = 0; for (let subitem of itemPopup.children) { if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) { if (subitem.localName == 'menuitem') { menuitemCount++; } else if (subitem.localName == 'menu') { menuCount++; } } } itemPopup.hidden = false; itemPopup.collapsed = false; let bm_label = item.childNodes[1]; //label.menu-iconic-text bm_label.classList.add('countClass'); // Zahl links //let strCountOut = String(menuCount).padEnd(2, '\xa0') + "\xa0\xa0\xa0\xa0" + String(menuitemCount).padEnd(3, '\xa0') + "\xa0\xa0\xa0"; // Zahl rechts let strCountOut = String(menuCount).padStart(2, '\xa0') + "\xa0\xa0\xa0\xa0" + String(menuitemCount).padStart(3, '\xa0'); bm_label.setAttribute('data-value', strCountOut); }, 100); } } })();
-
So kann man sie ändern, copy/paste, ganz einfach.
Ich danke dir, jetzt habe auch ich verstanden, dass es nur damit möglich ist.
Nicht unbedingt, da gab's auch schon sowas in der Art:
JavaScript
Alles anzeigen(function() { if (!window.gBrowser) return; setTimeout(function() { setFunction(); },50); let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons')); function setFunction() { const css =` .countClass { /* --bm_icon_image_1: url("${ProfilePath}/YourFolderIcon.svg"); --bm_icon_image_2: url("${ProfilePath}/YourLinkIcon.svg"); */ --bm_icon_image_1: url("chrome://global/skin/icons/folder.svg"); --bm_icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg"); } .countClass::after { content: attr(data-value); display: flex; align-items: center; font-family: Consolas, "Lucida Console", "Courier New", monospace !important; font-size: 12px !important; font-weight: 1000 !important; -webkit-text-fill-color: blue !important; fill: red !important; background-image: var(--bm_icon_image_1), var(--bm_icon_image_2); background-position: right 4.33em center, right 0 center; background-repeat: no-repeat; background-size: 16px; margin-inline: auto 0 !important; } `; const sss = Cc['@mozilla.org/content/style-sheet-service;1'].getService(Ci.nsIStyleSheetService); const uri = Services.io.newURI('data:text/css,' + encodeURIComponent(css)); sss.loadAndRegisterSheet(uri, sss.AGENT_SHEET); let bmbMenu = document.getElementById('bookmarks-menu-button'); let bookMenu = document.getElementById('bookmarksMenu'); let persToolBar = document.getElementById('PersonalToolbar'); if(bmbMenu) { let bmbMenuPopup = document.getElementById('BMB_bookmarksPopup'); if(bmbMenuPopup) { bmbMenuPopup.openPopup(); bmbMenuPopup.hidePopup(); bmbMenuPopup.setAttribute("hasbeenopened","true"); } bmbMenu.addEventListener('popupshowing', onPopupShowing ); } if(bookMenu) { let bookMenuPopup = document.getElementById('bookmarksMenuPopup'); if(bookMenuPopup) { bookMenuPopup.openPopup(); bookMenuPopup.hidePopup(); bookMenuPopup.setAttribute("hasbeenopened","true"); } bookMenu.addEventListener('popupshowing', onPopupShowing ); } if(persToolBar) { persToolBar.addEventListener('popupshowing', onPopupShowing ); } } function onPopupShowing(aEvent) { let popup = aEvent.originalTarget; for (let item of popup.children) { if (item.localName != 'menu' || item.id?.startsWith('history')) continue; setTimeout(() => { let itemPopup = item.menupopup; itemPopup.hidden = true; itemPopup.collapsed = true; itemPopup.openPopup(); itemPopup.hidePopup(); let menuitemCount = 0; let menuCount = 0; for (let subitem of itemPopup.children) { if (subitem.classList.contains('bookmark-item') && !subitem.disabled && !subitem.hidden) { if (subitem.localName == 'menuitem') { menuitemCount++; } else if (subitem.localName == 'menu') { menuCount++; } } } itemPopup.hidden = false; itemPopup.collapsed = false; let label = item.childNodes[1]; //label.menu-iconic-text label.classList.add('countClass'); let strCountOut = String(menuCount).padEnd(2, '\xa0') + "\xa0" + "\xa0" + "\xa0" + "\xa0" + String(menuitemCount).padEnd(3, '\xa0') + "\xa0" + "\xa0" + "\xa0"; label.setAttribute('data-value', strCountOut); }, 100); } } })();
-
-
-
und dieses Script, es ist das aus #580 angepasst
Also willst du die Zahlen linksbündig haben, nicht wie in dem Script in #580?
Na dann.Das Script in #580 ist das Ding unten übrigens, nicht der Codeblock oben zur Korrektur des Menüleiste Problems.
Will aber nicht kleinlich sein, Gedankenlesen gehört dazu. -
Deine Änderung bewirkt leider nichts,
Äh, kann nicht sein! Die Zahlen sind rechtsbündig!
Denke Boersenfeger benutzt nicht die Version aus #580 wie behauptet, sondern irgendeinen alten Code mit linksbündigen Zahlen, wie in seinen Screenshots zu sehen ist.
Ich vermute auch, er hat mit Zahlen Zähler/Counter gemeint, was Zahl + Icon ist, wie du erklärt hast, während Zahlen nur die Zahlen sind. -
Brauche ich nicht lesen, weil ich damit schon fertig werde. Wenn du es nicht verstanden haben solltest, es geht nur um das Test-Script von BrokenHeart , wie die Icons dort eingefügt wurden, und wie man diese ändern könnte.
So kann man sie ändern, copy/paste, ganz einfach.
-
Ich auch, aber die letzte Version von BrokenHeart aus meinem Beitrag #583 läuft prima. Ganz unten sind die Icon eingearbeitet, welche ich, wenn es gehen sollte, austauschen möchte.
Die Icons wie die von der von Andreas in #591 verlinkten Seite klappen nicht?
Falls du eigene Icons meinst, wie svgs, .pngs etc. auf deinem System, dann blätter ein paar 100 Beiträge zurück und lies bis hierher.