api.onPageChange ne fonctionne pas avec le défilement infini

J’essaie de modifier les liens des balises en utilisant le code ci-dessous et cela semble fonctionner lors du rafraîchissement de la page ou lors de la navigation vers une nouvelle page, mais cela ne fonctionne pas lorsque vous faites défiler la page vers le bas et que le défilement infini charge de nouveaux éléments :

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

Dois-je utiliser autre chose que api.onPageChange ou en plus de celui-ci ?

1 « J'aime »

Oui, cela ne fonctionnera pas. Cela ne se déclenchera que lors d’un changement de route. Vous devez envisager de remplacer le code qui rend réellement ces balises directement plutôt que d’utiliser la sélection DOM.

9 « J'aime »

Merci Robert - J’espérais qu’une solution simple suffirait ! :see_no_evil:

Ça fait un moment que je n’ai pas lu le guide des plugins, mais de mémoire, cela se passe à peu près comme ceci ?

  • rails g plugin NAME
  • localiser le fichier que vous souhaitez modifier
  • le copier dans le même répertoire de votre plugin
  • apporter vos modifications

Cependant, cela ne fonctionne pas pour moi.

Modifier directement ce fichier (à la ligne 29) : discourse/app/assets/javascripts/discourse/app/lib/render-tag.js at bbe5d8d5cf1220165842985c0e2cd4c454d501cd · discourse/discourse · GitHub a l’effet souhaité, mais lorsque je duplique le fichier à l’emplacement suivant, cela n’a aucun impact plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js.

Avez-vous des idées sur ce que je fais de travers ? Est-ce que quelque chose a changé depuis que j’ai lu les guides ? (Pour une raison quelconque, je pensais que c’était aussi simple que de remplacer des fichiers pour modifier de petites choses comme celle-ci).

1 « J'aime »

Vous n’avez pas besoin de plugin, c’est côté client. Utilisez un composant de thème.

7 « J'aime »

Merci ! Curieusement, j’ai commencé à personnaliser le Tag Icons hier soir et j’ai réussi à le faire fonctionner ! :smiley:

Par curiosité, la méthode de remplacement de fichier du plugin telle que je l’ai décrite ci-dessus aurait-elle dû fonctionner également ? (Si oui, avez-vous une idée de ce que je faisais mal ?)

1 « J'aime »