Rediseño del compositor detrás de enable_new_composer_actions
Esto introduce una experiencia de compositor rediseñada y la lanza detrás de un nuevo cambio alfa próximo. Con la bandera desactivada (predeterminado), nada cambia visualmente. Los administradores pueden optar por activarla en la página de administración de cambios próximos.
Qué cambia cuando la bandera está activada
-
Menú desplegable de acciones unificado. El antiguo menú desplegable
composer-actionsde SelectKit se reemplaza por un nuevo componente Glimmer/DMenu (composer-actions-new.gjs). Sigue mostrando las mismas filas de cambio de modo (responder al tema, responder como nuevo tema, crear MP, etc.) con etiquetas e iconos más claros. -
Alternancias vivas con las acciones. Los modos Susurro / sin sobresalto / no listado ahora se muestran como elementos
<DToggleSwitch>en la parte inferior de ese mismo menú desplegable, sin un menú separado de botón combinado. El estado de la alternancia persiste en los cambios de modo (por ejemplo, activar susurro → cambiar de responder al tema a responder a una publicación → sigue en modo susurro).
-
Indicador de susurro en forma de píldora. Un pequeño botón a la derecha del activador del menú desplegable muestra el estado actual del susurro en dos variantes visuales:
--public(color terciario, icono de ojo, «La respuesta será visible») y--whispering(fondo primario-medio / primario-muy bajo, icono de ojo tachado, «Susurrando»). Hacer clic en él alterna el susurro, siguiendo la misma ruta de código que la alternancia dentro del menú desplegable, por lo que ambos permanecen sincronizados. El propio icono del activador también cambia afar-eye-slashcuando se está susurrando. -
Experiencia de edición. Al editar una publicación, el menú desplegable se contrae a una etiqueta estática sin viñeta (icono de lápiz + «Editar publicación»). El botón «Añadir motivo de edición», que antes estaba en otro lugar de la interfaz del compositor, se integra en este activador estático como un botón clicable «Describe tu edición»; al hacer clic en él, la etiqueta se reemplaza por un campo de texto vinculado a
composer.editReasony se enfoca. -
Interfaz del compositor. El texto/etiqueta
.action-titlese elimina: el propio activador del menú desplegable muestra el modo actual. -
Enlaces a publicaciones/temas ahora solo aparecerán cuando sea necesario. Un enlace al tema se mostrará al navegar fuera del tema, y el enlace a la publicación se mostrará al desplazarse fuera de la publicación o navegar fuera.
Notas para autores de plugins
El nuevo componente no es una subclase de SelectKit, por lo que las antiguas APIs de extensión no lo alcanzan. Para admitir ambos estados de la bandera en esta fase alfa, los plugins deben registrar ambas APIs:
| API antigua (funciona solo en el componente antiguo) | API nueva (funciona solo en el componente nuevo) |
|---|---|
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 forma de la fila ({ name, description, icon, id }) es idéntica en ambos. El transformador de comportamiento recibe { actionId, options, model } en su contexto.
Los plugins que solo registren los antiguos hooks desaparecerán silenciosamente del compositor en el momento en que un administrador active la bandera. Los plugins que solo registren los nuevos transformadores serán invisibles mientras la bandera esté desactivada (el valor predeterminado para todos al fusionar).
Referencias:
-
discourse-post-voting/extend-composer-actions.js: ejemplo de trabajo de registro dual (en el núcleo)
-
discourse-staff-alias: una PR separada añade el registro dual allí
-
transformers.js: los dos nuevos nombres de transformadores
Notas de implementación
-
El estado de la bandera es alfa: opt-in para pruebas internas.
-
Los plugins que se integran con las acciones del compositor deben añadir el registro dual antes de que esto se promueva a
beta/estable. -
Las pruebas cubren ambos estados: las especificaciones de aceptación/sistema existentes cubren la bandera desactivada; los archivos
*-new-test.jshermanos cubren la bandera activada (más los selectores DOM del nuevo componente para el menú desplegable unificado, los elementos de alternancia, el indicador de susurro y las porciones de etiqueta dividida).



