api.onPageChange non funziona con lo scroll infinito

Sto cercando di modificare i link dei tag usando il codice sottostante e sembra funzionare quando si aggiorna la pagina o si passa a una nuova pagina, ma non funziona quando si scorre verso il basso nella pagina dove lo scroll infinito carica nuovi elementi:

<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>

Devo usare qualcosa di diverso o in aggiunta a api.onPageChange?

Sì, non funzionerà. Si attiverà solo al cambio di rotta. Devi considerare di sovrascrivere il codice che rende effettivamente quei tag direttamente, piuttosto che usare la selezione DOM.

Grazie, Robert! Speravo che qualcosa di semplice fosse sufficiente! :see_no_evil:

È da un po’ che non rileggo la guida sui plugin, ma per quanto ricordo dovrebbe essere più o meno così?

  • rails g plugin NOME
  • individua il file che vuoi modificare
  • copialo nella stessa directory del tuo plugin
  • apporta le tue modifiche

Tuttavia, questo non funziona per me.

Modificando direttamente questo file (alla riga 29): discourse/app/assets/javascripts/discourse/app/lib/render-tag.js at bbe5d8d5cf1220165842985c0e2cd4c454d501cd · discourse/discourse · GitHub ottengo l’effetto desiderato, ma quando duplico il file nella seguente posizione non ha alcun impatto plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js.

Hai qualche idea su cosa stia sbagliando? Forse qualcosa è cambiato da quando ho letto le guide? (Per qualche motivo pensavo che fosse semplice come sovrascrivere i file per modificare piccole cose come questa).

Non hai bisogno di un plugin, questo è lato client. Usa un componente tema.

Grazie! Per la cronaca, ho iniziato a personalizzare Tag Icons ieri sera e sono riuscito a farlo funzionare! :smiley:

Per pura curiosità, però, il metodo di sovrascrittura dei file del plugin che ho descritto avrebbe dovuto funzionare anch’esso? (In tal caso, hai qualche idea su cosa stessi sbagliando?)