api.onPageChange não funciona com rolagem infinita

Estou tentando alterar os links das tags usando o código abaixo e parece funcionar ao atualizar a página ou ao navegar para uma nova página, mas não funciona ao rolar a página para baixo, onde o carregamento infinito traz novos itens:

<script type="text/discourse-plugin" version="0.8">
	api.onPageChange(() =>{
		var tags = document.getElementsByClassName("discourse-tag");
		for (i = 0; i < tags.length; i++) {
			var tag = tags[i];
			var url = tag.href;
			var newUrl = "https://site.com" + url;
			tag.href = newUrl;
		}
	});
</script>

Preciso usar algo diferente ou adicional ao api.onPageChange?

1 curtida

Sim, isso não vai funcionar. Ele só será acionado em uma mudança de rota. Você precisa considerar sobrescrever o código que realmente renderiza essas tags diretamente, em vez de usar seleção de DOM.

9 curtidas

Obrigado, Robert — eu esperava que algo simples fosse suficiente! :see_no_evil:

Já faz um tempo que li o guia de plugins, mas, pelo que me lembro, é mais ou menos assim?

  • rails g plugin NOME
  • localize o arquivo que deseja alterar
  • copie-o para o mesmo diretório no seu plugin
  • faça suas alterações

No entanto, isso não está funcionando para mim.

Editar este arquivo diretamente (na linha 29): discourse/app/assets/javascripts/discourse/app/lib/render-tag.js at bbe5d8d5cf1220165842985c0e2cd4c454d501cd · discourse/discourse · GitHub tem o efeito desejado, mas ao duplicar o arquivo no seguinte local, não há impacto: plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js.

Alguma ideia do que estou fazendo de errado? Será que algo mudou desde que li os guias? (Por algum motivo, eu achava que era tão simples quanto sobrescrever arquivos para alterar pequenas coisas como essa).

1 curtida

Você não precisa de um plugin, isso é do lado do cliente. Use um Componente de Tema.

7 curtidas

Obrigado! Curioso, comecei a personalizar o Tag Icons ontem à noite e consegui fazê-lo funcionar! :smiley:

Por curiosidade, no entanto, o método de substituição de arquivo do plugin que descrevi acima também deveria ter funcionado? (Se sim, alguma ideia do que eu estava fazendo de errado?)

1 curtida