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).
Isso é tecnicamente viável, mas como David declarou abaixo, por favor, não o use
Eu dei uma olhada porque é uma pergunta bastante interessante!
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");
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.
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.
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
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?