Estou tentando criar um plugin que altere o cabeçalho para algo assim
Não importa muito como ele fica visualmente; o importante é que não quero usar personalização no caminho
/admin/customize/css_html. Quero criar um plugin que mágicamente altere tudo o que preciso.
O que descobri até agora é que não há um template para o cabeçalho; ele é renderizado via virtual-dom.
A forma como ele é renderizado é a seguinte:
-
O template
assets/javascripts/discourse/templates/application.hbs, que pode ser sobrescrito, renderiza o componentesite-header.{{plugin-outlet “above-site-header”}}
{{site-header canSignUp=canSignUp
showCreateAccount=“showCreateAccount”
showLogin=“showLogin”
showKeyboard=“showKeyboardShortcutsHelp”
toggleMobileView=“toggleMobileView”
toggleAnonymous=“toggleAnonymous”
logout=“logout”}}
{{plugin-outlet “below-site-header”}} -
O componente
assets/javascripts/discourse/components/site-header.js.es6estende e retorna o widgetheader.const SiteHeaderComponent = MountWidget.extend(Docking, {
widget: ‘header’,
..
});export default SiteHeaderComponent;
-
O widget
assets/javascripts/discourse/widgets/header.js.es6gera o virtual-dom para o cabeçalho.export default createWidget(‘header’, {
tagName: ‘header.d-header.clearfix’,html(attrs, state) {}
});
Minhas ideias
Posso criar meu próprio widget my-header que estenderá o header existente; lá, apenas atualizarei o HTML. Não quero copiar e colar nada nele; quero apenas sobrescrever o método html().
/plugins/discourse-foo/assets/javascripts/discourse/widgets/my-header.js.es6
Depois, posso criar meu próprio componente my-site-header que estenderá o site-header existente, apenas sobrescrevendo-o para apontar para o widget my-header.
/plugins/discourse-foo/assets/javascripts/discourse/components/my-site-header.js.es6
Em seguida, sobrescrevo o template application para mostrar o componente my-site-header em vez de site-header.
/plugins/discourse-foo/assets/javascripts/discourse/templates/application.hbs
{{plugin-outlet "above-site-header"}}
{{my-site-header canSignUp=canSignUp
showCreateAccount="showCreateAccount"
showLogin="showLogin"
showKeyboard="showKeyboardShortcutsHelp"
toggleMobileView="toggleMobileView"
toggleAnonymous="toggleAnonymous"
logout="logout"}}
{{plugin-outlet "below-site-header"}}
A pergunta é: como posso estender todos esses componentes e widgets? Poderia, por favor, indicar o caminho correto para fazer isso? Obrigado.
