TB68 - eigene Toolbar-Buttons für nicht vorhandene per User Script kreieren

  • Hallo alle.


    Ich hatte verschiedene Aktionen, die einfache per Toolbar-Button auszuführen sind, in TB 68 vermisst. Siehe diesen Thread.


    Hier meine Scripte, die bisher ganz normal wie gewünscht funktionieren.

    Vorraussetzung ist die grundsätzliche Erweiterung zur Nutzung von UserScript wie hier von "edvoldie" erläutert.


    Die Scripte bestehen im Wesentlichen immer aus dem gleichen Code.

    Nur die jeweils für die andere ID, Funktionalität bzw. für andere verknüpfte Icons zuständigen Zeilen sind anzupassen.

    Die Icons werden im Unterverzeichnis %Profilordner%/chrome/icons/ erwartet, was aber auch angepaßt werden kann.

    Icons sind im Anhang. icons.zip

    Die Scripte sollten ohne Änderungen auch unter Windows funktionieren, habe das aber nicht getestet (Tests nur unter Linux).

    Die Buttons werden in der Toolbar rechts eingeordnet und können händisch per "Anpassen" verschoben werden.


    [EDIT:

    - die neue Position der Buttons wird möglicherweise nicht gespeichert. Die Ursache ist unbekannt.

    Bei mir trat das Problem nur auf, wenn TB per "Restart" direkt neu gestartet wurd und bei extremen Experimenten.

    - Habe noch eine Korrektur vorgenommen. Die Funktion event.preventBubble() gibt es nicht, habe ich entfernt.

    - Weiters Script zum Sortieren ganz unten: SpecialSortEmails.uc.js]


    Grundsätzlich muß ich noch anmerken, daß ich mich eigentlich nicht mit JS UserScripten für TB auskenne :S

    Daher ist mir nicht alles klar, was da passiert. Verwendung bitte auf eigene Gefahr...

    Da ich aber schon Scipte für anderen Programme programmiert hatte, nun ja, einfach mal machen...


    Noch zu den "Orten" für die neuen Buttons (Zeile 49 im ersten Script), die möglich sind:

    "mail-bar3" (die Standard Toolbar / Buttonleiste)

    "mail-toolbar-menubar2" (Menüleiste)

    "tabbar-toolbar" (Toolbar in der Tableiste rechts)


    Das erste Script mit Kommentaren, hier für die Aktion "Alle Emails als gelesen markieren":


    Dieses Script löscht alle Emails des aktuellen Ordners (nur Emails, keine Unterordner):


    Dieses Script leert den Papierkorb des aktuell ausgewählten Bereichs / Kontos (alles, Emails UND Ordner):


    Dieses Script beendet TB:


    Dieses Script markiert alle Emails:


    Dieses Script startet TB neu, ein Mitteklick löscht den JS-Cache.

    Hierzu muß ich noch sagen, daß es nach dem Neustart auffällt, daß alle per Script erzeugten UserButtons nicht ihre händisch zugeordneten Positionen einnehmen. Alle sind dann zusammen rechts in der Toolbar. Das ist immer so, eagl auf welchem Weg TB direkt neu gestartet wird.

    TB normal beenden und neu starten behebt das Problem wieder.


    Dieses Script sortiert die Emails auf einen Schlag wie gewünscht.

    Ganz unten stehen als Kommentar weitere Befehle, die zu einer anderen Sortierung führen.

    Darüber geht auch ein gruppiertes Sortieren nach Datum absteigend bei gleichzeitigem Öffnen aller Gruppen.

    Mit goDoCommand("cmd_previousMsg") und gFolderDisplay.clearSelection() kann experimentiert werden, wie die Markierung einer Email zum Schluß gesetzt wird. (Wollte eigentlich immer die oberste markieren, den Code habe ich aber nicht herausgefunden)


    Nutzen und freuen! :thumbsup:

    Edited once, last by Thomas S. ().

  • Hallo Thomas S.,

    ich habe mir einmal das Script MarkAllEmailRead.uc.js geladen.
    Ich arbeite in der Mail Ansicht "Gruppiert", leider funktioniert das Script dort nicht, sondern nur in der Ansicht "Alle" und auch nur wenn ich mich in dem Mailkonto befinde, was ja auch kein Problem ist.

    Nur verschieben kann ich den Button unter Windows nicht, er steht immer wieder hinten wenn ich Thunderbird Neustarte.

    Egal ob TB 68.x oder TB60,X


    Gruß
    EDV-Oldi

  • Nur verschieben kann ich den Button unter Windows nicht, er steht immer wieder hinten wenn ich Thunderbird Neustarte.

    Das liegt IMHO jeweils an dieser Zeile:  toolbar.insertItem("restartThunderbird-button", toolbar.lastChild);.

    Kann man bestimmt irgendwie mit "before" oder "after" lösen, ich kanns leider nicht.

    Bei meinen Buttons in der "tabbar-toolbar" hab ich mich beholfen, die Scripte mit einem Prefix ("1_", "2_", "3_",...) zu versehen um die gewünschte Reihenfolge zu erreichen.


    Ich hab noch diesen Codeschnipsel in einem meiner Scripts gefunden, der Dir vielleicht weiterhilft:

    JavaScript
        var newposition = document.getElementById("button-newmsg");
        var toolbar = document.getElementById("mail-bar3");
        toolbar.insertItem("EmptyTrashFolder-button", newposition);

    W11 Home 64bit - TB 102.x (64-Bit) Portable

    Edited once, last by Harff182: Schreibfehler beseitigt, Code hinzugefügt ().

  • Ich arbeite in der Mail Ansicht "Gruppiert", leider funktioniert das Script dort nicht

    Hm, das kann ich nicht nachvollziehen. Liegt es an meinem Linux?

    Egal, wie ich die Ansicht der Emails sortiere oder gruppiere, ungelesene werden sofort als gelesen markiert... :/

    Aber alle Varianten kann ich auch nicht testen.

    Der verwendete Befehl ist eigentlich unabhängig von der Darstellung.


    Zu den Positionen: das ist mir generell dann aufgefallen, wenn ich TB direkt "restarted" habe. Dann sind alle immer rechts einsortiert.

    Normales Beenden / Fenster schließen behält die Position bzw. stellt sie auch wieder her.

    Bei den Tests (auch mit anderen Varianten der Einbindung von Scripten) hatte ich aber auch einmal ein "defektes" Profil erhalten, das sich durch dauerhaftes Auftreten dieses Fehlers zeigte. Die Buttonsposition wurde gar nicht mehr gespeichert. Mir half dann nur ein gesichertes Profil weiter.


    Ich suche noch nach einer anderen Möglichkeit als die Position .lastChild hergibt...

  • Im meinem Script, Restart mit Cache löschen, habe ich folgenden Eintrag für ein Symbol in einem Menü.

    Code
        var popup = document.getElementById('menu_FilePopup')
        popup.insertBefore(menuitem, document.getElementById('menu_FileQuitItem'));

    Leider bekomme ich das nicht für die tabbar-toolbar angepasst.

    Mit diesem Code:

    Code
    toolbar.insertItem("aboutconfig-toolbar", document.getElementById('ExtraConfigMenu-button')); 

    kann ich zwar ein Button angeben, aber ich bekomme damit keine vernünftige Reihenfolge zustande.


    Gruß
    EDV-Oldi

  • Funktioniert hatte diese Angabe (siehe auch hier).

    Der neue Button wird hier vor dem AddOn-Button eingefügt.

    Code
    var toolbar = document.getElementById("mail-bar3");
    var newposition = document.getElementById("button-addons");
    toolbar.insertItem("EmptyTrashFolder-button", newposition);

    Man benötigt die ID (hier der Buttonbezeichner "button-addons") als Parameter.

    Geht aber auch nur eingeschränkt (der Butoon muß sichtbar bzw. aktiv sein.

  • Das funktioniert bei mir leider alles nicht.

    Nur damit Du es verstehst, ich versuche das in meine Scripts einzubinden.
    Hier die Scripts um die es geht:

    // aboutconfig-button.uc.js


    // Addons-Update-Check-Button.uc.js

  • Das letzte Script ist für unsere Seite hier zu groß.

    Du solltest Dir das aber hier

    https://send.firefox.com/downl…2/#9SVr6ntaY9XuucrzCzxcoQ


    herunterladen können.


    Gruß
    EDV-Oldi

  • Dein Script "RestartThunderbird.uc.js" war die Grundlage für mein Script "RestartThunderbird.uc.js".


    Der Code ist im Prinzip identisch, nur kleine Anpassungen, nur Links- und Mittelklick (kein Rechtsklick) und eine Verknüpfung mit einer Icon-Datei im Profilordner (kein base64 Code).


    Zum Testen habe Ich die letzte Zeile noch mal geändert in toolbar.insertItem("MarkAllEmailRead-button") ohne zweiten Parameter.

    TB (hier v68) scheint sich seltsam zu verhalten beim Starten.

    Die gespeicherte Position des Buttons wird nur verwendet, wenn TB normal beendet und neu gestartet wird.

    Bei einem sofortigen Restart wird die gespeicherte Position nicht verwendet, der Button liegt dann in der Toolbox und wird nicht angezeigt.

    Bei Verwendung von toolbar.insertItem("MarkAllEmailRead-button", toolbar.lastChild) wird der Button dann auf die Standardposition ganz hinten einsortiert. firstChild positioniert ihn ganz links.

  • Das letzte große Script von Dir funktioniert bei mir nicht.


    Das im Script als Ziel angegebene Menü zum Anlegen des neuen Untermenüs existiert nicht. Die ID ist schlicht falsch / nicht vorhanden.

    Ausgabe Konsole:


    userChromeJS extras_config_menu.uc.js findet Zielpunkt 'task-tab-button' nicht, evtl. weil ein anderes Fenster als das Hauptfenster geoeffnet wurde. Falls dieser Fehler auch im Hauptfenster auftritt, bitte die vorgehende Definition von 'warpmenuto' kontrollieren.


    Zwei Änderungen helfen:


    Zeile 19: warpmenuto: 'sanitizeHistory',

    Zeile 42: var zielmenu = document.getElementById('taskPopup');


    Legt das neue Untermenü unter "Extras" und da unterhalb von "Neueste Chronik löschen" an.

    Ist das aber nicht der letzte Eintrag, dann ist das Symbol vor diesem letzten Eintrag.

    Insofern würde hier eine Umstellung auf "lastChild" helfen, ist aber umfangreich.

  • 'task-tab-button'

    Das ist der Tab von dem Aufgaben in Lightning, hast Du den nicht?

  • Hallo,

    Frage: diese Skripts funktionieren wahrscheinlich nicht in Versionen bis 60.0?

    2) Gibt es einen Link, in dem Evoldi die Voraussetzungen für Scripts erklärt?


    Gruß

  • Das ist der Tab von dem Aufgaben in Lightning, hast Du den nicht?

    Doch, in der Tat habe ich den (ganz rechts neben der Tab-Leiste).

    Aber warum gibt TB dann einen Fehler aus, weil er ihn bzw. die ID nicht findet?


    Sehr seltsam...

  • alle meine Sripts laufen von TB 60 bis TB 71.

    Und die Voraussetzung für Sritps ist die selbe wie im Firefox.

    Ich habe das auch hier im Forum auch angepinnt. Nur vom Smartphone Finde ich das im Moment nicht

  • Das ist der Tab von dem Aufgaben in Lightning, hast Du den nicht?

    Bei mir ist das auch ein Button in einer separaten Leiste rechts neben der Tableiste (im Prinzip also kein Tab).

    Diese kleine Leiste mit Kalender- und Aufgaben-Button wird von Lightning erzeugt.


    Und mir ist beim Testen aufgefallen, daß die Scripte ausgeführt werden, bevor diese kleine Leiste angezeigt wird.

    Da ist eine deutliche Verzögerung. Alle User-Buttons (auch die in der Tab-Leiste) sind praktisch sofort da, Kalender- und Aufgaben-Button erscheinen erst ganz zum Schluß. Hängt wohl vom Lightning AddOn so ab.


    Daher wohl eine zeitkritische Angelegenheit beim Programmstart. Was nicht da ist wird auch nicht per ID erkannt.

  • Quote

    Kalender- und Aufgaben-Button erscheinen erst ganz zum Schluß

    Das ist bei mir in der 68.x Version genauso, erst nach einem Restart ist es so wie ich es haben möchte .

    Das Problem ist im Moment erst in der Version 71 behoben.