Jupp, ein kleiner Fehler im Script, der hier jetzt korrigiert.
Den hatte ich gar nicht gesehen - aber beim Anpassen zufällig an der richtigen Stelle die Schere angesetzt...
Jupp, ein kleiner Fehler im Script, der hier jetzt korrigiert.
Den hatte ich gar nicht gesehen - aber beim Anpassen zufällig an der richtigen Stelle die Schere angesetzt...
Dharkness Hast Du außer den Symbolen noch etwas ......
AH, Hostmann ist da ein kleiner Fauxpas unterlaufen!Ersetze mal...
Aktiviere nun Deine gewünschte Anzeige.
Arrrghhhh!!!
Sorry Leute, hab ich oben geändert, danke für's Testen und den Hinweis!
Sorry Leute, hab ich oben geändert, danke für's Testen und den Hinweis!
![]()
Dafür sind wir doch hier und glaube mir, wir machen das gerne, denn so lernen wir auch immer was dazu, Dankeschön für das Script, es mach sein Aufgabe wirklich sehr gut.
für den Pfeil habe ich eine Lösung gefunden,
Von welchem Pfeil redest du? Ich sehe/verstehe das "Problem" nicht...
Der Pfeil bzw. Chevron ganz rechts, der zum Unterordner zeigt.
Den wollte ich unbedingt umfärben/stylen können, wenn beide Zähler auf 0 stehen.
Und dann hast Du auch noch jene, bei der die Icons als background-images eingebunden werden.
Ich bin gespannt.
Ok, ich bin ungeduldig!
Aber wenn DAS klappt, werde ich mein Problem mit den Grafikgrößen wieder los!
Denn ich habe die original SVG nur in width="1344" height="1339" vorliegen.
Bisher arbeite ich mit einer "Notlösung".
Den wollte ich unbedingt umfärben/stylen können, wenn beide Zähler auf 0 stehen.
Ahh... Konnte ich mangels leerem Ordner nicht nachstellen...
Ok, ich bin ungeduldig!
Aber wenn DAS klappt, werde ich mein Problem mit den Grafikgrößen wieder los!
Denn ich habe die original SVG nur in width="1344" height="1339" vorliegen.
Bisher arbeite ich mit einer "Notlösung".
Ich möchte spielen...
Puuuh, der Druck...
Hier mal was zum Antesten; mit den Variablen hab ich mal langsam gemacht, das kann man noch weiter automatisieren.
Wenn man die Abstände regulieren möchte, dann momentan manuell; ich hoffe die Anmerkungen machen Sinn, bzw. habt ihr das bestimmt sowieso schon rausgefunden.
Beim Ändern der Icongrösse (--bm_icon_size) Variable kann alles mögliche passieren, hab ich nur grob ausprobiert; das ist halt immer etwas spannend in Firefox.
Hoffe das klappt mit den grossen .svgs von Mira auch, eigentlich sollte background-size das erledigen.
Abgesehen von Zeile 41-57 ist das Script identisch zum alten; Icons die gleichen etc..
Ich hoffe da sind nicht wieder dumme copy/paste Fehler drin.
Kritik und Fehlermeldungen wie immer willkommen; wenn soweit würde ich das die Tage dann mal sauber machen und "offiziell" einstellen.
//bmcount testa neu G sauber Sibling TEST no multi Pfeil targeted brackets TEST background images TEST
// 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=1269879#post1269879
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Custom icons in profile/chrome/icons folder
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
let icon1 = "YourFolderIcon.png" // Custom Folder Icon
let icon2 = "YourLinkIcon.svg" // Custom Link Icon
function setFunction() {
const css =`
/* Counter rechtsbuendig */
#bmContent {
display: flex !important;
margin-inline: auto 0 !important;
}
/** Alternative Icons separat, TEST!!! **/
/* Feste Breite der Counter abhaengig von Anzahl/Grösse Ziffern -> Icons untereinander auf gleicher Hoehe */
/* --bm_width = Icon Grösse 16px Standard + Fontbreite + Abstand Icon zu Zahl */
/* --bm_icon_size = Icon Grösse anders als 16px Firefox Standard --> Abstand Icon zu Zahl in --bm_width_one anpassen */
#bmContent {
--bm_width_one: calc(var(--bm_icon_size) + 2.1em + 2px);
--bm_width_two: calc(var(--bm_icon_size) + 2.1em + 2px);
--bm_icon_size: 16px;
}
#bmContent {
background-image: url("${ProfilePath}/${icon1}"), url("${ProfilePath}/${icon2}") !important;
background-position: center left calc(var(--bm_icon_size)),
center right calc(var(--bm_width_two) - var(--bm_icon_size));
background-repeat: no-repeat;
background-size: var(--bm_icon_size) var(--bm_icon_size);
height: var(--bm_icon_size);
}
/* Counter #1 Folder */
#bmContent::before {
content: attr(data-value1);
width: var(--bm_width_one);
justify-content: end;
align-items: center;
display: flex;
margin-inline: 16px 8px; /* min. Abstand links für enge Popups, rechts zum 2ten Counter */
}
/* Counter #2 Links */
#bmContent::after {
content: attr(data-value2);
width: var(--bm_width_two);
align-items: center;
display: flex;
justify-content: end;
}
/** Adjust/hide if count = 0 **/
/* Hide/Dim #1 folder counter if Count = 0 */
#bmContent[data-value1="[0]"]::before,
#bmContent[data-value1="0"]::before,
#bmContent[data-value1="(0)"]::before {
opacity: 0.2;
}
/* Dim #2 icon counter if Count = 0 */
#bmContent[data-value2="[0]"]::after,
#bmContent[data-value2="0"]::after,
#bmContent[data-value2="(0)"]::after {
opacity: 0.5;
}
/* Hide empty Popup */
menu.menu-iconic.bookmark-item menupopup[emptyplacesresult="true"] {
display: none !important;
}
/* Arrow before empty Popup */
.pfeil[data-value3="[0][0]"] ~ .menu-right image,
.pfeil[data-value3="00"] ~ .menu-right image,
.pfeil[data-value3="(0)(0)"] ~ .menu-right image {
fill: rgba(255, 150, 68, 1.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)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)
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;
// Neues Element für Zaehler
let bmCounta = item.childNodes[1];
bmCounta.innerHTML = ""
let bmContent = document.createElement("bmContent");
bmContent.id = "bmContent";
bmCounta.appendChild(bmContent);
//let strCountOut1 = "" + menuCount + ""; // Has no brackets
//let strCountOut1 = "(" + menuCount + ")"; // Has round brackets
let strCountOut1 = "[" + menuCount + "]"; // Has square brackets
bmContent.setAttribute('data-value1', strCountOut1);
//let strCountOut2 = "" + menuitemCount + ""; // Has no brackets
//let strCountOut2 = "(" + menuitemCount + ")"; // Has round brackets
let strCountOut2 = "[" + menuitemCount + "]"; // Has square brackets
bmContent.setAttribute('data-value2', strCountOut2);
// Attribut parent va für 0 + 0
if (bmContent.parentElement) {
bmContent.parentElement.classList.add('pfeil');
bmContent.parentElement.setAttribute('data-value3', strCountOut1 + strCountOut2);
}
}, 100);
}
}
})();
Alles anzeigen
Ich hoffe da sind nicht wieder dumme copy/paste Fehler drin.
Leider doch - Zeile 42. Da hast du 2x icon1 verwendet...
Ich hoffe da sind nicht wieder dumme copy/paste Fehler drin.
Leider doch - Zeile 42. Da hast du 2x icon1 verwendet...
Uuunglaublich..... Danke, geändert....
Mist; das dimmen oder entfernen bei Anzahl 0 funktioniert nicht mehr für die Icons mit der neuen Version; also wieder ran...
Komisch, hier klappt das (in der Nightly)...
Komisch, hier klappt das (in der Nightly)...
Aber nur die Zahl 0 wird gedimmt, nicht das dazugehörige Icon, oder?
Danke Schlafrhythmus Schwankung (wesentliche Änderungen Zeile 40-80) :
//bmcount testa neu G sauber Sibling TEST no multi Pfeil targeted brackets TEST background images TEST 2
// 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=1269879#post1269879
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Custom icons in profile/chrome/icons folder
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
let icon1 = "YourFolderIcon.png" // Custom Folder Icon
let icon2 = "YourLinkIcon.svg" // Custom Link Icon
function setFunction() {
const css =`
/* Counter rechtsbuendig */
#bmContent {
display: flex !important;
margin-inline: auto 0 !important;
}
/* If Icons/text uebergross center content vertically / optional */
/*
menu.menu-iconic.bookmark-item .pfeil {
align-items: center;
outline: 1px solid red;
outline-offset: 2px;
}
*/
/** Alternative Icons separat, TEST2!!! **/
/* Feste Breite der Counter abhaengig von Anzahl/Grösse Ziffern -> Icons untereinander auf gleicher Hoehe */
/* --bm_width = Icon Grösse 16px Standard + Fontbreite + Abstand Icon zu Zahl */
/* --bm_icon_size = Icon Grösse anders als 16px Firefox Standard --> Abstand Icon zu Zahl in --bm_width_one anpassen */
#bmContent {
--bm_width_one: calc(var(--bm_icon_size) + 2.1em + 2px);
--bm_width_two: calc(var(--bm_icon_size) + 2.1em + 2px);
--bm_icon_size: 16px;
height: var(--bm_icon_size);
/*outline: 1px solid orange;
outline-offset: 1px;*/
}
/* Counter #1 Folder */
#bmContent::before {
content: attr(data-value1);
display: flex;
width: var(--bm_width_one);
justify-content: end;
align-items: center;
margin-inline: 16px 8px; /* min. Abstand links für enge Popups, rechts zum 2ten Counter */
background-image: url("${ProfilePath}/${icon1}")!important;
background-position: center right calc(var(--bm_width_one) - var(--bm_icon_size));
background-repeat: no-repeat;
background-size: var(--bm_icon_size) var(--bm_icon_size);
/*outline: 1px solid lightgreen;*/
}
/* Counter #2 Links */
#bmContent::after {
content: attr(data-value2);
display: flex;
width: var(--bm_width_two);
align-items: center;
justify-content: end;
background-image: url("${ProfilePath}/${icon2}") !important;
background-position: center right calc(var(--bm_width_two) - var(--bm_icon_size));
background-repeat: no-repeat;
background-size: var(--bm_icon_size) var(--bm_icon_size);
/*outline: 1px solid lightblue;*/
}
/** Adjust/hide if count = 0 **/
/* Hide/Dim #1 icon + counter if Count = 0 */
#bmContent[data-value1="[0]"]::before,
#bmContent[data-value1="0"]::before,
#bmContent[data-value1="(0)"]::before {
opacity: 0.2;
}
/* Dim #2 icon + counter if Count = 0 */
#bmContent[data-value2="[0]"]::after,
#bmContent[data-value2="0"]::after,
#bmContent[data-value2="(0)"]::after {
opacity: 0.5;
}
/* Hide empty Popup */
menu.menu-iconic.bookmark-item menupopup[emptyplacesresult="true"] {
display: none !important;
}
/* Arrow before empty Popup */
.pfeil[data-value3="[0][0]"] ~ .menu-right image,
.pfeil[data-value3="00"] ~ .menu-right image,
.pfeil[data-value3="(0)(0)"] ~ .menu-right image {
fill: rgba(255, 150, 68, 1.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)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)-
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;
// Neues Element für Zaehler
let bmCounta = item.childNodes[1];
bmCounta.innerHTML = ""
let bmContent = document.createElement("bmContent");
bmContent.id = "bmContent";
bmCounta.appendChild(bmContent);
//let strCountOut1 = "" + menuCount + ""; // Has no brackets
//let strCountOut1 = "(" + menuCount + ")"; // Has round brackets
let strCountOut1 = "[" + menuCount + "]"; // Has square brackets
bmContent.setAttribute('data-value1', strCountOut1);
//let strCountOut2 = "" + menuitemCount + ""; // Has no brackets
//let strCountOut2 = "(" + menuitemCount + ")"; // Has round brackets
let strCountOut2 = "[" + menuitemCount + "]"; // Has square brackets
bmContent.setAttribute('data-value2', strCountOut2);
// Attribut parent va für 0 + 0
if (bmContent.parentElement) {
bmContent.parentElement.classList.add('pfeil');
bmContent.parentElement.setAttribute('data-value3', strCountOut1 + strCountOut2);
}
}, 100);
}
}
})();
Alles anzeigen
Aber nur die Zahl 0 wird gedimmt, nicht das dazugehörige Icon, oder?
Stimmt - war mir vorhin nicht aufgefallen, da ich die Icons nicht angepaßt hatte...
Mit der neuen Version sieht das besser aus.
Ich habe auch so meine Probleme.
1. Die Grafiken lassen sich nicht mehr einzeln ansprechen, damit man z.B. unterschiedliche Farben wählen kann.
Das andere Problem konnte ich lösen. Die Variablen
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Custom icons in profile/chrome/icons folder
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
//let icon1 = "Test_3.svg" // Custom Folder Icon
let icon1 = "folder-fat.svg";
let icon2 = "bookmark-hollow.svg"; // Custom Link Icon
let cs_font_size = 12;
let cs_font_weight = 700;
let cs_font_color = "#FFD700";
let cs_icon_color = "#C0C0C0";
let bm_icon_size = 16;
let cm_icon_size = `${bm_icon_size}px`;
let cm_width_one = `calc(${bm_icon_size}px + 1.4em)`;
let cm_width_two = `calc(${bm_icon_size}px + 1.4em)`;
function setFunction() {
const css =`
/* Counter rechtsbuendig */
#bmContent {
display: flex !important;
margin-inline: auto 0 !important;
font-family: Consolas, "Lucida Console", "Courier New", monospace !important;
font-size: ${cs_font_size}px !important;
font-weight: ${cs_font_weight} !important;
}
/* Feste Breite der Counter abhaengig von Anzahl/Grösse Ziffern -> Icons untereinander auf gleicher Hoehe */
/* --bm_width = Icon Grösse 16px Standard + Fontbreite (+ Abstand Icon zu Zahl) gelöscht "+ 2px" */
#bmContent {
background-image: url("${ProfilePath}/${icon1}"), url("${ProfilePath}/${icon2}") !important;
background-position: center left calc(${cm_icon_size}),
center right calc(${cm_width_two} - ${cm_icon_size});
background-repeat: no-repeat;
background-size: ${cm_icon_size} ${cm_icon_size};
height: ${cm_icon_size};
fill: ${cs_icon_color}; /* Farbe der Icons */
}
/* Counter #1 Folder */
#bmContent::before {
content: attr(data-value1);
width: ${cm_width_one};
align-items: center;
display: flex;
justify-content: end;
margin-inline: 16px 8px; /* min. Abstand links für enge Popups, rechts zum 2ten Counter */
color: ${cs_font_color}; /* Farbe der 1. Zahl */
}
/* Counter #2 Links */
#bmContent::after {
content: attr(data-value2);
width: ${cm_width_two};
align-items: center;
display: flex;
justify-content: end;
color: ${cs_font_color}; /* Farbe der 2. Zahl */
margin-inline: -2px;
}
`;
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)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)
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;
// Neues Element für Zaehler
let bmCounta = item.childNodes[1];
if (!bmCounta) return; // Falls undefiniert
bmCounta.innerHTML = ""
let bmContent = document.createElement("bmContent");
bmContent.id = "bmContent";
bmCounta.appendChild(bmContent);
//let strCountOut1 = "" + menuCount + ""; // Has no brackets
//let strCountOut1 = "(" + menuCount + ")"; // Has round brackets
//let strCountOut1 = "[" + menuCount + "]"; // Has square brackets
let strCountOut1 = String(menuCount).padEnd(2, " ");
bmContent.setAttribute('data-value1', strCountOut1);
//let strCountOut2 = "" + menuitemCount + ""; // Has no brackets
//let strCountOut2 = "(" + menuitemCount + ")"; // Has round brackets
//let strCountOut2 = "[" + menuitemCount + "]"; // Has square brackets
let strCountOut2 = String(menuitemCount).padEnd(2, " ");
bmContent.setAttribute('data-value2', strCountOut2);
// Attribut parent va für 0 + 0
if (bmContent.parentElement) {
bmContent.parentElement.classList.add('pfeil');
bmContent.parentElement.setAttribute('data-value3', strCountOut1 + strCountOut2);
}
}, 100);
}
}
})();
Alles anzeigen
Ich habe auch so meine Probleme.
1. Die Grafiken lassen sich nicht mehr einzeln ansprechen, damit man z.B. unterschiedliche Farben wählen kann.Das andere Problem konnte ich lösen. Die Variablen
Danke für den Test!
Die letzte Version hat die beiden Icons wieder aufgeteilt auf die beiden Pseudoelemente, aber diesmal als bg-image statt content, sollten also einzeln ansprechbar sein.
Die Position ist dann jeweils auch anzupassen, ist aber letztlich einfacher zu handhaben; background-position für beide wird jetzt von center right Xpx gemessen.
Im Prinzip den background-image code von #bmContent einfach in die after/before Pseudos verschieben, aber eben nur für jeweils ein Icon.
Bis auf die Icons kannste auch einfach die CSS Variablen benutzen, deine machen ja eigentlich das gleiche.
Den String würd ich selber ja rauswerfen; das padEnd ist quasi schon im CSS eingebaut und alle Abstände damit einstellbar.
Mit der neuen Version sieht das besser aus.
Prima, danke wieder für den Test!
Gut zu hören dass es auch in Nightly fluppt.
So, lieber Horstmann, habe etwas an Deinem neuen Skript herumgebastelt!
Für mich ist es jetzt perfekt!
Ich danke Dir ganz, ganz lich für Dein gelungenes CSS!
Ich habe mir erlaubt, die Variablen in JavaScript zu realisieren.
Man beachte bitte die kleine Fehlerkorrektur in Zeile 125.
Ganz toll finde ich, dass ich nun wieder SVG nutzen kann, die eben nicht auf 16px*16px fest genagelt sind,
sondern eben auch solche, die viel größer sind!
Hier nun meine finale Abwandlung!
// BookmarkCount.uc.js
/* ******************************************************************************************************************* */
/* Author BrokenHeart => https://www.camp-firefox.de/forum/thema/136572/?postID=1229536#post1229536 **** */
/* Correction from BrokenHeart => https://www.camp-firefox.de/forum/thema/136572/?postID=1229696#post1229696 **** */
/* Extension from Sören Henschel => https://www.camp-firefox.de/forum/thema/136572/?postID=1229555#post1229555 **** */
/* Customized by Mira inspired by grisu2099 ********************************************************************** */
/* Source => https://www.camp-firefox.de/forum/thema/136572/?postID=1229875#post1229883 **** */
/* Customized by Mira inspired by Horstmann ********************************************************************** */
/* Source => https://www.camp-firefox.de/forum/thema/136572/?postID=1229993#post1229993 **** */
/* Adjustments for 139 and customized by Mira inspired by Horstmann ********************************************** */
/* Source => https://www.camp-firefox.de/forum/thema/136572/?postID=1270254#post1270254 **** */
/* ******************************************************************************************************************* */
/* Version 1.01 => https://www.camp-firefox.de/forum/thema/136572/?postID=1230128#post1230128 **** */
/* Version 1.02 => https://www.camp-firefox.de/forum/thema/136572/?postID=1230334#post1230334 **** */
/* Version 1.03a => https://www.camp-firefox.de/forum/thema/136572/?postID=1270258#post1270258 **** */
/* ******************************************************************************************************************* */
/* Custom Counter in the Bookmarks for folders and links ************************************************************* */
/* ******************************************************************************************************************* */
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Custom icons in profile/chrome/icons folder
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
let icon1 = "folder-fat.svg"; // Custom Folder Icon
let icon2 = "bookmark-hollow.svg"; // Custom Link Icon
// Custom settings
let bm_font_size = 12;
let cs_font_weight = 700;
let cs_font_color = "#FFD700";
let cs_icon_color = "#C0C0C0";
let bm_icon_size = 16;
// Calculated settings
let cs_font_size = `${bm_font_size}px`;
let cs_icon_size = `${bm_icon_size}px`;
let cs_width_one = `calc(${bm_icon_size}px + 1.4em)`;
let cs_width_two = `calc(${bm_icon_size}px + 1.4em)`;
function setFunction() {
const css =`
/* Counter rechtsbuendig */
#bmContent {
display: flex !important;
margin-inline: auto 0 !important;
font-family: Consolas, "Lucida Console", "Courier New", monospace !important;
font-size: ${cs_font_size} !important;
font-weight: ${cs_font_weight} !important;
height: ${cs_icon_size};
}
/* Counter #1 Folder */
#bmContent::before {
content: attr(data-value1);
width: ${cs_width_one};
align-items: center;
display: flex;
justify-content: end;
margin-inline: 16px 4px; /* min. Abstand links für enge Popups, rechts zum 2ten Counter */
background-image: url("${ProfilePath}/${icon1}")!important;
background-position: center right calc(${cs_width_one} - ${cs_icon_size});
background-repeat: no-repeat;
background-size: ${cs_icon_size} ${cs_icon_size};
color: ${cs_font_color}; /* Farbe der 1. Zahl */
fill: ${cs_icon_color}; /* Farbe des 1. Symbols */
}
/* Counter #2 Links */
#bmContent::after {
content: attr(data-value2);
width: ${cs_width_two};
align-items: center;
display: flex;
justify-content: end;
margin-inline: -2px;
background-image: url("${ProfilePath}/${icon2}") !important;
background-position: center right calc(${cs_width_two} - ${cs_icon_size});
background-repeat: no-repeat;
background-size: ${cs_icon_size} ${cs_icon_size};
color: ${cs_font_color}; /* Farbe der 2. Zahl */
fill: ${cs_icon_color}; /* Farbe des 2. Symbols */
}
`;
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)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)
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;
// Neues Element für Zaehler
let bmCounta = item.childNodes[1];
if (!bmCounta) return; // Falls undefiniert
bmCounta.innerHTML = ""
let bmContent = document.createElement("bmContent");
bmContent.id = "bmContent";
bmCounta.appendChild(bmContent);
//let strCountOut1 = "" + menuCount + ""; // Has no brackets
//let strCountOut1 = "(" + menuCount + ")"; // Has round brackets
//let strCountOut1 = "[" + menuCount + "]"; // Has square brackets
let strCountOut1 = String(menuCount).padEnd(2, " ");
bmContent.setAttribute('data-value1', strCountOut1);
//let strCountOut2 = "" + menuitemCount + ""; // Has no brackets
//let strCountOut2 = "(" + menuitemCount + ")"; // Has round brackets
//let strCountOut2 = "[" + menuitemCount + "]"; // Has square brackets
let strCountOut2 = String(menuitemCount).padEnd(2, " ");
bmContent.setAttribute('data-value2', strCountOut2);
// Attribut parent va für 0 + 0
if (bmContent.parentElement) {
bmContent.parentElement.classList.add('pfeil');
bmContent.parentElement.setAttribute('data-value3', strCountOut1 + strCountOut2);
}
}, 100);
}
}
})();
Alles anzeigen
Funktioniert in der Nightly.
Für mich ist es jetzt perfekt!
Man beachte bitte die kleine Fehlerkorrektur in Zeile 125.Ganz toll finde ich, dass ich nun wieder SVG nutzen kann, die eben nicht auf 16px*16px fest genagelt sind,
sondern eben auch solche, die viel größer sind!Hier nun meine finale Abwandlung!
Funktioniert in der Nightly.
Super, hört sich prima an, und danke für's testen und die Tips!
(Was war denn die Fehlerkorrektur, und in welchem Script?)
Ich habe mir aus den zahlreichen "Horstmannschen Varianten" diese Version zusammengestrickt, die für meinen Geschmack perfekt paßt. Änderungen habe ich hauptsächlich im CSS-Bereich vorgenommen, im Abstände etc. anzupassen.
Getestet und angepaßt zur Verwendung in Nightly 139!
// bmcount testa neu D TEST! für Mira
// basiert auf Sript von BrokenHeart
// https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1269879#post1269879
// funktioniert in Nightly 139
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Custom icons in profile/chrome/icons folder
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
let icon1 = "Ordner.png"
let icon2 = "Stern.svg"
let cs_font_size = 12
let cs_font_weight = 600
let cs_font_color = "rgb(144,238,144)"
function setFunction() {
const css =`
#bmContent {
font-family: "Courier New", monospace !important;
font-size: ${cs_font_size}px !important;
font-weight: ${cs_font_weight} !important;
display: flex !important;
height: 16px !important;
margin-inline: auto -1px !important;
}
/* nur für Ordner in der Lesezeichen-Symbolleiste */
#PlacesToolbarItems #bmContent {
margin-top: 1px !important;
}
#bmContent::before {
content: attr(data-value1) " /";
background: url("${ProfilePath}/${icon1}") no-repeat 8px 0;
color: ${cs_font_color};
align-items: center;
display: inline-flex;
justify-content: flex-end;
width: 23px;
padding: 4px 0px 0 10px;
margin-inline: 10px 2px;
}
#bmContent::after {
content: attr(data-value2);
background: url("${ProfilePath}/${icon2}") no-repeat right 0;
background-size: 16px 16px;
color: ${cs_font_color};
align-items: center;
display: flex;
justify-content: flex-end;
width: 23px;
padding: 4px 17px 0 0;
/* border: 1px solid red; */
}
/* ::before oder ::after ausblenden, wenn der Zähler 0 anzeigen würde */
#bmContent[data-value1="0"]::before,
#bmContent[data-value2="0"]::after {
display: none !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)
bmbMenu.addEventListener('popupshowing', onPopupShowing );
if(bookMenu)
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 bmCounta = item.childNodes[1];
bmCounta.innerHTML = ""
let bmContent = document.createElement("bmContent");
bmContent.id = "bmContent";
bmCounta.appendChild(bmContent);
let strCountOut1 = menuCount;
bmContent.setAttribute('data-value1', strCountOut1);
let strCountOut2 = menuitemCount;
bmContent.setAttribute('data-value2', strCountOut2);
}, 100);
}
}
})();
Alles anzeigen
Ergibt dann:
Danke an alle Beteiligten
Was war denn die Fehlerkorrektur, und in welchem Script?
Mh. Ich habe mich da womöglich missverständlich ausgedrückt!
Es war kein Fehler im Skript, sondern ich habe da eine Fehlerkorrektur eingebaut!
Nachtrag.
Habe noch etwas gebastelt
Ich wollte die Farben der "Zähler" sowie der Symbole getrennt voneinander einstellen können.
Resultat:
// Custom settings
let bm_font_size = 12;
let cs_font_weight = 700;
//let cs_font_color = "#FFD700";
//let cs_icon_color = "#C0C0C0";
let bm_icon_size = 16;
// NEU: Schriftfarbe getrennt definieren
let cs_font_color_1 = "#FFD700"; // Farbe für Folder-Zähler (links)
let cs_font_color_2 = "#00FFFF"; // Farbe für Link-Zähler (rechts)
// NEU: Symbolfarber getrennt definieren
let cs_icon_color_1 = "#5fe575"; // Farbe für "Ordner", 1.Symbol
let cs_icon_color_2 = "#fbf328"; // Farbe für "Link", 2.Symbol
// Calculated settings
let cs_font_size = `${bm_font_size}px`;
let cs_icon_size = `${bm_icon_size}px`;
let cs_width_one = `calc(${bm_icon_size}px + 1.4em)`;
let cs_width_two = `calc(${bm_icon_size}px + 1.4em)`;
function setFunction() { ...
Alles anzeigen
Natürlich müssen auf die "Aufrufe" der Variablen angepasst werden
Wer es nicht hinbekommt, fragen, dann gibt es das ganze Skript.
Nur um es zu verdeutlichen, extreme Farben!
Nebenkriegsschauplatz!
Ich wollte diesen Pfeil direkt beeinflussen.
Farbe ändern.
Den Selektor habe ich gefunden.
menupopup > menu::after {
content: "";
background-image: url("chrome://global/skin/icons/arrow-right.svg");
background-size: contain;
width: 1em;
height: 1em;
fill: lime !mportant;
}
Trage ich DAS in die Stilbearbeitung ein, ändert sich die Farbe.
Toll.
Trage ich den Code im Skript ein, tut sich nichts