Einführung eines neuen Dropdown-Menüs für Composer-Aktionen im "Post Type"

Redesign des Composers hinter enable_new_composer_actions

Dies führt ein neu gestaltetes Composer-Erlebnis ein und stellt es hinter einen neuen Alpha-„Upcoming-Change“-Flag. Wenn der Flag deaktiviert ist (Standard), ändert sich nichts Sichtbares. Administratoren können über die Admin-Seite für „Upcoming-Changes“ aktiviert werden.

Was sich ändert, wenn der Flag aktiviert ist

  • Vereinheitlichtes Dropdown für Aktionen. Das alte SelectKit-composer-actions-Dropdown wird durch eine neue Glimmer/DMenu-Komponente (composer-actions-new.gjs) ersetzt. Es zeigt weiterhin alle gleichen Zeilen zum Umschalten des Modus an (Antwort auf Thema, Antwort als neues Thema, PM erstellen usw.) mit klareren Beschriftungen und Icons.

  • Schalter sind direkt bei den Aktionen integriert. Whisper / No-Bump / Unlist werden nun als <DToggleSwitch>-Elemente am unteren Rand desselben Dropdowns gerendert – kein separates Kombi-Button-Menü mehr. Der Schalterzustand bleibt beim Wechsel des Modus erhalten (z. B. Whisper aktivieren → von „Antwort auf Thema“ zu „Antwort auf Beitrag“ wechseln → Whisper bleibt aktiv).

  • Whisper-Indikator-Pille. Ein kleiner Button rechts neben dem Dropdown-Auslöser zeigt den aktuellen Whisper-Zustand in zwei visuellen Varianten an: --public (tertiäre Farbe, Augen-Icon, „Antwort wird sichtbar sein“) und --whispering (Hintergrund in Primary-Medium / Primary-Very-Low, durchgestrichenes Augen-Icon, „Whispering“). Ein Klick darauf schaltet den Whisper-Zustand um – derselbe Code-Pfad wie beim Schalter im Dropdown, sodass beide synchron bleiben. Das Auslöser-Icon selbst wechselt beim Whispering ebenfalls zu far-eye-slash.

  • Bearbeitungs-UX. Beim Bearbeiten eines Beitrags kollabiert das Dropdown zu einer statischen, ohne Pfeil-Icon beschrifteten Zeile (Stift-Icon + „Beitrag bearbeiten“). Der früher anderswo im Composer-Chrome befindliche Button „Bearbeitungsgrund hinzufügen“ ist nun in diesen statischen Auslöser integriert als klickbarer Button „Änderung beschreiben“; ein Klick darauf ersetzt die Beschriftung durch ein Texteingabefeld, das an composer.editReason gebunden ist und den Fokus darauf legt.

    • editing
  • Composer-Chrome. Der Text/Span .action-title wurde entfernt – der Dropdown-Auslöser zeigt nun direkt den aktuellen Modus an.

  • Beitrags-/Themen-Links erscheinen nur noch bei Bedarf. Ein Themen-Link wird beim Verlassen des Themas gerendert, und der Beitrags-Link wird gerendert, wenn man vom Beitrag wegsrollt oder das Thema verlässt.

Hinweise für Plugin-Entwickler

Die neue Komponente ist kein Unterklasse von SelectKit, daher erreichen die alten Erweiterungs-APIs sie nicht. Um in dieser Alpha-Phase beide Flag-Zustände zu unterstützen, sollten Plugins beide APIs registrieren:

Alte API (funktioniert nur beim alten Component) Neue API (funktioniert nur beim neuen Component)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

Die Zeilenstruktur ({ name, description, icon, id }) ist in beiden Fällen identisch. Der Behavior-Transformer erhält { actionId, options, model } im Kontext.

:double_exclamation_mark: Plugins, die nur die alten Hooks registrieren, verschwinden stillschweigend aus dem Composer, sobald ein Administrator den Flag aktiviert. Plugins, die nur die neuen Transformer registrieren, sind unsichtbar, solange der Flag deaktiviert ist (Standard für alle beim Zusammenführen).

Referenzen:

  • discourse-post-voting/extend-composer-actions.js — Beispiel für eine duale Registrierung (im Core)

  • discourse-staff-alias — separates PR fügt dort eine duale Registrierung hinzu

  • transformers.js — die beiden neuen Transformer-Namen

Rollout-Hinweise

  • Der Flag-Status ist Alpha – Aktivierung nur für interne Tests.

  • Plugins, die mit Composer-Aktionen integriert sind, sollten eine duale Registrierung hinzufügen, bevor dies zu beta/stable befördert wird.

  • Tests decken beide Zustände ab: Bestehende Akzeptanz-/System-Spezifikationen decken den Flag-off-Zustand ab; sibling-*-new-test.js-Dateien decken den Flag-on-Zustand ab (sowie die neuen DOM-Selektoren für das vereinheitlichte Dropdown, Schalter-Elemente, Whisper-Indikator und geteilte Beschriftungs-Spans).

20 „Gefällt mir“

Der „Themenlink“ wird zusätzlich zum Titel des Themas mit HTML-Code dargestellt…

Das kann nicht richtig sein.

Hier behoben - FIX: Do not render fancyTitle link in composer header by jordanvidrine · Pull Request #40500 · discourse/discourse · GitHub

4 „Gefällt mir“

Wäre es möglich, die Option „Beitragstimmung umschalten“ auszublenden, wenn der ausgewählte Kategorietyper nicht Ideen ist oder die Kategorieeinstellungen die Funktion zur Beitragstimmung nicht aktiviert haben? : ))

5 „Gefällt mir“

Das ergibt für mich Sinn. Ich denke, das könnte eine Regression sein? Oder war das schon immer so, weißt du, @jordan.vidrine?

1 „Gefällt mir“

Das war schon immer so: Das Plugin für Beitragsabstimmungen ist siteweit und nicht nach Kategorien begrenzt. Die Einstellungen auf Kategorieebene dienen lediglich zur Festlegung des Standards, nicht dazu, die Nutzung einzuschränken.

Wir befinden uns mit dem Plugin für Beitragsabstimmungen noch in einer Übergangsphase. Ich denke, wir müssen eine Migration planen, um eine breitere Nutzung nicht zu beeinträchtigen, bevor wir die Nutzung auf bestimmte Kategorien beschränken – allein schon, weil der „Ideen“-Typ ein relativ neues Konzept ist.

2 „Gefällt mir“

Die gute Nachricht ist, dass wir in der Zwischenzeit Hooks haben, um dies in einer Theme-Komponente zu ermöglichen … dies funktioniert in einem Initializer, um den Umschalter nur in einer Ideen-Kategorie anzuzeigen:

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
    name: "hide-post-voting-toggle",
    after: "extend-composer-actions", 

    initialize() {
      withPluginApi((api) => {
        api.registerValueTransformer(
          "composer-actions-content",
          ({ value, context }) => {
            const category = context.composerModel?.category;
    
            if (!category?.isType("ideas")) {
              return value.filter((item) => item.id !== "togglePostVoting");
            }
    
            return value;
          }
        );
      });
    }
};

8 „Gefällt mir“

Auf meinem Tablet ist das Dropdown-Menü hinter dem Composer versteckt.

1 „Gefällt mir“

Hallo @Moin, danke, dass du uns auf dieses Problem aufmerksam gemacht hast.

Ich konnte das Problem auf meiner Seite mit Chromium, Firefox oder Safari nicht reproduzieren, und leider lässt sich das angehängte Video bei mir nicht abspielen.

Um uns bei der Diagnose und Fehlerbehebung zu unterstützen, könntest du uns ein paar weitere Details nennen?

  • Betriebssystem: (z. B. Android, iOS, Windows, macOS, Linux)

  • Browser & Version: (z. B. Chrome 125, Safari 17)

  • Discourse-Version: Diese findest du in deinem Admin-Dashboard oder indem du diese Anleitung auf Meta befolgst.

Etwas, das du jetzt gleich versuchen kannst:

Teste das Verhalten im Safe Mode, indem du /safe-mode ans Ende der URL deiner Site hängst (z. B. https://discourse.example.com/safe-mode).

  • Wenn das Problem verschwindet: Eine deiner Site-Anpassungen (Plugins, Themes oder Komponenten) verursacht wahrscheinlich einen Konflikt.

  • Wenn das Problem weiterhin besteht: Es handelt sich um einen Kernfehler, und die oben genannten Browser-/Geräte-Details helfen uns, ihn zu lokalisieren und zu beheben.

Danke für deine Geduld, das wird sehr geschätzt. Bitte lass es uns wissen, wenn du Fragen zu den hier geteilten Informationen hast.

2 „Gefällt mir“

Findest du es nicht etwas albern, mir die Details zum Safe-Mode und wie ich meine Discourse-Version finde zu erklären?

Wie du im Video oben sehen kannst (ich habe es erneut hochgeladen - bin mir nicht sicher, warum es heute nicht funktionierte), hatte ich den Safe-Mode aktiviert.

Die aktuelle Version ist 2a08d5d (Sie war anders, als ich den Bericht schrieb). Ich kann das Problem auch hier reproduzieren - ich habe nur mein Forum gewählt, weil Admins mehr Optionen haben, sodass das versteckte Menü besser sichtbar war. Auf Meta ist es kaum sichtbar. Meistens scheint der Button gar nicht zu funktionieren.

Ich verwende ein Samsung Galaxy Tab S9 FE (Android 16) mit Firefox


Ich habe gerade Chrome geprüft - es scheint das gleiche zu sein:

Normalerweise treten solche Probleme auf, weil mein Tablet eine “Desktop-Größe” hat, aber berührungsempfindlich ist. Ähnlich wie die Probleme hier oder hier

2 „Gefällt mir“

Danke, dieser Kontext ist hilfreich.

Ich habe kein Android-Touch-Tablet, aber ich kann das Problem in Firefox zuverlässig reproduzieren, indem ich den emulierten Touch-Button verwende.

Vorläufig kann es mit dieser Stilregel gelöst werden:

.composer-toggles-menu-content, .composer-actions-dropdown {
    z-index: 1100;
}

Ich werde Discourse mit diesem beabsichtigten Fix aktualisieren und benachrichtigen, wenn die Änderungen übernommen wurden. *Aktualisierung: Die Änderungen wurden übernommen, Sie werden den Fix in Ihrer nächsten Bereitstellung sehen, die Version d82dc7c oder neuer ausführt.

Nochmals danke, dass Sie das Problem gemeldet haben.

3 „Gefällt mir“

Danke!

Nebenbei: Da Bearbeitungen im letzten Beitrag das Thema nicht mehr nach oben holen, funktioniert eine Bearbeitung nicht gut als Benachrichtigung. Einer deiner Kollegen hat einmal gesagt, dass man einfach separate Updates posten sollte. Es ist interessant, dass ihr das oft selbst nicht macht.