1. Nachrichten
  2. Forum
    1. Unerledigte Themen
    2. Forenregeln
  3. Spenden
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. camp-firefox.de
  2. Horstmann

Beiträge von Horstmann

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Horstmann
    • 18. Mai 2025 um 13:30
    Zitat von Mira_Belle

    Du könntest oben Variablen definieren, die die Einstellung für das Klammergedöhns vereinfachen,
    und niemand müsste im Code groß was verändern.
    Einfach eine "0" für ohne, eine "1" für runde oder eine "2" für eckige Klammern.

    Danke Mira. :)

    Das mit den Klammern als JS Option würde evtl. Sinn machen, da müsste ich mich aber nochmal einlesen wie das geht (viele deiner früheren Postings zu JS Variablen kenne ich auch).

    Ich wollte nur ein Mittelding finden zw. Variablen und manuell, so daß das CSS möglichst übersichtlich bleibt, und Styles weitmöglichst im CSS Block sitzen, für User die sich darüber ihr eigenes Ding basteln wollen.

  • Nur die Anzeige der Ordner/Lesezeichenanzahl in einer anderen Farbe darstellen

    • Horstmann
    • 17. Mai 2025 um 23:25

    Mit Spannung erwartet, hier meine aktuelle Version, damit ich das Ding endlich aufhöre weiter zu bearbeiten. ;)

    Hoffe es macht Sinn; Kommentare und Aufbau für Bedienbarkeit zu gestalten ist immer eine Herausforderung.
    Es ist noch Einiges an Variablen enthalten; wer diese oder einige Varianten nicht braucht, kann wo nötig feste Werte eintragen bzw. Letztere löschen.

    Wir hätten hier Icons von Firefox, ersetzbar mit eigenen Icons (zB die im Anhang), eine entfernbare Trennlinie, und eine Option die Reihenfolge von Icon und Zahlenwert umzukehren, plus einige mögliche kosmetische Anpassungen.
    Das ganze sollte sich ohne viel Drama automatisch für die diversen Varianten anpassen lassen über die Basiseinstellungen. :/

    Test und Kritik wie immer herzlich willkommen. :)

    JavaScript
     //bmcount.uc.js, RC_2
    //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 2 =>
    //https://www.camp-firefox.de/forum/thema/136572-nur-die-anzeige-der-ordner-lesezeichenanzahl-in-einer-anderen-farbe-darstellen/?postID=1272262#post1272262
    
    // Eigenes Icon erwartet in Profilordner/chrome/icons , icons Ordner falls noetig erstellen
    // Eigenes Icon, Name unten in ==> let icon1/2 = yourIcon...
    //Basis Anpassungen =>
    //Zaehler (Counter) Design Optionen mit / ohne Klammern waehlen ganz unten => #A, #B, #D (aus/ein), #C Feinabstimmung
    
    (function() {
    
        if (!window.gBrowser)
            return;
    
        setTimeout(function() {
            setFunction();
        },50);
    
        //Custom icons ==> in profilename/chrome/icons folder
        let ProfilePath = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir, 'chrome', 'icons'));
        let icon1 = "YourFolderIcon.svg"        //  Custom  Folder Icon
        let icon2 = "YourLinkIcon.svg"          //  Custom  Link Icon
    
        function setFunction() {
            const css =`
    
           /*** Basiseinstellungen ***/
    
           #bmContent {
    
           /** Gesamt **/
    
                display: flex !important;
                margin-inline: auto -8px !important;  /* Gesamt rechtsbuendig, Abstand rechts zu Pfeil > */
                height: var(--bm_icon_size);          /* Layout passt sich Icon Groesse an */
                padding-left: 8px;                    /* min. Abstand links Gesamt für enge Popups */
                /*font-size: 12px !important;*/
    
           /** Icons Varianten / ungewuenschte Varianten auskommentieren!!! **/
    
                /* Use Firefox Icons => */
                --bm_icon_image_1: url("chrome://global/skin/icons/folder.svg");
                --bm_icon_image_2: url("chrome://browser/skin/bookmark-hollow.svg");
    
                /* Eigene Icons, falls Icons existieren im icons Ordner => */
           /*   --bm_icon_image_1: url("${ProfilePath}/${icon1}");
                --bm_icon_image_2: url("${ProfilePath}/${icon2}");
                */
    
           /** #A: Feste Breite der beiden Counter, abhaengig von Anzahl Ziffern
                => Wert erhoehen NUR bis Icons untereinander auf gleicher Hoehe sind,
                ungewuenschte Variante auskommentieren!!! **/
    
                /* 2 Ziffern plus Klammern, Systemfont Mac, Zähler Design Optionen => ganz unten */
           /*   --bm_width_one: 2.1em;
                --bm_width_two: 2.1em;
                */
                /* 2 Ziffern ohne Klammern, Systemfont Mac, Zähler Design Optionen => ganz unten */
                --bm_width_one: 1.3em;
                --bm_width_two: 1.3em;
    
           /** #B: Reihenfolge Varianten Icons / Ziffern / ungewuenschte Variante auskommentieren!!! **/
    
                /* #1 Icons links / Ziffern rechts */
                --bm_padding_inline: calc(var(--bm_icon_size) + var(--bm_space)) 0;
                --bm_bg_position: center left;
    
                /* #2 Ziffern links / Icons rechts / --bm_divider_2 gerade Zahl = Abstand mittig zusaetzlich fuer Trennlinie */
            /*  --bm_padding_inline: 0 calc(var(--bm_icon_size) + var(--bm_space));
                --bm_bg_position: center right;
                --bm_divider_2: -1px;
                */
    
    
           /** #C: Abstaende / Groessen Counter Basis **/
    
                /* Abstand mittig zwischen Counter #1 <=> Counter #2, gerade Zahl falls Trennlinie benutzt */
                --bm_margin_mid: 16px;
    
                /* Groesse Icons = 16px Firefox Standard */
                --bm_icon_size: 16px;
    
                /* Abstand zwischen Icon und Ziffer */
                --bm_space: 3px;
           }
    
           /** #D: Trennlinie optional, auskommentieren falls unerwuenscht => evtl. #C neu anpassen **/
           /* image / slice = max icon width? / height adjust 0px = 100%, width / outset = Abstand links */
           #bmContent::after {
                border-image: linear-gradient(currentColor, currentColor)
                              0 0 0 1 /
                              2px var(--bm_divider) /
                              0 0 0 calc(var(--bm_margin_mid)/2 + var(--bm_divider) + 2*var(--bm_divider_2, 0px));
                --bm_divider: 1px;
                }
    
           /*** Basiseinstellungen Ende ***/
    
    
           /** Counters **/
    
           /* 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: end;
                margin-right: var(--bm_divider_2, 0px);
                background-image: var(--bm_icon_image_1);
                background-position: var(--bm_bg_position);
                background-repeat: no-repeat;
                background-size: var(--bm_icon_size);
                /* Farben Text / svg Icons aendern => */
                /*color: hsl(155, 90%, 50%, 1) !important;*/
                /*fill: hsl(255, 70%, 50%, 1) !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: 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);
                /* Farben Text / svg Icons aendern => */
                /*color: hsl(155, 90%, 50%, 1) !important;*/
                /*fill: hsl(255, 70%, 50%, 1) !important;*/
                }
    
           /** Optionale Extras **/
    
           /* Anpassungen bei Zahl = 0 */
    
            /* Verstecken / Verblassen #1 */
            #bmContent:is(
            [data-value1="[0]"],
            [data-value1="0"],
            [data-value1="(0)"])::before {
                /*opacity: 0.2;*/
                display: none;
                }
    
            /* Verstecken / Verblassen #2 */
            #bmContent:is(
            [data-value2="[0]"],
            [data-value2="0"],
            [data-value2="(0)"])::after {
                opacity: 0.5;
                }
    
            /* Verstecken Trennlinie bei #1 = 0 und versteckt */
            #bmContent:is(
            [data-value1="[0]"],
            [data-value1="0"],
            [data-value1="(0)"])::after {
                border-image: none;
                }
    
            /** Helfer zum Testen der Abstände **/
    
            /*
            #bmContent {
                outline: 1px solid blue;
                outline-offset: 4px;
              }
            #bmContent::before, #bmContent::after {
                outline: 1px solid orange;
                }
            */
            /*
            #bmContent::after {
                background-image: var(--bm_icon_image_1),linear-gradient(lightgreen, lightgreen) !important;
                background-color: pink;
                }
            #bmContent::before {
                background-image: var(--bm_icon_image_2),linear-gradient(lightblue, lightblue) !important;
                background-color: khaki;
                }
            */
    
    		`;
            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;
    
                  // Eigenes Element für Zaehler
                  let bmCounta = item.childNodes[1];
                  bmCounta.innerHTML = "";
                  let bmVario = document.createElement("bmElement");
                  bmVario.id = "bmContent";
                  bmCounta.appendChild(bmVario);
    
                  //Zaehler Design Optionen => mit, ohne, eckige, runde Klammern
    
                  let strCountOut1 = "" + menuCount + "";      //  ohne Klammern
                  //let strCountOut1 = "(" + menuCount + ")";    //  runde Klammern
                  //let strCountOut1 = "[" + menuCount + "]";      //  eckige Klammern
                  bmVario.setAttribute('data-value1', strCountOut1);
    
                  let strCountOut2 = "" + menuitemCount + "";      //  ohne Klammern
                  //let strCountOut2 = "(" + menuitemCount + ")";    //  runde Klammern
                  //let strCountOut2 = "[" + menuitemCount + "]";      //  eckige Klammern
                  bmVario.setAttribute('data-value2', strCountOut2);
    
                  // Extra class und Attribut parent; experimentell
                  //if (bmContent.parentElement) {
                  //bmContent.parentElement.classList.add('pfeil');
                  //bmContent.parentElement.setAttribute('data-value3', strCountOut1 + strCountOut2);
                  //}
    
                }, 100);
            }
        }
    })();
    Alles anzeigen

    icons.zip

  • Beenden Button

    • Horstmann
    • 16. Mai 2025 um 19:23
    Zitat von clio

    Und noch eine andere Variante, ohne Button aber im Kontextmenü, funktioniert mit FF 138 und 140:


    Funktioniert top in 115esr! ;)

    Für aktuellere Versionen evtl. eher sowas:

    JavaScript
    //Fox_schließen_Context
    (function() {
      if (location.href !== 'chrome://browser/content/browser.xhtml')
        return;
    
    const label = 'Fox schließen';
    //const oncommand = "goQuitApplication(event);";
    //const curProfDir = PathUtils.toFileURI(PathUtils.join(PathUtils.profileDir));
    const menuitem1 = document.createXULElement('menuitem');
          menuitem1.id = 'contextTest';
          menuitem1.setAttribute('label', label);
          //menuitem1.setAttribute('oncommand', oncommand);
          menuitem1.addEventListener('command', () => {
              goQuitApplication(event);
            });
    const refItem1 = document.getElementById('context-inspect');
          refItem1.parentNode.insertBefore(menuitem1, refItem1.nextSibling);
    })();
    Alles anzeigen
  • userChrome.js Scripte für den Fuchs (Diskussion)

    • Horstmann
    • 15. Mai 2025 um 19:57
    Zitat von Speravir

    Dasselbe wie AnimationToggleButton in meinem Beitrag Nr. 4443: Es wird die Einstellung image.animation_mode auf einen von drei möglichen Werten geändert und dann die aktuelle Seite neu geladen (sollte es zumindest), wobei sich auch der Button selbst ändert/ändern sollte. Das Ergebnis kann man mit allen animierten Grafiken testen, Beispiele (alle Wikimedia Commons):

    Es wäre übrigens tatsächlich mal interessant, was man in MacOS statt des Mittelklicks tun muss.

    Ebenfalls vergessen zu antworten, sorry.
    Am Mac sollte es da keinen Unterschied geben, event.button 0, 1, 2 ist Maustaste links, Mitte, rechts.

  • Firefox 138 - Script "F12 schließt Tab" geht nicht mehr

    • Horstmann
    • 15. Mai 2025 um 15:33

    Wie von Milupo, oder vielleicht:

    JavaScript
    (function() {
     if (!window.gBrowser)
       return;
     for (let key of document.querySelectorAll('key[keycode="VK_F12"]')) {
       key.setAttribute('disabled', 'true');
     }
     let key = document.createXULElement('key');
     key.id = 'closeTab';
     key.setAttribute('keycode', 'VK_F12');
     //key.setAttribute('oncommand', 'gBrowser.removeTab(gBrowser.selectedTab, {animate: true})');
     key.addEventListener('command', () => {
         gBrowser.removeTab(gBrowser.selectedTab, {animate: true});
       });
     document.getElementById('mainKeyset').appendChild(key);
    })();
    Alles anzeigen
  • Einige Skripte funktionieren seit ff 138 nicht mehr

    • Horstmann
    • 15. Mai 2025 um 00:02
    Zitat von StandingBill

    Ohne deine Kenntnisse, Sammlungen und stetige Hilfsbereitschaft gäbe es hier bei weitem nicht so viele zufriedene Hilfesuchende.

    Wenn dich das Thema interessiert, kannst du gerne auch mal in aktuellen Diskussionen vorbeischauen, wie etwa hier oder hier, um Lösungsansätze zu finden, die dem momentanen Stand der Dinge etwas näher kommen, und keine bekannten Fehler beinhalten.

  • Einbindung von Icons in Skripts

    • Horstmann
    • 14. Mai 2025 um 22:40
    Zitat von Mitleser

    Hallo Mira_Belle, ich wundere mich, dass du mich in dieser illustren Aufzählung erwähnst, ...

    Stell dir mein Erstaunen vor; Mira_Belle , kann ich raus aus der Liste - manche Assoziation würde ich lieber vermeiden? 8)

  • Einbindung von Icons in Skripts

    • Horstmann
    • 14. Mai 2025 um 19:33
    Zitat von BrokenHeart

    Das Umschreiben der "Bestandsskripte" würde ich wirklich nicht ins Auge fassen. Wenn sich dann wieder etwas ändert oder eine neue "Verbesserung" anliegt, dann kann man das ganze Procedere wieder von vorne durchexerzieren.

    Dieses Umschreiben haben wir doch neulich schon durchexerziert, mit den inline events Dingens.
    Was nicht das erste oder letzte Mal ist.
    Änderungen die nicht strukturell nötig sind werden übernommen oder auch nicht, das zwingt niemanden zu Änderungen.

    Was mich angeht, ist die komplette Diskussion über die Beibehaltung von in Javascript Dateien integrierten Bilddateien, wie etwa base64<X Icons - oder nicht.

    Was wiederum eine Diskussion darüber ist, ob es einem User zugemutet werden kann, eine komplexe Manipulation eines sehr komplexen Internet Browsers vorzunehmen, nachdem schon eine notwendige Vorbereitung zur Ausführung dieser Manipulation stattgefunden hat - ohne auch noch ein Bild in einen vordefinierten Ordner packen zu müssen.

    Was mich angeht, wäre eine Version mit manuell zu installierendem Icon am sinnvollsten, plus einer möglichst einfachen Fallback Lösung, wie es Mira mit dem warning Icon gemacht hat.

    Der Fallback va für den Fall, dass wie oft ein Button automatisch in einer Leiste plaziert wird - aber ohne Icon sieht der User nur ein Leerfeld, und je nach Layout nicht mal das, weil es uU in Spacern untergeht und dann der Button scheinbar nicht existiert.

    Die Fallback Geschichte ist von der AI/KI Diskussion verschluckt worden; ist wegen mir auch nicht zwingend nötig, aber könnte bestimmt einfach sein wenn sich das ein Experte mal kurz anschaut (#49 ->)- und Mira mal kurz ihren Einfärbungsfetisch beiseite lässt. ^^

  • Einbindung von Icons in Skripts

    • Horstmann
    • 14. Mai 2025 um 18:55
    Zitat von Mira_Belle


    Aber wir sollten bei Skripten darauf achten, z.B. keine "..." mehr zu verwenden. Statt dessen '....'.

    Wenn schon, dann gibt es noch die schrägen und geraden Anführungszeichen beider Art, die zu verwechseln auch mal Probleme machen kann; sollten es nicht die geraden Zeichen sein? ;)

  • Einbindung von Icons in Skripts

    • Horstmann
    • 14. Mai 2025 um 17:03
    Zitat von Mira_Belle

    Horstmann Könntest Du mir diese Sammlung mal zukommen lassen?

    Es ist nicht die Art von Sammlung die für eine Veröffentlichung taugt.
    Das sind tausende Dateien mit Querverweisen und Aliasen, ich komm selber kaum noch durch... ;)

  • Einbindung von Icons in Skripts

    • Horstmann
    • 14. Mai 2025 um 13:16
    Zitat von Sören Hentzschel

    Zumal die Tipps, die ich durchaus ab und an gebe, ja auch nicht nachhaltig umgesetzt werden, sondern gefühlt nach fünf Minuten schon wieder vergessen wurden. Wieso sollte das durch mehr Menschen, die etwas schreiben, anders sein?

    Ich schreibe (fast) immer mit. ;)
    Meine Sammlung an potentiellen Lösungsansätzen ist massiv.

    Deine Tipps - und die von einigen anderen Beitragenden - gehen bei mir zumindest nicht verloren, und vielen Dank dafür an dieser Stelle. :)

    Manchmal muss man halt auch Dinge wiederholt reinhämmern bis etwas greift, das ist mein Eindruck.;)

  • Einbindung von Icons in Skripts

    • Horstmann
    • 13. Mai 2025 um 22:01
    Zitat von .DeJaVu

    Ich sag mal so. Das Stichwort KI ist hier nicht neu -> GPT. Wenn man kein Javascript kann, dann sollte man es auch keiner KI überlassen, die davon eh keinen Plan hat, weil sie nichts davon kennt. So bzw ähnlich hast du es schon mal ausgedrückt.

    Es gibt hier nur wenige User die von JS Ahnung haben, und viele davon beteiligen sich nur sporadisch .
    Machen wir den Laden dann einfach dicht, schliesslich ist diese Sub ist 80+% JS?

    Zitat von .DeJaVu

    ihr hockt gefühlt die Richtung 24/7 vorm Rechner, dann macht endlich auch was draus, statt euch über Bingo-Bongo-Dingeskirchen aufzuregen. Ihr seid für mich gefühlt omnipräsent, ohne die Thematik wirklich weiterzubringen. Es macht so keinen Spass, euch zu lesen. "probier mal hier" "probier mal da" ist NICHT hilfreich.

    a) 24/7 => Touche ?(

    b) Wenn du keine Diskussion zu Themen willst, in einem Diskussion Foren Sub über Coding, sondern ein Fertigprodukt, dann geh nach Mozilla und hol dir eine fertige Erweiterung.

    Ich weiss du weisst es besser - die Codes von hier und sonstwo kommen nicht von jungfräulicher Geburt - es ist immer ein Entwicklungsprozess.
    Und manchmal dreht sich eine Diskussion im Kreis, das stimmt, aber Stagnation ist auch ein Problem.

  • Einbindung von Icons in Skripts

    • Horstmann
    • 13. Mai 2025 um 21:42
    Zitat von Sören Hentzschel

    Ehrlich gesagt bin ich der Meinung, dass ihr hier ein „Problem“ sehr viel größer macht, als es tatsächlich ist, was nicht unbedingt zu einer besseren Lösung führt, sondern im Gegenteil sogar eher nachteilig ist.

    Wenn ein Icon fehlt, sieht man das sofort und kann es dann auch sofort beheben. Ihr versucht, eine unnötig komplexe Logik in das Script einzuführen, die dann bei jeder Verwendung von Firefox und für jedes einzelne Fenster in Firefox ausgeführt werden muss, obwohl sich am Icon, sobald es korrekt gesetzt ist, nie wieder etwas ändern wird. Dafür gibt es auch den schönen „neudeutschen“ Begriff „Over-Engineering“.

    Tatsächlich bin ich völlig deiner Meinung, der User von JS Scripts sollte das Problem selber erkennen und lösen können.

    Du hast aber nicht mitgelesen; was du verpasst hast, ist das konstante Bemühen darum darum dass jeder User sofort ein Script benutzen kann, ohne eine einzige Zeile ändern zu müssen, aber gleichzeitig eine möglichst simple Lösung für - in diesem Fall - die Einbindung eines eigenen Icons zu ermöglichen.

    Das ist nämlich der Status Quo für nicht nur, aber auch dieses Forum - Fertiglösungen zu liefern.
    Deshalb schleppen sich die base64 Icons noch immer durch die Gegend, und die Monsterscripts mit den unmöglichsten Style Einbindungen, nur damit jeder irgendwie ganz oben Präferenzen einfacher ändern kann.

    Ich habe selber die Schnauze voll davon so langsam, und werde das auch nicht mehr weiter verfolgen.
    Aber nochmal - du scheinst hier nur quer zu lesen, und Einiges zu vermissen; was mich angeht, würden wir dem User ein Mininum mehr an Eigeninitiative abverlangen, wie wiederholt erklärt.

    Zitat von Sören Hentzschel

    Ich bin ernsthaft am Überlegen, ob ich hier keine KI-Richtlinie einführen soll, die eine entsprechende Kennzeichnung bei Verwendung verpflichtend macht, da KI-Einsatz massiv auf Kosten der Code-Qualität geht …

    Was an meinem obigen Code - und zum ersten Mal - aus AI kommt, ist umgeschrieben, ergänzt durch massive Recherche und die AI Lösung wurde nur als Richtlinie benutzt; eine einzige Zeile ist davon noch aus AI, und das ist die für welche ich nachgefragt hatte.

    Was hiesige Code Qualität angeht, bleiben wir mal geschmeidig. ;)
    Es steht jedem frei zu Themen beizutragen, aber der Respons ist nicht immer überwältigend.
    Das ist es was massiv die Code Qualität beeinträchtigt.

  • Beenden Button

    • Horstmann
    • 13. Mai 2025 um 19:52
    Zitat von FuchsFan

    Eine andere Variante zum Beenden von Firefox.

    Deine Dateipfade für die Icons funktionieren nur sehr begrenzt (wenn überhaupt für jemand anderen); ich würde mich da eher an die Standards halten, wie wir sie hier seit längerem und in den meisten aktuellen Scripts haben.

  • Einbindung von Icons in Skripts

    • Horstmann
    • 13. Mai 2025 um 18:58
    Zitat von Mira_Belle

    Und hier nun eine Variante Deines Skripts, bei der nur einmal der Iconname inkl. Dateiendung
    angegeben werden muss.

    ----------

    Ich bau' aber jetzt nicht meine ganzen Skripte um, obwohl mir diese Version des Fallbacks viel besser gefällt.
    Aber vielen Dank für diese tolle Idee.

    Schweet, dankeschön! :):thumbup:.

    Ich denke nicht dass es einen zwingenden Grund gibt deine Version zu ändern, ich war nur auf der Suche nach dem einfachst möglichen Code.
    Auf der Suche bin ich auch mehrfach über Varianten deiner Version gestolpert, kann sein wir haben eine Freundin gemeinsam. ;)

  • Einbindung von Icons in Skripts

    • Horstmann
    • 13. Mai 2025 um 17:56
    Zitat von Mira_Belle
    Code
    let iconURL = buttonicon == + buttonicon + ? "file://" + iconPath : fallbackIcon;

    Funktioniert nicht?

    Nö.

    Wundert mich dass es bei dir funktioniert in dem Code. :/

  • Einbindung von Icons in Skripts

    • Horstmann
    • 13. Mai 2025 um 16:15
    Zitat von Mira_Belle

    Wir haben ja noch etwas "Redebedarf" und so wird das auch noch ein Weilchen dauern!

    Ohne jetzt alles durcheinander bringen zu wollen, aber zum Thema Fallback Icon ist mir noch etwas über den Weg gelaufen; absolut kein AI war dabei involviert! :whistling:

    Der Vorteil wäre evtl. dass der Code schlank ist, keine Funktionen benötigt, und daher nicht durch die Gegend geschoben werden muss.

    Das Einzige was ich nicht schaffe, ist dass der eigene Icon Name nicht 2mal eingetragen werden muss, wie hier in Zeilen 15 und 22. :/

    Nur ein TEST:

    JavaScript
    //  aboutconfig-button.uc.js Fallback Test Mai 2025
    //  Eigenes Icon erwartet in Profilordner/chrome/icons , icons Ordner falls noetig erstellen
    // TEST !!!!!
    
    (function() {
        if (location != 'chrome://browser/content/browser.xhtml') return;
    
        try {
            CustomizableUI.createWidget({
                id: 'aboutconfig_button',
                type: 'custom',
                defaultArea: CustomizableUI.AREA_NAVBAR,
                onBuild: function(aDocument) {
    
                    let buttonicon = "LettersC-1.png";
                    let fallbackIcon = "chrome://global/skin/icons/warning.svg";
    
                    let currentProfileDirectory = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
                    let iconPath = currentProfileDirectory + "/chrome/icons/" + buttonicon;
    
                    // Fallback Icon benutzt falls eigenes Icon nicht vorhanden
                    let iconURL = buttonicon == "LettersC-1.png" ? "file://" + iconPath : fallbackIcon;
    
                    let toolbaritem = aDocument.createElementNS(
                        'http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul',
                        'toolbarbutton'
                    );
                    let props = {
                        id: 'aboutconfig_button',
                        class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                        label: 'About:Config',
                        tooltiptext: 'About:Config',
                        style: 'list-style-image: url("' + iconURL + '");'
                    };
    
                    for (let p in props)
                        toolbaritem.setAttribute(p, props[p]);
                    return toolbaritem;
                }
            });
        } catch (e) { }
    
        document.getElementById('aboutconfig_button')?.addEventListener('click', event => {
            if (event.button === 0) {
                openTrustedLinkIn("about:config", "tab");
            }
        });
    
    })();
    Alles anzeigen

    Icon:

    LettersC-1.png.zip

  • about:about Button

    • Horstmann
    • 12. Mai 2025 um 16:30
    Zitat von Mira_Belle
    Zitat von Dharkness

    So weit so gut, mit welchem Script für eine vertikale Toolbar läuft das Script, mit dem ↓ läuft es hier nicht? ;(

    Nur ein Versuch:!:
    Die Datei heißt ja irgendwas mit V, nehme ich an.
    Setze doch einfach mal 0-"Skriptname" davor und teste dann noch mal.

    Geeeenau, dann funktionieren die Custom Buttons in der Leiste, wie von 2002Andreas in #43 beschrieben.

  • about:about Button

    • Horstmann
    • 12. Mai 2025 um 14:36
    Zitat von 2002Andreas
    Zitat von Mira_Belle

    Es ist in der Tat der Skriptname.

    Dachte ich mir schon.

    Die Skripte werden beim Start vom Fx wohl der Reihenfolge nach aus dem Ordner chrome geladen. Und wenn dann about:about vor der Leiste geladen wird, gibt es das Problem. Betrifft aber auch andere Funktionen/Skripte die aus der Zusatzleiste gestartet werden.

    Ahhh, deshalb habe ich vor langem mal meinen Scripts die komischen Namen gegeben... ^^

    Der alphabetischen/numerischen Reihenfolge der Dateinamen nach, nur um das Detail hizuzufügen; manch einer hat vielleicht seine Ordner Dateien visuell nach Erstellungsdatum, Art etc. sortiert.

    Was aber immer noch nicht erklärt, warum bei geldhuegel manches Script fuktioniert und manches nicht - falls wir davon ausgehen können das die Skriptnamen jeweils die gleichen blieben. ;)

  • about:about Button

    • Horstmann
    • 12. Mai 2025 um 12:37
    Zitat von geldhuegel

    Hi Mira_Belle , vielen Dank für das überarbeitete Skript. Oben neben dem Hauptmenü habe ich einen Button und das Skript zeigt mir auf Klick die about:about Seite. Bei mehreren Fenstern immer im richtigen. Beim ersten Mal hatte ich das Icon noch nicht geändert und es wurde ein Warndreieck angezeigt.

    Nun starte ich "Symbolleiste anpassen", ziehe das Icon nach unten in die Statusleiste (Skript weiter oben) und starte den Firefox neu mit Cache löschen. Entweder über Skript Neustart oder über Fehlerbehebungsmodus. Ergebnis: kein Icon, nur Platzhalter, keine Funktion beim Anklicken.

    Keine Ahnung, was bei mir so anders ist. Ich werde später am Tag das Skript auch auf einem anderen Rechner probieren und melde mich dann wieder.

    Wenn du spasseshalber das mal probieren könntest, und ob es in deiner Statusleiste funktioniert:

    Ich habe in Mira's Script aus #33 var toolbaritem = aDocument.createXULElement('toolbarbutton'); reingepackt von #9, sowie (sollte eigentlich nichts machen) CustomizableUI.registerToolbarNode(tb); und if (!window.gBrowser){return;} .

    Es muss ja einen Grund dafür geben, dass das Script von 2002Andreas bei dir für deine Extraleiste funktioniert, die anderen aber nicht.:/

    Im übrigen gibt es einige Beiträge zu finden, wenn man dieses Form nach Statusleiste durchsucht, inkl. über nicht funktionierende Buttons in manchen Leistenversionen.

    JavaScript
    // JavaScript Document
    // QuickLinkButton-about:about.uc.js
    //TESTSTEST
    
    /* ----------------------------------------------------------------------------------- */
    /*     Zu beachten ist, dass die Grafiken sich im richtigen Ordner befinden müssen     */
    /*            %appdata%\Mozilla\Firefox\Profiles\"Profilname"\chrome\icons             */
    /* ----------------------------------------------------------------------------------- */
    
    // Nur TEST TEST TEST !!!!!
    
    (function() {
      
        // Test 1
        //if (location != 'chrome://browser/content/browser.xhtml') return;
         
        if (!window.gBrowser){
            return;
        }
     
       try {
          CustomizableUI.createWidget({
             id: 'link-button-about',
             type: 'custom',
             defaultArea: CustomizableUI.AREA_NAVBAR,
             onBuild: function(aDocument) {   
             
             // Test 2
             //var toolbaritem = aDocument.createElementNS('http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul', 'toolbarbutton');
          
                let toolbaritem = aDocument.createXULElement('toolbarbutton');
                
                let props = {
                   id: 'link-button-about',
                   class: 'toolbarbutton-1 chromeclass-toolbar-additional',
                   removable: 'true',
                   label: 'Quicklink: about:about',
                   tooltiptext: 'Quicklink:\nabout:about',
                };            
                for (var p in props) {
                   toolbaritem.setAttribute(p, props[p]);
                }           
                return toolbaritem; 
             }      
          });
          
          // Test 3
          CustomizableUI.registerToolbarNode(tb);
          	    
       } catch(e) {};
    
       document.getElementById('link-button-about').addEventListener('click', event => {
          if (event.button === 0) {
             openTrustedLinkIn("about:about", "tab")
          }
       });
    
       // Pfad zum Profilordner
       let ProfilePath = Services.dirsvc.get("ProfD", Ci.nsIFile).path.replace(/\\/g, "/");
       // Pfad in den entsprechenden Unterordner
       let IconPath = '/chrome/icons/';
       // Name & Dateiendung des anzuzeigenden Symbols!
       let ButtonIcon = "firefox.svg";
       // Erstelle ein img-Element, um zu überprüfen, ob die Grafik geladen werden kann
       let img = new Image();
       img.src = "file:" + ProfilePath + IconPath + ButtonIcon;
       
       img.onload = function() {
          // Wenn die Grafik geladen werden kann, setze das listStyleImage
          document.getElementById('link-button-about').style.listStyleImage = 'url("' + ("file:" + ProfilePath + IconPath + ButtonIcon) + '")';
          document.getElementById('link-button-about').style.color = '#f1b508';    // Hier wird die Iconfarbe direkt gesetzt
       };
       
       img.onerror = function() {
          // Wenn die Grafik nicht geladen werden kann, verwende das Fallback-Icon
          document.getElementById('link-button-about').style.listStyleImage = 'url("chrome://global/skin/icons/warning.svg")';
          document.getElementById('link-button-about').style.color = 'red';    // Hier wird die Iconfarbe direkt gesetzt
       };
    })();
    Alles anzeigen

Unterstütze uns!

Jährlich (2025)

92,9 %

92,9% (604,17 von 650 EUR)

Jetzt spenden
  1. Kontakt
  2. Datenschutz
  3. Impressum
Community-Software: WoltLab Suite™
Mastodon