Ridisegno del Composer dietro enable_new_composer_actions
Questa modifica introduce un’esperienza di composizione ridisegnata e la rilascia dietro un nuovo flag alpha per cambiamenti futuri. Con il flag disattivato (predefinito), nulla cambia visibilmente. Gli amministratori possono attivarlo tramite la pagina di amministrazione dei cambiamenti futuri.
Cosa cambia quando il flag è attivo
-
Menu a tendina unificato delle azioni. Il vecchio menu a tendina
composer-actionsdi SelectKit è stato sostituito da un nuovo componente Glimmer/DMenu (composer-actions-new.gjs). Continua a mostrare tutte le stesse righe per la modifica della modalità (rispondi all’argomento, rispondi come nuovo argomento, crea PM, ecc.) con etichette e icone più chiare. -
Interruttori integrati nelle azioni. Whisper / no-bump / unlist vengono ora visualizzati come elementi
<DToggleSwitch>nella parte inferiore dello stesso menu a tendina — senza un menu separato a pulsante combinato. Lo stato dell’interruttore persiste durante le modifiche di modalità (ad esempio: attiva whisper → passa da «rispondi all’argomento» a «rispondi al post» → rimane in modalità whisper).
-
Indicatore a pillola per Whisper. Un piccolo pulsante a destra del trigger del menu a tendina mostra lo stato attuale di Whisper in due varianti visive:
--public(colore terziario, icona dell’occhio, «La risposta sarà visibile») e--whispering(sfondo primary-medium / primary-very-low, icona dell’occhio barrato, «In modalità Whisper»). Cliccandolo si attiva/disattiva Whisper — stesso percorso di codice dell’interruttore interno al menu a tendina, quindi i due rimangono sincronizzati. Anche l’icona del trigger cambia infar-eye-slashquando si è in modalità Whisper. -
Esperienza di modifica (UX). Durante la modifica di un post, il menu a tendina si contrae in un’etichetta statica senza freccia (icona della matita + «Modifica post»). Il pulsante «Aggiungi motivo di modifica», che in precedenza si trovava altrove nell’interfaccia del composer, è stato integrato in questo trigger statico come pulsante cliccabile «Descrivi la tua modifica»; cliccandolo l’etichetta viene sostituita da un campo di testo legato a
composer.editReasone viene messo a fuoco. -
Interfaccia del Composer. Il testo/span
.action-titleè stato rimosso — il trigger del menu a tendina mostra direttamente la modalità corrente. -
Link a Post/Argomenti appariranno solo quando necessario. Un link all’argomento verrà visualizzato quando ci si sposta dall’argomento, mentre il link al post verrà visualizzato quando si scorre lontano dal post o ci si sposta da esso.
Note per gli sviluppatori di plugin
Il nuovo componente non è una sottoclasse di SelectKit, quindi le vecchie API di estensione non lo raggiungono. Per supportare entrambi gli stati del flag in questa fase alpha, i plugin dovrebbero registrare entrambe le API:
| Vecchia API (funziona solo sul vecchio componente) | Nuova API (funziona solo sul nuovo componente) |
|---|---|
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(); }) |
La struttura della riga ({ name, description, icon, id }) è identica in entrambi. Il transformer del comportamento riceve { actionId, options, model } nel suo contesto.
I plugin che registrano solo i vecchi hook scompariranno silenziosamente dal composer non appena un amministratore attiva il flag. I plugin che registrano solo i nuovi transformer saranno invisibili mentre il flag è disattivato (predefinito per tutti al momento dell’unione).
Riferimenti:
-
discourse-post-voting/extend-composer-actions.js — esempio funzionante di registrazione duale (nel core)
-
discourse-staff-alias — una PR separata aggiunge la registrazione duale lì
-
transformers.js — i nomi dei due nuovi transformer
Note sul rilascio
-
Lo stato del flag è alpha — attivabile solo per i test interni.
-
I plugin che si integrano con le azioni del composer dovrebbero aggiungere la registrazione duale prima che questo venga promosso a
beta/stable. -
I test coprono entrambi gli stati: le specifiche di accettazione/sistema esistenti coprono il flag disattivato; i file fratelli
*-new-test.jscoprono il flag attivo (più i selettori DOM del nuovo componente per il menu a tendina unificato, gli elementi interruttore, l’indicatore Whisper e gli span delle etichette divise).



