Como acessar a configuração do componente de tema de outro componente de tema

Existe uma maneira de acessar as configurações de um componente de tema a partir de outro componente de tema? Parece que settings contém configurações apenas para o componente de tema em que ele está.

Se não for possível acessar as configurações de um componente de tema a partir de outro componente de tema, qual é a melhor maneira de fazer isso?

  • ter um único componente de tema?
  • mover as configurações para o tema principal (mas elas estão disponíveis? ainda não testei isso).
4 curtidas
Isso é tecnicamente viável, mas como David declarou abaixo, por favor, não o use

Eu dei uma olhada porque é uma pergunta bastante interessante! :+1:

Existe um local em discourse/lib/theme-settings-store onde as configurações do tema são armazenadas e funções de exportação como getObjectForTheme ou getSetting podem ser usadas.
Você pode recuperar o valor de uma configuração para qualquer componente de tema, desde que tenha seu ID.
No entanto, não consegui encontrar uma maneira fácil de recuperar o mapeamento de ID de tradução ↔ nome.

Dito isso, você poderia fazer o seguinte truque:

// Recupera das tags <link> o mapeamento nome do tema <-> id para os componentes de tema ativos
const themesComponents = Array.from(
  document.querySelectorAll("link[data-theme-name]")
).reduce((acc, link) => {
  acc[link.dataset.themeName] = parseInt(link.dataset.themeId, 10);
  return acc;
}, {});

// Obtém o id do tema com base em seu nome de componente
const themeId = themesComponents["discotoc"];

// Obtém todas as configurações
const themeSettings = getObjectForTheme(themeId);

// Obtém uma configuração específica
const themeSetting = getSetting(themeId, "anchor_icon");

image

Não tenho certeza se essa é a maneira mais confiável; alguns ajudantes seriam úteis se não existirem.

4 curtidas

As configurações de diferentes temas/componentes de tema são deliberadamente isoladas. Ter interdependências entre temas/componentes de tema torna o desenvolvimento e o suporte muito difíceis.

Como @Arkshine demonstrou, é tecnicamente possível hackear para encontrar os dados, mas eu FORTEMENTE recomendo contra isso. A estratégia quebrará se um administrador alterar o nome de um tema no painel de administração, e também é muito provável que quebre aleatoriamente com futuras alterações principais.

6 curtidas

Minha culpa, percebi que o código que forneci pode não ser confiável. Eu realmente deveria ter cuidado com o que exibo aqui. Hacking é divertido, mas dura até levar a usos e problemas indesejados no futuro. :worried:

4 curtidas

Oh, sem problemas, @Arkshine - é sempre bom experimentar. Ter a nota [details] em sua postagem é bom para garantir que as pessoas saibam os riscos que estão correndo :chefs_kiss:

Se o compartilhamento de configurações como essas entre plugins e/ou componentes de tema se tornar um requisito comum, certamente poderemos encontrar opções mais robustas. Talvez possamos usar este tópico para apresentar casos de uso de exemplo.

Minha intuição é que, se um tema está tentando usar configurações de outro tema, então… talvez eles devam ser mesclados em um único repositório?

5 curtidas

Este tópico foi fechado automaticamente 30 dias após a última resposta. Novas respostas não são mais permitidas.