Como parte de nossa busca contínua para padronizar os sistemas de renderização no código do Discourse, estamos substituindo a implementação da lista de tópicos.
Anteriormente, isso usava uma abordagem de ‘raw handlebars’ (.hbr) e podia ser personalizado por meio de substituições de template e raw-plugin-outlets. A nova implementação da lista de tópicos usa componentes Glimmer modernos e foi construída do zero para ser personalizável de maneiras sustentáveis.
A nova implementação já está disponível por meio da configuração glimmer_topic_list_mode.
disabled: usa a lista de tópicos legada “raw handlebars”.auto: detectará a compatibilidade de seus plugins e temas atuais. Se algum for incompatível, usará o sistema legado; caso contrário, usará a nova implementação.enabled: usará a nova implementação da lista de tópicos. Se você tiver plugins ou temas incompatíveis, seu site poderá quebrar.
Já atualizamos a maioria de nossos temas e plugins oficiais para serem compatíveis com o novo menu. No entanto, se você usa plugins, temas ou componentes de tema de terceiros que personalizam a lista de tópicos, será necessário atualizá-los.
Avisos serão exibidos no console do navegador identificando a origem da incompatibilidade.
Cronograma de Implementação
Estas são estimativas aproximadas sujeitas a alterações
Q4 2024:
implementação principal concluída
atualização de temas/plugins oficiais (em andamento)
habilitado no Meta
publicado conselhos de atualização
Q1 2025:
-
atualização de temas/plugins oficiais -
glimmer_topic_list_modedefinido comoauto; mensagens de depreciação no console habilitadas -
depreciações acionarão um banner de aviso para administradores para quaisquer problemas restantes -
plugins e temas de terceiros devem ser atualizados
-
1º de março - habilitação da nova lista de tópicos para todos os sites. O padrão para a configuração do site será alterado para enabled, mas ainda será possível retornar para ‘disabled’.
Q2 2025
após 1º de abril - remoção final do modo legado e código associado
O que isso significa para mim?
Se seu plugin ou tema tiver arquivos ‘raw handlebars’ (nomeados .hbr ou .raw.hbs), eles precisarão ser atualizados para compatibilidade com a nova versão. Arquivos .hbs regulares para componentes/rotas Ember não são afetados por esta alteração.
Atualizações também serão necessárias se você usar modifyClass em component:topic-list ou component:topic-list-item.
Se o seu site tiver alguma dessas personalizações incompatíveis, mensagens de aviso serão exibidas no console do desenvolvedor do navegador, incluindo informações sobre qual tema/plugin é a causa.
Quais são as substituições?
Alguns dos antigos raw-plugin-outlets foram convertidos para Plugin Outlets regulares. Eles podem ser atualizados de forma 1:1.
Personalizações mais avançadas precisarão ser avaliadas caso a caso. A nova lista de tópicos possui várias novas APIs para personalização fácil e robusta. Saiba mais aqui:
Aqui estão alguns exemplos:
-
discourse-assignintroduz uma nova coluna para uma lista de tópicos específica -
discourse-calendarusa um dos novos plugin outlets para exibir o badge da data do evento -
discourse-solvedusa um novovalueTransformerpara substituir omodifyClassanterior
E quanto a outras personalizações?
Se sua personalização não puder ser alcançada usando as novas APIs que introduzimos, por favor, nos informe criando um novo tópico Dev para discutir.
Sou um autor de plugin/tema. Como atualizo um tema/plugin para suportar a lista de tópicos antiga e nova durante a transição?
Os novos plugin outlets são renderizados em ambas as implementações, antiga e nova, da lista de tópicos. Então: quando você tiver implementado o novo, simplesmente exclua o conector raw-plugin-outlet antigo.
Para personalizações baseadas em DAG que substituem template-overrides ou outlets não modernizados, você precisará manter ambas as implementações durante o período de transição.
Depois que seu tema/plugin suportar ambas as implementações, antiga e nova, você poderá adicionar este comentário mágico no topo de todos os seus arquivos .hbr:
{{!-- has-modern-replacement --}}
Isso silenciará as mensagens de depreciação e permitirá que a nova implementação seja usada quando estiver em modo “auto”.


