api.onPageChange no funciona con scroll infinito

Estoy intentando cambiar los enlaces de las etiquetas usando el siguiente código y parece funcionar al recargar la página o al ir a una nueva página, pero no funciona cuando haces scroll hacia abajo en la página donde la carga infinita incorpora nuevos elementos:

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

¿Necesito usar algo diferente o adicional a api.onPageChange?

1 me gusta

Sí, eso no funcionará. Solo se activará al cambiar de ruta. Necesitas considerar sobrescribir el código que realmente renderiza esas etiquetas directamente en lugar de usar la selección del DOM.

9 Me gusta

Gracias, Robert. ¡Esperaba que algo sencillo fuera suficiente! :see_no_evil:

Ha pasado un tiempo desde que leí la guía de plugins, pero por lo que recuerdo, el proceso sería algo así:

  • rails g plugin NOMBRE
  • localizar el archivo que quieres modificar
  • copiarlo en el mismo directorio dentro de tu plugin
  • realizar tus cambios

Sin embargo, esto no me está funcionando.

Editar este archivo directamente (en la línea 29): discourse/app/assets/javascripts/discourse/app/lib/render-tag.js at bbe5d8d5cf1220165842985c0e2cd4c454d501cd · discourse/discourse · GitHub tiene el efecto deseado, pero al duplicar el archivo en la siguiente ubicación no tiene ningún impacto: plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js.

¿Alguna idea de qué estoy haciendo mal? ¿Habrá cambiado algo desde que leí las guías? (Por alguna razón, pensé que era tan sencillo como sobrescribir archivos para cambiar cosas pequeñas como esta).

1 me gusta

No necesitas un plugin, esto es del lado del cliente. Usa un componente de tema.

7 Me gusta

¡Gracias! Por lo curioso, empecé a personalizar el Tag Icons anoche y logré que funcionara. :smiley:

Por curiosidad, ¿crees que el método de sobrescritura de archivos del plugin que describí anteriormente también debería haber funcionado? (Si es así, ¿tienes alguna idea de qué estaba haciendo mal?)

1 me gusta