Existe uma maneira de reabrir uma classe e sobrescrever uma função?
A função que preciso sobrescrever é function categoryStripe(color, classes) {} na linha 15, conforme mostrado aqui: javascripts/discourse/helpers/category-link.js.es6.
Existe uma maneira de reabrir uma classe e sobrescrever uma função?
A função que preciso sobrescrever é function categoryStripe(color, classes) {} na linha 15, conforme mostrado aqui: javascripts/discourse/helpers/category-link.js.es6.
Acredito que sim. Você já viu Developing Discourse Themes & Theme Components?
Existem várias maneiras de fazer o que você está pedindo. Qual é o seu objetivo ao sobrescrever categoryStripe?
Gostaria de alterá-lo de:
function categoryStripe(color, classes) {
var style = color ? "style='background-color: #" + color + ";'" : "";
return "<span class='" + classes + "' " + style + "></span>";
}
para:
function categoryStripe(color, classes) {
var style = color ? "style='border: 1px solid #" + color + ";'" : "";
return "<span class='" + "my-class" + classes + "' " + style + "></span>";
}
Ou seja, mudar a cor de fundo para uma borda e adicionar uma classe.
Qual é a melhor maneira de fazer isso, Justin?
Li isso, mas, se não me engano, ele cobre apenas a capacidade de sobrescrever templates (e widgets), sem mencionar helpers, certo?
Nada disso era óbvio em sua primeira postagem. Acho que agora você receberá uma resposta útil que estou ansioso para ver!
Você já considerou adicionar a classe via JavaScript ou sobrescrever o estilo em linha usando !important na folha de estilos? Embora seja possível tentar sobrescrever esse método, ele eventualmente deixará de funcionar. Adicionar ao DOM via JS é provavelmente a maneira mais estável de proceder.
O que eu estava tentando descobrir outro dia era basicamente isso. Eu queria adicionar uma classe personalizada aos posts em todos os tópicos (mas não ao post original do tópico). Eu gostaria de poder ativar/desativar essa classe personalizada por grupo de usuários e pela data de criação do tópico, mas pensei que poderia resolver isso assim que descobrisse como adicionar a classe personalizada aos posts. Não encontrei exatamente o exemplo que eu procurava, mas algumas outras coisas podem ter me distraído antes de encontrar o exemplo.
Acho que isso não vai funcionar, porque preciso que a cor seja obtida das configurações da categoria — então a cor da borda variará para cada categoria. (Atualizei minha publicação acima para refletir isso.)
A menos que isso possa ser obtido via JS (/adicionado ao DOM)? (Se for possível, poderia me dar um exemplo, por favor?)
Eu teria que analisar os detalhes para ver se o que você está fazendo é viável apenas com seleção em JS (infelizmente não tenho tempo agora).
Mas você pode ver a adição de uma classe aqui: discourse-knowledge-base-theme/javascripts/discourse/components/knowledge-base.js.es6 at 4694d4a8ad788f8884e3341c852d3f77b2c1d103 · discourse/discourse-knowledge-base-theme · GitHub
Você também pode modificar estilos em linha com JS: Setting CSS Styles using JavaScript | KIRUPA
Obrigado, Justin, vou dar uma olhada.
Ou existe uma maneira de sobrescrever os helpers (discourse/app/assets/javascripts/discourse/helpers/category-link.js.es6 at b25d9e96c1414bf78b44221da4d385675843991e · discourse/discourse · GitHub) como fazemos com templates/components/widgets etc?
Não me importo de ficar de olho nesse arquivo para futuras alterações, se necessário ![]()
Você pode tentar criar um arquivo no seu tema em javascripts/discourse/helpers/category-link.js.es6 e adicionar uma versão modificada dessa função ali. Faz um tempo que não mexo tão profundamente assim, então não posso garantir se vai funcionar! ![]()
Sim, isso deve funcionar.
Obrigado a ambos!
Última pergunta (espero!): como crio um arquivo lá? ![]()
Em um plugin que é fácil, crie a pasta e basta copiar e colar!
Ah!!! Obrigado, Robert!
Tenho que sair agora, mas vou tentar assim que voltar ![]()
Obrigado, Robert!
Mas não está funcionando ![]()
Foi isso que fiz:
rails g plugin CategoryAlternative
Depois coloquei isso:
Em uma pasta helpers que precisei criar:
Depois:
rm -rf tmp
rails s
Está aparecendo no AdminCP, mas nenhuma alteração reflete na página real (as alterações aparecem se eu editar a versão não-plugin do arquivo, com exatamente as mesmas edições).
Será que esqueci algo? Preciso configurar mais alguma coisa?
Você está recebendo algum erro no console do JavaScript?
Você incluiu o arquivo inteiro?
Nota: Eu não usei o gerador de plugins, criei tudo manualmente.
Na época em que escrevi, não incluí (pois achei que Justin quisesse apenas incluir aquela função). No entanto, embora incluir o arquivo completo tenha feito funcionar, não foi a mesma coisa que editar o arquivo diretamente.
Por exemplo, funcionou na página latest, mas não no menu suspenso all categories… o que funcionou quando editei o arquivo diretamente!
Então, acabei fazendo as alterações que precisei por meio de um CSS meio bagunçado
e também tive que fazer alguns compromissos. Definitivamente é melhor do que não conseguir fazer nada, mas, idealmente, eu teria preferido algo tão simples quanto alterar o estilo de uma categoria, sendo tão fácil quanto editar um modelo ![]()
Eu também gostaria de fazer isso.
Aqui está o caminho do arquivo que estou tentando substituir no meu componente de tema:
custom_loader\javascripts\discourse\helpers\loading-spinner.js
Mas o arquivo JS não está sendo carregado. O que estou esquecendo?