api.onPageChange が無限スクロールで動作しません

ページをリフレッシュしたり、新しいページに移動したりするときは機能しているようですが、無限スクロールで新しいアイテムが読み込まれるページを下にスクロールしたときは機能しないようです。以下のコードでタグリンクを変更しようとしています。

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

api.onPageChange 以外のものを使う必要があるでしょうか、あるいは追加で何か使う必要があるでしょうか?

「いいね!」 1

はい、それでは動作しません。ルート変更時のみ発火する仕組みです。DOM 選択ではなく、実際にそのタグをレンダリングするコード自体をオーバーライドする必要があります。

「いいね!」 9

ロバート、ありがとうございます!シンプルな方法で済むと期待していたのですが :see_no_evil:

プラグインガイドを最後に読んだのはだいぶ前ですが、記憶では以下のような手順だったと思います。

  • rails g plugin NAME
  • 変更したいファイルを見つける
  • そのファイルをプラグイン内の同じディレクトリにコピー
  • 変更を加える

しかし、この方法ではうまくいきません。

直接このファイル(29 行目)を編集すると目的の効果が得られます:

ただし、以下の場所にファイルを複製しても影響がありません:
plugins/my-plugin/app/assets/javascripts/discourse/app/lib/render-tag.js

何が間違っているのか、何かご存知でしょうか?もしかしてガイドを読んだ後に変更があったのでしょうか?(このような小さな変更を行うには、単にファイルをオーバーライドするだけで済むと思っていたのですが)。

「いいね!」 1

プラグインは不要です。これはクライアントサイドです。テーマコンポーネントを使用してください。

「いいね!」 7

ありがとうございます!面白いことに、昨夜 Tag Icons のカスタマイズを始めて、見事に動作させることができました!:smiley:

ただ、好奇心から伺いたいのですが、上記で説明したプラグインのファイル上書き手法も機能するはずだったのでしょうか?(もしそうなら、私がどこを間違えていたか見当がつきますか?)

「いいね!」 1