Redesenho do Composer atrás de enable_new_composer_actions
Isso introduz uma experiência de composer redesenhada e a libera atrás de uma nova mudança futura alfa. Com a flag desligada (padrão), nada muda visivelmente. Os administradores podem optar por participar através da página de administração de mudanças futuras.
O que muda quando a flag está ligada
Menu suspenso de ações unificado. O menu suspenso composer-actions do SelectKit legado é substituído por um novo componente Glimmer/DMenu (composer-actions-new.gjs). Ele ainda exibe todas as mesmas linhas de troca de modo (responder ao tópico, responder como novo tópico, criar MP, etc.) com rótulos e ícones mais claros.
Alternâncias ao vivo com as ações. Sussurro / sem bump / não listado agora são renderizados como itens <DToggleSwitch> na parte inferior desse mesmo menu suspenso — sem um menu de botão combinado separado. O estado da alternância sobrevive às trocas de modo (ex.: ativar sussurro → trocar de responder ao tópico para responder ao post → ainda sussurrando).
Pílula indicadora de sussurro. Um pequeno botão à direita do gatilho do menu suspenso mostra o estado atual do sussurro em duas variantes visuais: --public (cor terciária, ícone de olho, „A resposta será visível“) e --whispering (fundo primário-médio / primário-muito-baixo, ícone de olho-riscado, „Sussurrando“). Clicar nele alterna o sussurro — mesmo caminho de código que a alternância dentro do menu suspenso, para que os dois permaneçam sincronizados. O próprio ícone do gatilho também troca para far-eye-slash quando sussurrando.
UX de edição. Ao editar um post, o menu suspenso colapsa para um rótulo estático, sem caret (ícone de lápis + „Editar post“). O botão „Adicionar motivo de edição“ que antes vivia em outro lugar na interface do composer é incorporado a esse gatilho estático como um botão clicável „Descreva sua edição“; clicar nele troca o rótulo por uma entrada de texto vinculada a composer.editReason e foca nela.
Interface do Composer. O texto/span .action-title é removido — o próprio gatilho do menu suspenso mostra o modo atual.
Links de Post/Tópico agora aparecerão apenas quando necessário. Um link de tópico será renderizado ao navegar para fora do tópico, e o link do post será renderizado ao rolar para longe do post / navegar para fora.
Notas para autores de plugins
O novo componente não é uma subclasse do SelectKit, então as antigas APIs de extensão não o alcançam. Para suportar ambos os estados da flag nesta fase alfa, os plugins devem registrar ambas as APIs:
api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })
A forma da linha ({ name, description, icon, id }) é idêntica em ambos. O transformador de comportamento recebe { actionId, options, model } em seu contexto.
Plugins que registram apenas os antigos hooks desaparecerão silenciosamente do composer no momento em que um administrador habilitar a flag. Plugins que registram apenas os novos transformadores serão invisíveis enquanto a flag estiver desligada (o padrão para todos na mesclagem).
Referências:
discourse-post-voting/extend-composer-actions.js — exemplo de trabalho de registro duplo (no núcleo)
transformers.js — os dois novos nomes de transformadores
Notas de lançamento
O status da flag é alfa — opt-in para testes internos.
Plugins que integram com ações do composer devem adicionar registro duplo antes que isso seja promovido para beta/estável.
Os testes cobrem ambos os estados: as especificações de aceitação/sistema existentes cobrem flag-desligada; arquivos irmãos *-new-test.js cobrem flag-ligada (mais os seletores DOM do novo componente para o menu suspenso unificado, itens de alternância, indicador de sussurro e spans de rótulo dividido).
Seria possível não exibir a opção Alternar votação de postagem se o tipo de categoria selecionada não for Ideias, ou se as configurações da categoria não tiverem ativado o recurso de votação de postagem? : ))
Sempre foi assim: o plugin de votação em posts é global no site, e não restrito por categoria. As configurações no nível da categoria servem apenas para definir o padrão, e não para impedir o uso do plugin.
Estamos em um estado de transição com o plugin de votação em posts… Acredito que precisaremos planejar uma migração para evitar quebrar o uso mais geral dele antes de restringi-lo a categorias específicas, apenas porque o tipo “ideias” é um conceito bastante recente.
A boa notícia é que, enquanto isso, temos hooks para permitir isso em um componente de tema… isso funciona em um inicializador para mostrar o alternador apenas em uma categoria de ideias:
Não acha meio bobo explicar os detalhes do modo de segurança e como encontrar minha versão do Discourse para mim?
Como você pode ver no vídeo acima (eu o carreguei novamente — não tenho certeza do motivo de ter falhado hoje), eu havia ativado o modo de segurança.
A versão atual é 2a08d5d (era diferente quando eu escrevi o relatório). Também consigo reproduzir o problema aqui — só escolhi meu fórum porque os administradores têm mais opções, então o menu oculto era mais visível. No Meta, é mal visível. Na maioria das vezes, parece que o botão não funciona de jeito nenhum.
Vou atualizar o Discourse com esta correção pretendida e notificar quando as alterações forem mescladas. *Atualização: As alterações foram mescladas, você verá a correção na sua próxima implantação executando a versão d82dc7c ou mais recente.
Observação: como as edições na última mensagem já não elevam mais o tópico, uma edição não funciona bem como notificação. Um dos seus colegas disse certa vez que seria melhor publicar atualizações separadas. É interessante notar que vocês próprios nem sempre seguem essa prática.