Présentation d'un nouveau menu déroulant d'actions de compositeur pour les types de publication

Refonte de l’éditeur derrière enable_new_composer_actions

Cette mise à jour introduit une expérience d’éditeur repensée et la livre derrière un nouveau changement alpha à venir. Avec le drapeau désactivé (par défaut), rien ne change visuellement. Les administrateurs peuvent opter pour cette fonctionnalité via la page d’administration des changements à venir.

Nouveau menu de publication|vidéo

Ce qui change lorsque le drapeau est activé

  • Menu déroulant des actions unifié. Le menu déroulant hérité composer-actions de SelectKit est remplacé par un nouveau composant Glimmer/DMenu (composer-actions-new.gjs). Il expose toujours les mêmes lignes de changement de mode (répondre au sujet, répondre en tant que nouveau sujet, créer un MP, etc.) avec des libellés et des icônes plus clairs.

  • Les bascules sont intégrées aux actions. Whisper / no-bump / unlist sont maintenant rendus sous forme d’éléments <DToggleSwitch> en bas du même menu déroulant — sans menu de bouton combiné séparé. L’état de la bascule persiste lors des changements de mode (par exemple, activer whisper → passer de « répondre au sujet » à « répondre au message » → whisper toujours actif).

  • Indicateur visuel de type « Whisper ». Un petit bouton à droite du déclencheur du menu déroulant affiche l’état actuel du whisper dans deux variantes visuelles : --public (couleur tertiaire, icône d’œil, « La réponse sera visible ») et --whispering (arrière-plan primary-medium / primary-very-low, icône d’œil barré, « Whispering »). Cliquer dessus bascule le whisper — même chemin de code que la bascule à l’intérieur du menu déroulant, de sorte que les deux restent synchronisés. L’icône du déclencheur elle-même est également remplacée par far-eye-slash lors du whisper.

  • Expérience de modification (UX). Lors de la modification d’un message, le menu déroulant se réduit en un libellé statique sans flèche (icône de crayon + « Modifier le message »). Le bouton « Ajouter un motif de modification », qui se trouvait auparavant ailleurs dans l’interface de l’éditeur, est intégré à ce déclencheur statique sous la forme d’un bouton cliquable « Décrivez votre modification » ; cliquer dessus remplace le libellé par un champ de texte lié à composer.editReason et lui donne le focus.

    • modification
  • Interface de l’éditeur. Le texte/élément .action-title est supprimé — le déclencheur du menu déroulant affiche lui-même le mode actuel.

  • Liens vers les messages/sujets n’apparaîtront désormais que lorsque nécessaire. Un lien vers un sujet s’affichera lors de la navigation hors du sujet, et un lien vers un message s’affichera lors du défilement hors du message ou de la navigation hors de celui-ci.

Notes pour les auteurs de plugins

Le nouveau composant n’est pas une sous-classe de SelectKit, de sorte que les anciennes API d’extension ne s’y appliquent pas. Pour prendre en charge les deux états du drapeau lors de cette phase alpha, les plugins doivent enregistrer les deux API :

Ancienne API (fonctionne uniquement sur l’ancien composant) Nouvelle API (fonctionne uniquement sur le nouveau composant)
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 structure des lignes ({ name, description, icon, id }) est identique dans les deux cas. Le transformateur de comportement reçoit { actionId, options, model } dans son contexte.

:double_exclamation_mark: Les plugins qui n’enregistrent que les anciens hooks disparaîtront silencieusement de l’éditeur dès qu’un administrateur activera le drapeau. Les plugins qui n’enregistrent que les nouveaux transformateurs seront invisibles tant que le drapeau est désactivé (état par défaut pour tous au moment de la fusion).

Références :

  • discourse-post-voting/extend-composer-actions.js — exemple de fonctionnement avec double enregistrement (dans le noyau)

  • discourse-staff-alias — une PR séparée ajoute le double enregistrement là-bas

  • transformers.js — les deux nouveaux noms de transformateurs

Notes de déploiement

  • L’état du drapeau est alpha — activation manuelle pour les tests internes.

  • Les plugins qui s’intègrent aux actions de l’éditeur doivent ajouter un double enregistrement avant que cela ne soit promu en beta/stable.

  • Les tests couvrent les deux états : les spécifications d’acceptation/système existantes couvrent le drapeau désactivé ; les fichiers frères *-new-test.js couvrent le drapeau activé (ainsi que les sélecteurs DOM du nouveau composant pour le menu déroulant unifié, les éléments de bascule, l’indicateur de whisper et les segments de libellé divisés).

8 « J'aime »