Mein komplettes Skript in Kombination mit dem Autopopup-Skript.
Hm, leider sind die Zahlen nicht nach rechts ausgerichtet.
Mein komplettes Skript in Kombination mit dem Autopopup-Skript.
Hm, leider sind die Zahlen nicht nach rechts ausgerichtet.
Zweites Skript AutoPopup.uc.js gelöscht, weil gemotzt wurde. Ist ok, ist aber eigentlich mein Thread.
Nimm es bitte nicht so Bierernst, Du hast ja recht.
ZitatDu kannst extra für Mac erforderlich reinschreiben bis die Kühe bellen, aber da gibt es keinen Zusammenhang.
Ist das so? Dann kann ich es auch wieder löschen, komplett!
Denn beides
let bmbMenuPop = document.getElementById('BMB_bookmarksPopup'); //--- extra für Mac erforderlich
und
if(bmbMenuPop) {
bmbMenuPop.addEventListener('popupshowing', onPopupShowing ); //--- extra für Mac erforderlich
}
brauche ich nicht!
Ich hatte das nur deinetwegen im Code.
ist aber eigentlich mein Thread.
Meinst du damit diesen Thread?
Wenn ja, der wurde von grisu2099 erstellt:
Dharkness
Ändere ganz am Ende den Code!
let strCountOut1 = String(menuCount).padStart(2, " ");
bmContent.setAttribute('data-value1', strCountOut1);
let strCountOut2 = (useStyle === 0)
? String(menuitemCount).padStart(4, "/ ")
: String(menuitemCount).padStart(2, " ");
bmContent.setAttribute('data-value2', strCountOut2);
Also let strCountOut1 = String(menuCount).padEnd(2, " "); in
let strCountOut1 = String(menuCount).padStart(2, " ");
und : String(menuitemCount).padEnd(2, " "); in : String(menuitemCount).padStart(2, " ");.
Das ist alles.
Meinst du damit diesen Thread?
Wenn ja, der wurde von grisu2099 erstellt:
Oh, hab' ich mich da etwa einfach drauf gehängt?
Habe ich wohl, aber es war meine Frage, richtig?
Sorry.
Mira_Belle , war nicht ernst gemeint, nur eine kleine Stichelei, sorry!
Horstmann Schon gut, aber recht hattest Du ja. (Mit dem zweiten Skript)
Was das mit dem zusätzlichen Code angeht, warte ich jetzt ab, bis es ein allgemein gütliches Codefragment gibt.
Denn ich brauche die zwei Zeilen Code eigentlich nicht. Bei Dir, wenn ich es richtig verstanden habe, aber schon.
Kannst du mal ein GIF von deinem Darstellungsproblem erzeugen? Irgendwie weiß ich im Moment nicht, wie ich mir das vorzustellen habe.
Wer hätte es gedacht, der Mac kann Bildschirmaufnahmen, mit QT Player.
Hier dann gifs: #1 mit dem Problem, #2 ohne, nur als Info.
Wie erwähnt, nur dann ein Problem wenn die Breite ohne Zähler kleiner als die max-width (30em ?) des Elements ist, und nur beim ersten Öffnen in einem Fenster.
#1 wäre dann nur mit:
#2 wäre die alte Version mit popupshowing, oder mit gleicher Wirkung diese erweiterte neue Version:
if(bmbMenu)
bmbMenu.addEventListener('popupshown', onPopupShowing );
if(bmbMenuPop)
bmbMenuPop.addEventListener('popupshowing', onPopupShowing );
Hoffe das klappt mit den gifs:
Einen hätte ich noch, falls das mal jemand in Windows und/oder Linux testen möchte:
Bin nicht optimistisch, aber falls es geht könnte es den Code verschlanken.
//#5
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) {
bmbMenu.addEventListener('popupshown', onPopupShowing );
bookMenu.addEventListener('popupshown', onPopupShowing );
}
if(persToolBar)
persToolBar.addEventListener('popupshowing', onPopupShowing );
Alles anzeigen
Horstmann Das von Dir gezeigte Problem in #569 habe ich in meinem aktuellen Profil nicht.
Jedoch tritt genau das Gleiche in meinem Testprofil auf.
Werde der Sache noch auf den Grund gehen.
Hier dann gifs: #1 mit dem Problem, #2 ohne, nur als Info.
Danke für die gifs, aber jetzt bin ich noch verwirrter als vorher! Ich kann bei beiden gifs kein "Darstellungsproblem" erkennen, außer die schon vorher diskutierte sichtbare Vergrößerung der Breite, wenn die Zähler hinzugefügt werden.
Den einzigen Unterschied zwischen #1 und #2 sehe ich nur bei einem nachträglichen "Refresh" der unteren Zähler in #2, der ist bei #1 nicht vorhanden und daher sieht es hier etwas besser aus.
Kann mir denn keiner exakt mit Worten beschreiben, was ich eigentlich sehen sollte, damit auch ich das Problem in den gifs erkennen kann?
Wie erwähnt, nur dann ein Problem wenn die Breite ohne Zähler kleiner als die max-width (30em ?) des Elements ist, und nur beim ersten Öffnen in einem Fenster.
Die Breite des Menupopups wird wohl dynamisch der Breite des Inhalts angepasst, deshalb wohl die sichtbare Änderung der Breite, wenn Dich das stört, warum nagelst Du die Breite nicht fest? Sprich sowohl die maximale, als auch die minimale Breite auf 30em setzen und gut ist.
Die Breite des Menupopups wird wohl dynamisch der Breite des Inhalts angepasst, deshalb wohl die sichtbare Änderung der Breite, ...
Hmm, das hat noch niemand erwähnt auf den letzten paar Seiten, und schon gar nicht im Detail beschrieben.
Den einzigen Unterschied zwischen #1 und #2 sehe ich nur bei einem nachträglichen "Refresh" der unteren Zähler in #2, der ist bei #1 nicht vorhanden und daher sieht es hier etwas besser aus.
Das ist ein anderes Problem - Vorschläge willkommen.
Glaube mein Script hat Optimierungsbedarf.
In #1 werden die Zähler mit Verspätung geladen und angezeigt, und das Popup deshalb mit Verspätung in der Breite angepasst -> Ende der westlichen Zivilisation.
Übrigens, #570: geht, oder nada?
In #1 werden die Zähler mit Verspätung geladen und angezeigt, und ...
... und ich habe als auf die "dynamische" Breite geachtet!
Oh, Gott. Ja, das "nachladen" der Counter beim ersten Aufruf, egal welcher Lesezeichen, habe ich auch.
Nur geht das so schnell, dass es mich gar nicht stört!
Was die Breite angeht, die habe ich irgendwo festgezurrt, diesen Effekt, "dynamische" Breitenanpassung habe ich gar nicht!
Dann kann ich ja die Ursachenforschung beenden, da ich ja nach dem Falschen gesucht habe.
Oh, Gott. Ja, das "nachladen" der Counter beim ersten Aufruf, egal welcher Lesezeichen, habe ich auch.
Nur geht das so schnell, dass es mich gar nicht stört!
Was die Breite angeht, die habe ich irgendwo festgezurrt, diesen Effekt, "dynamische" Breitenanpassung habe ich gar nicht!
Danke wieder mal für's Testen!
Übrigens: in meinem eigenen, tatsächlich benutzten Hauptprofil ist die Popupbreite für den Lesezeichenmenü Button auch festgemeisselt, es ist mit zusammen einigen anderen Anpassungen mein Hauptnavigator für Lesezeichen - und ich benutze dieses Script für die Zähler nicht in diesem Popup - der Code den wir gerade diskutieren ist bei mir auskommentiert.
Eigentlich benutze ich es nur für die Lesezeichenleiste Popups, und die Lesezeichenleiste benutze ich 2x im Monat, die Menüleiste/Lesezeichen Schaltfläche 2x im Jahr (am Mac geht das Script eh nicht an der Stelle).
Aber es geht um das Prinzip und das Kulturgut, gerade heute ist es wichtig dafür zu kämpfen!
Apropos, #570?
Ganz ehrlich, ich sehe das eigentliche Problem immer noch nicht. Vielleicht ist meine Wahrnehmung zu 'grobmotorisch', aber Geschwindigkeitsunterschiede im Aufbau sind für nicht wahrnehmbar. Wie gesagt, vielleicht bin ich in dieser Beziehung ein ungeeigneter Tester.
Ein Lösung wäre möglicherweise zwei EventListener mit unterschiedlicher Behandlung für popupshown und popupshowing zu verwenden und das Popup beim Aufbau der Zähler zu verstecken. Mal schauen...
Apropos, #570?
Würde ich nicht so machen. Wenn der Button bmbMenu nicht vorhanden ist, fügst du beim Test auf das Menü bookMenu trotzdem einen Eventlistener für diesen Button hinzu, was zwangsläufig in einer Exception münden wird, da die Variable bmbMenu NULL/undefiniert ist...
Update:
Edit: Anpassung für Menüleiste, etwas Code Optimierung.
//bookmark_count.uc.js, RC_5.T Tresterschnaps
//Anfang Juli 2025
//Zeigt Anzahl der Lesezeichenordner und Links an in Lesezeichenpopups
//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
//Release Candidate 5.T: Fix Menueleiste Lesezeichen Popup von BrokenHeart
//https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1274978#post1274978
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
//Einstellungen Javascript =>
//Nach Script Aenderungen Neustart mit Start-Cache loeschen => about:support
//Eigenes Icon erwartet in Profilordner/chrome/icons, icons Ordner falls noetig erstellen
//Eigene Icons eintragen, falls vorhanden
let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
let bm_icon1 = 'YourFolderIcon.svg'; // Custom Folder Icon
let bm_icon2 = 'YourLinkIcon.svg'; // Custom Link Icon
//Variablen zur Auswahl der Icons; kein Auto Fallback falls eigenes Icon nicht vorhanden
let bm_icon_folder = 0; // Ordner: 0 Firefox Fallback Icon / 1 eigenes Icon
let bm_icon_link = 0; // Links: 0 Firefox Fallback Icon / 1 eigenes Icon
//Variablen zur Auswahl der Klammern
let bm_bracket = 0; // 0 keine Klammern / 1 runde Klammern / 2 eckige Klammern
//Variablen zur Auswahl der Reihenfolge
let bm_order = 0; // 0 Icons links Ziffern rechts / 1 Ziffern links Icons rechts
//Variablen zur Auswahl der Farben
let bm_colors = 0; // 0 Standardfarben / 1 eigene Farben benutzen
//Verblassen bei Zahl = 0
let bm_opacity_null = 1; // 0 kein Verblassen / 1 Verblassen Zahl, Icon, Trennlinie / 2 Verblassen nur Zahl
//Variablen zur Auswahl der Trennlinie
// 0 ohne Trennlinie
// 1 ohne Trennlinie / Zaehler #1 = 0 => Zaehler #1 + Icon #2 wird versteckt
// 2 mit Trennlinie
// 3 mit Trennlinie nur bei Zaehler #1 > 0 / Zaehler #1 = 0 => Zaehler #1 + Icon #2 wird versteckt
let trenner = 2;
// Trennlinie Inhalt, beliebige Textzeichen
let trennzeichen = '|';
function setFunction() {
const css =`
/*
Einstellungen CSS , OPTIONAL =>
#A Zaehler (Counter) anpassen,
#B Feinabstimmung allgemein,
#C Feinabstimmung Zentrierung Trennlinie,
#D Eigene Farben, Verblassen,
#E Allgemeines,
#F Optionale Extras.
*/
/*** User Einstellungen ***/
/* ------ A ------ */
/** Feste Breite der beiden Counter, abhaengig von Anzahl Ziffern, AUTO Anpassung für mit/ohne Klammern.
Falls noetig => Werte erhoehen NUR bis Icons untereinander auf gleicher Hoehe sind **/
/* Beispiel: 2 Ziffern plus Klammern, Systemfont Mac */
#bmContent:is(
[data-value1^='['],
[data-value1^='(']) {
--bm_width_one: 2.1em;
--bm_width_two: 2.1em;
}
/* Beispiel: 2 Ziffern ohne Klammern, Systemfont Mac */
#bmContent {
--bm_width_one: 1.3em;
--bm_width_two: 1.3em;
/* ------ B ------ */
/** Abstaende / Groessen fuer die Counter = Basisanpassungen **/
/* Abstand mittig zwischen Counter #1 <=> Counter #2 / wird x2 benutzt */
--bm_margin_mid: 8px;
/* Groesse Icons = 16px Firefox Standard */
--bm_icon_size: 16px;
/* Abstand zwischen Icon und Ziffer */
--bm_space: 4px;
}
/* ------ C ------ */
/** Trennlinie , fuer trenner = 2/3 **/
/* Feinabstimmung Zentrierung Mitte / Standard = 0px */
#bmContent.trennclass {
--bm_divider: 0px;
}
/* Fuer Reihenfolge/ Order = 1 */
#bmContent.trennclass.order_2 {
--bm_divider: 0.3em;
}
/* Element Trennlinie allgemein */
#trennID {
display: flex;
align-items: center;
font-size: calc(1em - 1px); /* Hoehe, optional */
padding-bottom: 1px; /* ausrichten vertikal, optional */
color: var(--trenn_color, currentColor);
}
/* ------ D ------ */
/* Eigene Farben, fuer bm_colors = 1 */
/* Farben Text / kompatible svg Icons aendern , anpassen nach Belieben */
/* Info: HSL Farben: https://www.w3schools.com/css/css_colors_hsl.asp */
/* Ordner Icon, Zahl / Links Icon, Zahl / Trennlinie */
#bmContent.bm_my_colors {
--folder_fill: hsl(190, 60%, 20%, 1);
--folder_color: hsl(190, 20%, 30%, 1);
--link_fill: hsl(35, 100%, 20%, 1);
--link_color: hsl(35, 60%, 30%, 1);
--trenn_color: hsl(250, 60%, 30%, 1);
}
/* Grad des Verblassens bei Zahl = 0, fuer bm_opacity_null = 1/2 */
#bmContent {
--bm_opacity: 50%;
}
/* ------ E ------ */
/** Counter gesamt **/
#bmContent {
display: flex !important;
-moz-context-properties: fill, fill-opacity;
margin-left: auto !important; /* Gesamt rechtsbuendig */
/*margin-right: -8px !important;*/ /* Abstand rechts zu Pfeil > ist evtl. OS abhaengig, optional */
height: var(--bm_icon_size); /* Layout passt sich Icon Groesse an */
padding-left: 8px; /* min. Abstand links Gesamt für enge Popups */
/* Font Aenderungen , optional */
/* font-family: Aenderungen nicht empfohlen => einheitlichen Standardfont behalten */
/*font-size: 12px !important;*/ /* font-size */
/*font-weight: 200 !important;*/ /* font-weight */
}
/* ------ F ------ */
/** Optionale Extras **/
/* Text vertikal ausrichten */
/*
#bmContent::after,
#bmContent::before {
padding-top: 3px;
}
*/
/* Pfeil rechts > bei Beidem = 0 */
.bookmark-item.bm_chevron_00 > .menu-right,
.bookmark-item.bm_chevron_00::after {
fill: hsl(30, 100%, 50%, 1) !important;
fill-opacity: 0.7 !important;
}
/* Hide empty Popup */
.bookmark-item.bm_chevron_00 > menupopup[emptyplacesresult] {
display: none !important;
}
/** Pfeil rechts > allgemein **/
/*
menu.bookmark-item .menu-right,
menu.bookmark-item::after {
fill: hsl(210, 100%, 50%, 1) !important;
fill-opacity: 1 !important;
}
*/
/*** User Einstellungen Ende ***/
/*** Feste Werte ***/
/** Reihenfolge Varianten Icons / Ziffern **/
/* order 0: Icons links / Ziffern rechts */
#bmContent {
--bm_padding_inline: calc(var(--bm_icon_size) + var(--bm_space)) 0;
--bm_bg_position: center left;
}
/* order 1: Ziffern links / Icons rechts */
#bmContent.order_2 {
--bm_padding_inline: 0 calc(var(--bm_icon_size) + var(--bm_space));
--bm_bg_position: center right;
}
/** Icons Varianten **/
/* Eigene Icons, falls Icons existieren im icons Ordner */
#bmContent {
--bm_icon_image_1: url("${ProfilePath}/${bm_icon1}");
--bm_icon_image_2: url("${ProfilePath}/${bm_icon2}");
}
/* Firefox Icons Fallback */
#bmContent.icon_fallback_folder {
--bm_icon_image_1: url("chrome://global/skin/icons/folder.svg");
}
#bmContent.icon_fallback_link {
--bm_icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");
}
/** Anpassungen bei Zahl = 0 **/
/* Verstecken #1 automatisch bei Trennlinie 1/3 , beides = 0 */
#bmContent:is(.trennclass_1, .trennclass_3)::before {
display: none !important;
}
/* Verstecken Icon #2 , Trennlinie 1/3 , beides = 0 */
#bmContent.Null_1.Null_2:is(.trennclass_1, .trennclass_3)::after {
/*content: "X";*/ /* eigener Inhalt */
background-image: linear-gradient(transparent, transparent);
}
/* Verblassen Icon + Zahl, fuer #1 , #2 , Alles Zahl = 0 */
#bmContent.opacity_Null:is(.Null_1:not(.Null_2), .Null_1.Null_2)::before,
#bmContent.opacity_Null:is(.Null_2:not(.Null_1), .Null_1.Null_2)::after,
#bmContent.opacity_Null:is(.Null_1, .Null_2) #trennID {
filter: opacity(var(--bm_opacity));
}
/* Verblassen nur Zahl */
#bmContent.opacity_Null_B:is(.Null_1:not(.Null_2), .Null_1.Null_2)::before {
-webkit-text-fill-color: color-mix(in srgb, var(--folder_color, currentColor) var(--bm_opacity), transparent) !important;
}
#bmContent.opacity_Null_B:is(.Null_2:not(.Null_1), .Null_1.Null_2)::after {
-webkit-text-fill-color: color-mix(in srgb, var(--link_color, currentColor) var(--bm_opacity), transparent) !important;
}
/** Counters (Zaehler) **/
/* Counter #1 Ordner */
#bmContent::before {
content: attr(data-value1);
display: flex;
min-width: fit-content;
width: var(--bm_width_one);
padding-inline: var(--bm_padding_inline);
align-items: center;
justify-content: flex-end;
margin-right: var(--bm_margin_mid);
background-image: var(--bm_icon_image_1);
background-position: var(--bm_bg_position);
background-repeat: no-repeat;
background-size: var(--bm_icon_size);
color: var(--folder_color, currentColor) !important;
fill: var(--folder_fill, currentColor) !important;
}
/* Counter #2 Links */
#bmContent::after {
content: attr(data-value2);
display: flex;
min-width: fit-content;
width: var(--bm_width_two);
padding-inline: var(--bm_padding_inline);
align-items: center;
justify-content: flex-end;
margin-left: calc(var(--bm_margin_mid) - var(--bm_divider, 0px));
background-image: var(--bm_icon_image_2);
background-position: var(--bm_bg_position);
background-repeat: no-repeat;
background-size: var(--bm_icon_size);
color: var(--link_color, currentColor) !important;
fill: var(--link_fill, currentColor) !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;
//Eigenes Element für Zaehler
const bmCounta = item.childNodes[1];
bmCounta.innerHTML = '';
const bmVario = document.createElement("bmElement");
bmVario.id = "bmContent";
bmCounta.appendChild(bmVario);
//Zaehler Design Optionen => ohne/ mit: runde, eckige Klammern
let strCountOut1, strCountOut2;
switch (bm_bracket) {
case 0:
strCountOut1 = '' + menuCount + '';
strCountOut2 = '' + menuitemCount + '';
break;
case 1:
strCountOut1 = '(' + menuCount + ')';
strCountOut2 = '(' + menuitemCount + ')';
break;
case 2:
strCountOut1 = '[' + menuCount + ']';
strCountOut2 = '[' + menuitemCount + ']';
break;
}
bmVario.setAttribute('data-value1', strCountOut1);
bmVario.setAttribute('data-value2', strCountOut2);
// Anpassungen fuer 00, #1 = 0, #2 = 0
if (menuCount === 0) {
bmVario.classList.add('Null_1');
}
if (menuitemCount === 0) {
bmVario.classList.add('Null_2');
}
// Verblassen bei Anzeige = 0
if (bm_opacity_null === 1) {
bmVario.classList.add('opacity_Null');
} else if (bm_opacity_null === 2) {
bmVario.classList.add('opacity_Null_B');
}
// Extra class item / ganzes menu fuer 00
if (menuCount === 0 && menuitemCount === 0) {
item.classList.add('bm_chevron_00');
} else {
item.classList.remove('bm_chevron_00');
}
// Trennlinie Element
const trennelementVario = document.createElement("trennelement");
trennelementVario.id = "trennID";
// Trennlinie Varianten
if (trenner === 2 || trenner === 3 && menuCount !== 0) {
bmVario.appendChild(trennelementVario);
trennelementVario.textContent = trennzeichen;
bmVario.classList.add('trennclass');
} else if (trenner === 3 && menuCount === 0) {
bmVario.classList.add('trennclass_3');
} else if (trenner === 1 && menuCount === 0) {
bmVario.classList.add('trennclass_1');
}
// Reihenfolge Varianten Icons / Ziffern
if (bm_order === 1) {
bmVario.classList.add('order_2');
}
// Icons Auswahl
if (bm_icon_folder === 0) {
bmVario.classList.add('icon_fallback_folder');
}
if (bm_icon_link === 0) {
bmVario.classList.add('icon_fallback_link');
}
// Farben Auswahl
if (bm_colors === 1) {
bmVario.classList.add('bm_my_colors');
}
}, 100);
}
}
})();
Alles anzeigen
Mal schauen...
Habe zum Testen wieder mein altes Skript genommen.
Das kurze "Umswitchen" des BMB-Menüs von links nach rechts, ist damit noch nicht unterbunden. Dafür muss der BM-Button aber wirklich sehr genau an einer ganz bestimmten Position sein, was sehr selten zufällig passieren sollte, ich habe es auch wirklich provozieren müssen.
Hier der Block, der sich geändert hat. Geht im Test-Skript von Zeile 30 bis Zeile 50. Alles andere braucht nicht angepasst werden:
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 );
}
Alles anzeigen
Hier das ganze Skript zum Testen:
(function() {
if (!window.gBrowser)
return;
setTimeout(function() {
setFunction();
},50);
function setFunction() {
const css =`
.countClass::after {
content: attr(data-value) !important;
font-family: Consolas, "Lucida Console", "Courier New", monospace !important;
font-size: 11px !important;
font-weight: 900 !important;
color: rgb(100,200,255) !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).padStart(2, '\xa0') + "📁" + "\xa0" + String(menuitemCount).padStart(3, '\xa0') + "⭐"; //"\xa0"
label.setAttribute('data-value', strCountOut);
}, 100);
}
}
})();
Alles anzeigen
Hier der Block, der sich geändert hat. Geht im Test-Skript von Zeile 30 bis Zeile 50. Alles andere braucht nicht angepasst werden:
Läuft hier nach erstem Testen tip-top, gefühlt etwas sauberer als meine Version!
Den einzigen Unterschied zwischen #1 und #2 sehe ich nur bei einem nachträglichen "Refresh" der unteren Zähler in #2, der ist bei #1 nicht vorhanden und daher sieht es hier etwas besser aus.
Also dieser "Refresh", das Problem habe ich schon länger in meinen Script Versionen, quer durch alle Popups.
Die Zähler werden teils, aber nicht alle, "refreshed" beim erneuten Öffnen des gleichen Popups.
Mit deinem Script gibt es das Problem nicht.
Ich hab mir schon den Wolf gesucht und ewig dagegen angetestet, aber ich befürchte dass mein Code etwas zu grob aufgebaut ist um die ganzen Vorgänge sauber auszuführen.
Ohne aufwendige Tests von dir zu erwarten, fällt dir evtl. auf die Schnelle etwas auf in meinem Code, das dahingehend optimiert werden könnte?
Aber das soll keine neue Baustelle werden, nur falls du oder sonst jemand einen schnellen Tip hätte!
Ich hänge das Gif nochmal an.
Script von hier RE: Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen funktioniert super.
Wie muss vorgegangen werden, damit die Zähler wieder rechtsbündig abschließen. Ich habe schon daran gebastelt, aber damit bin ich überfordert. Bitte helfen!