調理前に投稿をどのように飾るか?

テーマコンポーネントを作成中で、投稿が調理される直前にそれを装飾・変更したいと考えています。調理(表示)される直前の生の投稿テキストを取得する方法はありますか?

「Discourse テーマのデベロッパー向けガイド」を確認し、decorateCookeddecorateCookedElementaddPostTransformCallback といった pluginAPI メソッドを使って調理済みの投稿を変更できることは分かりましたが、調理前の状態を取得する方法は見つかりませんでした。

また、コントローラーやコンポーネントも確認しましたが、うまくいきませんでした。

この関数を使用する必要があります:

これにより、以下の部分が上書きされます:

これにより、投稿が保存される前に変更できます。

それでは。:smiley:

返信ありがとうございます!ただし、テキストの変更を保存したくありません。保存後、表示前(そして調理前)に変更したいのです。

理由は、ユーザーが投稿を編集した際に元のテキストが表示されるようにしたいからです。もし composerBeforeSave を使用した場合、編集時に変更されたテキストが表示されてしまうのではないかと懸念しています。

これをテーマとして実装したい場合、これが唯一の選択肢になります。ユーザー入力(Markdown)→ Ruby によるサーバーサイドでの調理(cooking)→(HTML)の形で他のユーザーが取得し、必要に応じて装飾を加える、という流れです。これは「保存」または「返信」ボタンを押す直前に実行される処理です。下書きには表示されませんが、投稿を編集した場合は表示されてしまう点はご指摘の通りです。これを回避するには、コンポーザーを開く、または変更した投稿に切り替える際に、保存時に行われた変更を元に戻す必要があります。さらに詳しく説明することもできますが、コードを読んで自分で実験してみるのも良いでしょう。
さようなら! :smiley:
追記:これについて考えました。理論的にはクライアント側で再調理(recook)することも可能ですが、パフォーマンスやその他の理由から、それは良いアイデアではないと思います。あるいは、プラグインを作成する方法もあります:(Superseded) Plugin Tutorial #1 - How to manipulate the text in the composer?

プラグインについて調べてみます!でも、おそらく調理済みの投稿を直接修正することになりそうです(まさに私がやりたくなかったことですね :smile:)。

ありがとうございました!