Opening a reply window via URL

この機能については、私のインスタンスではシンプルなテーマコンポーネントを使用しています。以下は私のコードを適応させたものです。これには #reply の他に、#upload(デスクトップで新しい返信を開くとアップロードウィンドウが表示される)や #edit(ウィキの OP 用)も対応しています。

setTimeout の回避や draftSequence の適切な管理(topic.draft_sequence が正しいかどうかは確信がありません)など、まだ改善の余地があります。また、ここでのベストプラクティスが何かはわかりません。とはいえ、私の環境では問題なく動作しています。

/t/[slug]/[id]#reply のように任意のトピックに移動すると、空の新しい返信でコンポーザーが開きます。

事前にテキストを入力したい場合は、composer.open に渡すオブジェクトの reply 属性を設定することで実現できます。また、そのトピックに既に下書きが存在する場合、新しい返信を作成する前に保存するか破棄するかを尋ねられます。下書きを再開したい場合は、draftSequence が正しく設定されている必要があります。

<script type="text/discourse-plugin" version="0.4">
  if (/.*#reply$/g.test(document.URL)) {
    const { REPLY } = require('discourse/models/composer').default;
    
    const composer = Discourse.__container__.lookup('controller:composer');
    
    setTimeout(function() {
      const topic = Discourse.__container__.lookup("controller:topic").get("model");
      if (topic) {
        composer.open({
            action: REPLY,
            draftKey: topic.draft_key,
            draftSequence: topic.draft_sequence,
            topic,
        });
      }
    }, 0)
  }
</script>

参考になれば幸いです。

「いいね!」 13