Introduzione di un nuovo menu a tendina per le azioni del Composer per il "Post Type"

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-actions di 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 in far-eye-slash quando 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.editReason e viene messo a fuoco.

    • editing
  • 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.

:double_exclamation_mark: 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.js coprono 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).

20 Mi Piace

Il «collegamento all’argomento» viene visualizzato con codice HTML oltre al titolo dell’argomento…

Non può essere corretto.

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

4 Mi Piace

Sarebbe possibile non visualizzare l’opzione Attiva/disattiva voto ai post se il tipo di categoria selezionata non è Ideas, oppure se le impostazioni della categoria non hanno abilitato la funzione di voto ai post? : ))

5 Mi Piace

Ha senso per me, penso che potrebbe essere una regressione? O è sempre stato così, lo sai @jordan.vidrine?

1 Mi Piace

È sempre stato così: il plugin di votazione dei post è valido per tutto il sito, non limitato per categoria. Le impostazioni a livello di categoria servono solo a definire il valore predefinito, non a impedirne l’uso.

Siamo in una fase di transizione con il plugin di votazione dei post… Credo che dovremo pianificare una migrazione per evitare di comprometterne l’uso più generale prima di limitarlo a categorie specifiche, semplicemente perché il tipo “idee” è un concetto abbastanza recente.

2 Mi Piace

La buona notizia è che nel frattempo abbiamo degli hook per permettere questo in un componente del tema… questo funziona in un inizializzatore per mostrare l’interruttore solo in una categoria “idee”:

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 Mi Piace

Sul mio tablet il menu a tendina è nascosto dietro al composer.

1 Mi Piace

Ciao @Moin, grazie per averci segnalato il problema.

Non sono riuscito a riprodurre il problema da parte mia utilizzando Chromium, Firefox o Safari e, purtroppo, il video allegato non si riproduce per me.

Per aiutarci a diagnosticare e individuare il problema, potresti fornirci alcuni dettagli in più?

  • Sistema operativo: (es. Android, iOS, Windows, macOS, Linux)

  • Browser e versione: (es. Chrome 125, Safari 17)

  • Versione Discourse: Puoi trovarla nella tua Dashboard di amministrazione o seguendo questa guida su Meta.

Una cosa che puoi provare subito:

Testa il comportamento in Modalità sicura aggiungendo /safe-mode alla fine dell’URL del tuo sito (es. https://discourse.example.com/safe-mode).

  • Se il problema scompare: È probabile che una delle personalizzazioni del tuo sito (plugin, temi o componenti) stia causando un conflitto.

  • Se il problema persiste: Si tratta di un bug principale e i dettagli sul browser/dispositivo che fornisci sopra ci aiuteranno a individuarlo e risolverlo.

Grazie per la tua perseveranza, è molto apprezzata, e ti preghiamo di farci sapere se hai domande sulle informazioni che ho condiviso qui.

2 Mi Piace

Non ritieni che sia un po’ assurdo spiegarmi i dettagli della modalità sicura e come trovare la mia versione di Discourse?

Come puoi vedere nel video sopra (l’ho ricaricato di nuovo - non sono sicuro del motivo per cui oggi non funzionava) avevo abilitato la modalità sicura.

La versione attuale è 2a08d5d (era diversa quando ho scritto il rapporto). Posso riprodurlo anche qui - ho scelto solo il mio forum perché gli amministratori hanno più opzioni, quindi il menu nascosto era più visibile. Su Meta è appena visibile. Nella maggior parte dei casi sembra che il pulsante non funzioni affatto

Sto usando un Samsung Galaxy Tab S9 FE (Android 16) con Firefox


Ho appena controllato Chrome - sembra essere lo stesso:

Di solito questo tipo di problemi è dovuto al fatto che il mio tablet ha una “dimensione desktop” ma è touch. Simile ai problemi qui o qui

2 Mi Piace

Grazie, questo contesto è utile.

Non ho un tablet touch Android, ma posso riprodurre il problema in Firefox in modo affidabile utilizzando il pulsante touch emulato.

Provisoriamente, può essere risolto con questa regola di stile:

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

Aggiornare Discourse con questa correzione prevista e notificare quando le modifiche sono state integrate. *Aggiornamento: le modifiche sono state integrate, vedrai la correzione nel tuo prossimo deployment che esegue la versione d82dc7c o successiva.

Grazie ancora per aver segnalato il problema.

3 Mi Piace

Grazie!

Nota a margine: poiché le modifiche all’ultimo post non fanno più risaltare l’argomento, un edit non funziona bene come notifica. Un tuo collega ha detto una volta che bisognerebbe semplicemente pubblicare aggiornamenti separati. È interessante notare che spesso voi stessi non lo fate.