Que eu linko no meu site, para levar os usuários ao fórum para fazer uma pergunta. Eu uso vários valores para o título para pré-preencher o título com o tópico sobre o qual eles estão pensando, e eu gostaria que o editor fosse o foco.
Eu estava procurando como modificar isso e encontrei o arquivo composer.js com a definição focusTarget, que seria bem fácil de modificar para suportar esse comportamento se o título fosse passado.
O problema que estou encontrando é que não consigo ver onde focusTarget é realmente chamado. Eu programo há muitos anos, mas sou novo no Ember e fiz relativamente pouco em programação javascript.
Qualquer dica sobre como abordar isso seria muito apreciada (um rtfm com um ponteiro para um manual razoável seria ainda mais apreciado)
Certo, esse código é o que faz funcionar. O que não tenho certeza é qual código preciso modificar para que este método obtenha o título, para que eu possa definir o foco apropriadamente no editor lá…
Quase consegui fazer funcionar – quando o código está executando, recebo um erro de que scheduleOnce não está definido – tentei api.scheduleOnce, mas parece que scheduleOnce é uma coisa do Ember. Tentei adicionar esta importação ao meu componente, mas recebi um erro de que importações só são permitidas no nível superior. import { scheduleOnce } from \"@ember/runloop\";
Estou imaginando que há algo pequeno que estou perdendo e vou continuar mexendo nisso, mas pensei em ver se era óbvio para você.
Em qual arquivo devo colocá-los? O que eu estava tentando fazer era apenas usá-lo em <head> – como um componente – é isso que fiz, o que resulta no log “scheduling afterRender” aparecendo, depois um erro sobre scheduleOnce não existir. Tentei usar o import de algumas maneiras, mas não está funcionando. Suspeito que minha inexperiência com módulos em javascript esteja me causando problemas. Talvez eu não possa fazer isso através de um componente e precise fazer um plugin mais completo. Vou dar uma olhada nisso – obrigado novamente pela sua ajuda
<script type="text/discourse-plugin" version="1.8.0">
api.onAppEvent("composer:open", ({ model }) => {
console.log("composer open happened, model is: ", model);
if (model.title !== "") {
console.log("scheduling afterRender");
scheduleOnce("afterRender", () => {
console.log("after render happening");
api.putCursorAtEnd(document.querySelector("textarea.d-editor-input"));
});
}
});
</script>
Em tempo, eu encorajo muito você a usar a Theme CLI. Você pode criar um componente de tema a partir de um template, sincronizá-lo com um Discourse com atualização ao vivo e atualizar quaisquer alterações usando seu editor. É muito mais fácil do que usar a interface!
Obrigado novamente Arkshine, criei meu primeiro componente usando discourse_theme agora
Para quem encontrar este tópico, basicamente tive que executar alguns comandos:
gem install discourse_theme
npm install -g yarn
discourse_theme new <component-name>
depois edite o arquivo: javascripts/discourse/api-initializers/.js
faça o upload para o github, e você pode instalar / compartilhar.
O meu está aqui.
Parece ter um recurso onde você pode atualizar automaticamente a versão em seu servidor também, à medida que você modifica os arquivos. Parece bom e útil à medida que me aprofundo em componentes mais complexos.