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).

8 „Gefällt mir“