userChrome.js Scripte für den Fuchs (Diskussion)

  • Wozu aber 193 Zeilen, wenn es 6 Zeilen auch tun? Der CSS-Code macht viel mehr, als nur die Tableiste zu verschieben.

    Übrigens: Ich habe gestern schon die nötige Änderung für das Skript an Aris gemeldet.

    Übersetzer für Obersorbisch und Niedersorbisch auf pontoon.mozilla.org u.a. für Firefox, Firefox für Android, Firefox für iOS, Firefox Klar/Focus für iOS und Android, Thunderbird, Pootle, Django, LibreOffice, LibreOffice Onlinehilfe, WordPress

  • Meine Frage hat sich erledigt, glaube ich.

    Habe mir Sörens Beitrag noch einmal ganz genau durchgelesen

    und glaube, es geht darum, dass nach dem onclick der Code ähnlich dem CSS ausschaut.
    Wenn danach aber eine Funktion "function(aDocument)" kommt oder ein "Name" einer Funktion,
    dann trifft das von milupo angesprochene nicht zu.

    Ich hoffe, es wird verstanden, was ich da schreibe, und dass ich richtig liege.

    Mit <3lichem Gruß

    Mira

  • und glaube, es geht darum, dass nach dem onclick der Code ähnlich dem CSS ausschaut.
    Wenn danach aber eine Funktion "function(aDocument)" kommt oder ein "Name" einer Funktion,
    dann trifft das von milupo angesprochene nicht zu.

    Ich weiß nicht, was du mit „ähnlich dem CSS ausschaut“ meinst. Aber grundsätzlich ist es genau das Gleiche, ob du den Funktionsnamen angibst und die Funktion an anderer Stelle definierst oder ob du die Funktion direkt an die Stelle schreibst:

    JavaScript
    CustomizableUI.createWidget({
      /* … */
      onCommand: onCommand
    });
    
    function onCommand (event) {
      /* … */
    }

    … ist identisch zu:

    JavaScript
    CustomizableUI.createWidget({
      /* … */
      onCommand: function (event) {
        /* … */
      }
    });

    Es ist nicht so, dass man alles umbauen müsste, wo irgendetwas steht, was mit on beginnt. Am Beispiel von deinem Beitrag #4059:

    In deinem ersten Script steht:

    JavaScript
    CustomizableUI.createWidget({
      /* … */
      onCommand: onCommand
    });

    In dem Fall ist onCommand Teil der CustomizableUI.createWidget-API. Es gibt keinen Grund, hier etwas zu ändern, solange Mozilla seine API nicht ändert. Gleiches gilt für onBuild im zweiten Script.

    Was in deinem zweiten Script allerdings anders ist:

    JavaScript
    let toolbaritem = aDocument.createXULElement('toolbarbutton');
    let props = {
      /* … */  
      oncommand: 'Services.dirsvc.get("UChrm", Ci.nsIFile).launch();'
    };
    
    for (let p in props)
      toolbaritem.setAttribute(p, props[p]);

    Hier ist oncommand kein Teil einer Firefox-API, sondern du arbeitest mit dem DOM, also vereinfacht gesagt den HTML- / XUL-Elementen. Du erstellst ein Element (createXULElement), definierst dann in props eine Reihe von Attributen und gehst in der for-Schleife schließlich über alle Einträge von props, um diese via setAttribute() für eben jenes Element als Attribut zu setzen. Das könnte ohne dieses Objekt auch so aussehen, wenn du es direkt schreiben würdest:

    JavaScript
    let toolbaritem = aDocument.createXULElement('toolbarbutton');
    /* … */
    toolbaritem.setAttribute('oncommand', 'Services.dirsvc.get("UChrm", Ci.nsIFile).launch();');

    Diese Schreibweise macht es vielleicht deutlicher. Es geht um genau diese Fälle, wo du ein on*-Attribut im HTML / XUL setzt, wo sich stattdessen addEventlistener nutzen lässt:

    JavaScript
    let toolbaritem = aDocument.createXULElement('toolbarbutton');
    /* … */
    toolbaritem.addEventListener('command', function () {
      Services.dirsvc.get('UChrm', Ci.nsIFile).launch();
    };

    Oder eben in der moderneren Syntax, die mit ECMAScript 6 (ES6) eingeführt wurde:

    JavaScript
    let toolbaritem = aDocument.createXULElement('toolbarbutton');
    /* … */
    toolbaritem.addEventListener('command', () => {
      Services.dirsvc.get('UChrm', Ci.nsIFile).launch();
    });
  • Ich weiß nicht, was du mit „ähnlich dem CSS ausschaut“ meinst. Aber grundsätzlich ist es genau das Gleiche, ob du den Funktionsnamen angibst und die Funktion an anderer Stelle definierst oder ob du die Funktion direkt an die Stelle schreibst:

    Du nanntest es, glaube ich, "String".

    Zitat von Sören

    Man setzt dann eben nicht mehr das onclick-Attribut und dann den Code als String, sondern verwendet die addEventListener-Methode und schreibt den Code direkt

    Aber ist ja nicht wirklich soo wichtig, finde ich.
    Wichtig ist, dass ich Dich scheinbar richtig verstanden habe! Nicht alles, was mit "on" anfängt, muss geändert werden.

    Ich blicke nur gerade nicht, welche Codezeilen Du da ausgelassen hast.

    Was mache ich denn mit den anderen Attributen?
    Wie bekomme ich diese denn hier noch unter?

    JavaScript
    let toolbaritem = aDocument.createXULElement('toolbarbutton');
    /* … */
    toolbaritem.addEventListener('command', () => {
      Services.dirsvc.get('UChrm', Ci.nsIFile).launch();
    });


    AHHHH! Habe mir gerade Dein geändertes Skript angeschaut.

    Ich belasse es dabei!

    Mit <3lichem Gruß

    Mira

  • Du nanntest es, glaube ich, "String".

    Ein „String“ meint im Kontext der Programmierung gewöhnlichen Text. Was ich damit meinte, war ganz einfach, dass wenn du das Script als großen Textblock hier im Forum einfügst, alles in der gleichen Farbe dargestellt wird und du nicht die Syntax-Hervorhebung bekommst, die du bekommst, wenn der Code als JavaScript erkannt wird. Und das macht für die Lesbarkeit schon sehr viel aus.

    Ich blicke nur gerade nicht, welche Codezeilen Du da ausgelassen hast.

    Ich habe alles ausgelassen, was für die Frage nicht relevant war. So wie in deinem Nachtrag passt das also. Nur eine Anmerkung zwecks Lesbarkeit:

    JavaScript
        for (let p in props)
            toolbaritem.setAttribute(p, props[p]);
            
            toolbaritem.addEventListener('command', () => {
      Services.dirsvc.get('UChrm', Ci.nsIFile).launch();
    });

    Die Einrückung ist nicht gut. Und während das zwar für die Funktion keine Rolle spielt, zeigt sehr gut, wieso ich kein Freund davon bin, geschweifte Klammern wegzulassen, auch wenn diese optional sind. Konkret geht es darum:

    JavaScript
    for (let p in props)
      toolbaritem.setAttribute(p, props[p]);

    Eigentlich würde man das so schreiben:

    JavaScript
    for (let p in props) {
      toolbaritem.setAttribute(p, props[p]);
    }

    Die Klammern kannst du nur weglassen, weil es nur eine einzige Zeile dazwischen gibt. Aber so, wie der Code formatiert ist, könnte man fälschlicherweise auf die Idee gebracht werden, dass die folgende Zeile auch als Teil der Schleife ausgeführt wird, obwohl es gar nicht so ist:

    JavaScript
    toolbaritem.addEventListener('command', () => {

    Und das nur, weil beide Zeilen an der gleichen Position beginnen:

    JavaScript
      toolbaritem.setAttribute(p, props[p]);
      toolbaritem.addEventListener('command', () => {

    Also wie gesagt: Funktional alles in Ordnung. Aber die Lesbarkeit würde ich optimieren, um nicht irgendwann durcheinander zu kommen. Erstens immer Klammern setzen, zweitens Einrückung. So sieht der obige doch schon viel übersichtlicher aus und hilft beim Vermeiden von Fehlern:

  • Hier mal das ganze Skript.

    Das meinst Du doch so?

    Mit <3lichem Gruß

    Mira

  • Schon besser. Dieser Block:

    JavaScript
    toolbaritem.addEventListener('command', () => {      
        Services.dirsvc.get('UChrm', Ci.nsIFile).launch();
    });

    … müsste eigentlich noch um ein Zeichen nach links gerückt werden, um auf der gleichen Ebene wie der Code darüber und darunter zu starten, und auch die Kommentare sind merkwürdig platziert. Aber das, was tatsächlich zu Irritationen führen könnte, ist gelöst. ;)

  • Ich Danke Dir.

    Wenn ich aber diesen Block um ein Zeichen nach links rücke,
    stimmt das aber doch nicht mehr mit der "Schleife" onBuild: function(aDocument) { ..... } überein.
    Zeile 8 - Zeile 28

    Aber nochmals vielen Dank, habe nun alle meine Skripte überarbeitet und korrigiert.
    Die Kommentare fliegen dann auch irgendwann raus, sowie die "toten" Codezeilen.
    Ist ja erst einmal nur für mich, damit ich besser sehen kann, was ich gegenüber den "Backups" geändert habe.

    Mit <3lichem Gruß

    Mira

  • Wenn ich aber diesen Block um ein Zeichen nach links rücke,
    stimmt das aber doch nicht mehr mit der "Schleife" onBuild: function(aDocument) { ..... } überein.
    Zeile 8 - Zeile 28

    Nur um ein einziges Zeichen. Du rückst in deinem gesamten Script mit vier Zeichen ein, die drei genannten Zeilen sind mit fünf Zeichen eingerückt. Deswegen stehen diese drei Zeilen nicht direkt unter der for-Schleife und nicht direkt über dem return, sondern versetzt.

    Das ist nur eine Kleinigkeit und tut für die Übersichtlichkeit nicht mehr viel. Mir sticht das nur sofort ins Auge. Und wenn du eh schon dabei bist, die Einrückung zu verbessern … ;)

  • Wozu aber 193 Zeilen, wenn es 6 Zeilen auch tun?

    Ja, wenn man aber die gesamte Sammlung sowieso auf den Rechner hat oder wenn man keine Skripte nutzt, reicht der Stil.

    Übrigens: Ich habe gestern schon die nötige Änderung für das Skript an Aris gemeldet.

    Jepp, hab ich bemerkt.

  • Hallo Leute, benutze das Script "Tooltips.us.js".

    Funktioniert soweit auch gut. Nur hat sich ja vor kurzem die Tabvorschau geändert, habe bei mir das Voschaubild abgeschaltet und sehe nur den Tooltip. Nur ist ber leider schwarz mit weisser Schrift. Nun frage ich mich, ob es nicht möglich wäre den Tooltip der Tabvorschau auch in das Script einzubinden, damit ich die Farben und auch die Schriftart ändern kann. Wäre toll, wenn jemand helfen könnte.

    Ach ja, hier noch mein benutztes Script:

    Gruß

    Michael (mkpcxxl)

  • Hallo Leute, benutze das Script "Tooltips.us.js".

    Funktioniert soweit auch gut. Nur hat sich ja vor kurzem die Tabvorschau geändert, habe bei mir das Voschaubild abgeschaltet und sehe nur den Tooltip. Nur ist ber leider schwarz mit weisser Schrift. Nun frage ich mich, ob es nicht möglich wäre den Tooltip der Tabvorschau auch in das Script einzubinden, damit ich die Farben und auch die Schriftart ändern kann. Wäre toll, wenn jemand helfen könnte.

    ...

    Gruß

    Michael (mkpcxxl)

    Ergänze!

    Nun ja, und passe die Farben und Schriftart, Größe usw. Deinen Wünschen an.

    Mit <3lichem Gruß

    Mira

  • Hallo zusammen.
    Bitte testet mal dieses Script.
    Es fügt dem Rechtsklick Kontextmenü der Lesezeichen
    den Eintrag Lesezeichen Seitenleiste öffnen hinzu.
    Öffnet sich bei Euch die Seitenleiste?

    Wenn alles passt lade ich es dann bei mir hoch.
    Mfg.
    Endor

    Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:132.0) Gecko/20100101 Firefox/132.0
    OS: Windows 10 pro 64 bit und Windows 10 Home 64 bit
    Meine Scripte Sammlung: https://github.com/Endor8/userChrome.js
    Kein Support per PN. Fragen bitte im Forum stellen!