second-factor.gjsコンポーネントおよびsecond-factor-add-totp.gjsコンポーネントのPluginOutletが見つかりません

こんにちは
最近Discourseを使い始めたのですが、1週間の経験から、コアな部分を実際に変更する必要がある開発者にとっては、参入レベルがかなり高いと言えます。これは、特に最新のオプションについて言及する場合、実際のドキュメント/情報が不足しているためです。バージョン3.6.0では動作しなくなったものしか見つからず、新しいアプローチではなく、たとえいくつか見つかったとしても、それらの詳細レベルは低く、実際の例や使用方法に関する詳細な説明はありません。
それにもかかわらず、second-factor-add-totp.gjsコンポーネントを変更する必要があるのですが、カスタムテーマで適切に行う方法に関する情報がないため、できませんでした。
PluginOutletと呼ばれるものを見つけました。これは、カスタムコードを挿入したり、要素がPluginOutletでラップされている場合に(確信はありませんが、api.renderInOutletのようなものがありますが、通常の使い方の情報はどこにも見つかりませんでした)、出力を変更したりするために使用できるフックとして設計されています。これらのEmberコンポーネントを見ると、少なくとも純粋なJSを使用して構造を操作するのに役立つ可能性のあるPluginOutletが見当たりません。

そこに何かを追加できるかどうか、そしてモダールウィンドウの構造を変更したり、少なくとも純粋なJSを使用して要素を配置したりするためにそれを使用できるかどうかを明確にしていただけますか?
また、見つけられなかったかもしれませんが、新しいアプローチのドキュメントに例はありますか?

「いいね!」 1

より良いアドバイスを提供するために、最終的な目標についてさらに詳しい情報を共有していただけますか?

「いいね!」 1

もちろんです。
私の「修正済み」バージョンによると、MFAモーダル(ユーザーがMFA用に認証アプリを設定する必要がある場合)のデザインを少し更新する必要があります。
更新とは、例えばQRコードをHTML構造内に移動させること、具体的には「js.user.second_factor.enable_description」のサイトテキストで、QRコードは提供された新しいテキスト(HTMLマークアップ)の間に配置することです。
別の例としては、「手動で入力」の代わりに、クリックするとコピーできる実際のコードが表示されるようにすることです(手動でJSトリガーをクリックして表示させ、移動させるだけです)。

これらはすべて通常のJS操作で実現でき、元のコンポーネントの実際の構造再構築は不要ですが、私にとっての主な課題は、モーダルが開かれたときにこのJSが実行される場所を見つけることで、まだ見つけられていません。

追加の説明:カスタムテーマを使用しており、GITオプションで保存されています。

不明な点があればお知らせください。

Falcoさん、何か提案はありますか?

こんにちは、@Yan_Rudenkoさん。まず参照すべきドキュメントは、おそらくこのチュートリアルでしょう。

おっしゃる通り、UIのカスタマイズにはプラグアウトレットが最適です。ただし、これらはどこでも利用できるわけではありません。UIの特定の箇所のみカスタマイズできるように設計されています。

通常のJSでDOMを操作すると、レンダリングフレームワークが画面にレンダリングした要素の制御を失うため、エラーが発生します。サポートされているプラグアウトレットや、その他のDiscourse JS API(チュートリアルでもカバーされています)を使用することをお勧めします。

「いいね!」 3

@david 様、チュートリアルリンクありがとうございます。しかし、すでに確認済みで、探している回答は見つかりませんでした。例は基本的なもので、特定のカテゴリを取得する方法(AJAX呼び出しではなく)や、Discourse APIをコード全体で使用する方法(https://docs.discourse.org/ で言及されている)などはカバーされていません。私の知る限り、Discourse APIは存在するので、ドキュメントには記載されていない多くのことを知っている、Discourseを日常的に扱っている人々から詳細を得るためにここに書き込みました。

純粋なJavaScriptを使用すると問題が発生する可能性があることは十分に理解していますが、現時点ではそれが私が思いついた唯一の方法です。将来的に、より適切な方法で修正できるかもしれません。

したがって、私が使用しているDiscourseの現在のバージョンである3.6.0.beta2-latestでは、言及した変更はDiscourseの組み込みツールでは実行できないということでしょうか?これらのコンポーネントにPluginOutletsが不足しているためですか?

開発チームは、将来のリリースでこれらのコンポーネントに追加することを検討していますか?技術的な問題ではなく、これに取り組んでいる人々による決定の問題だと推測しますが。

ありがとうございます。

はい!新しいアウトレットを導入するDiscourseコアにPRを作成することを歓迎します。

すぐに受け入れられるとは約束できません。しかし、出発点があれば、議論を続けるのが容易になります。

「いいね!」 2

@david 、提案ありがとうございます。時間があるときに検討させていただきますが、Discourseを使い始めたばかりの人間にとっては時間がかかる可能性があることをご理解いただく必要があります。適切な変更を加えて準備する方法、そしておっしゃった承認プロセスや次のリリースまでの時間を考慮すると、時間がかかります。

DEVチームであれば、プラグインのアウトレットラッパーを追加するだけであれば、1時間程度で準備できるのではないかと期待しています。もしコンポーネント内の異なる場所にいくつか追加する必要がある場合(私の勘違いかもしれませんが)、次のリリースに間に合うまでの時間を短縮できるはずです。

それでも、上記で述べたように、あなたの提案は検討させていただきます。

まだ、現在のバージョンのDiscourseで私が言及したことを実行できるのか、それともまず変更(それらのコンポーネントにプラグインのアウトレットを追加すること)を追加/貢献する必要があるのか、という私の質問に対する回答を受け取っていません。

なぜこの質問をするのかというと、完了しなければならない作業範囲があるのですが、私にはそれができず、なぜできないのかをチームに説明する必要があるからです。そのため、作業範囲を、できることに合わせて変更するか、コアに追加されて次のリリースでリリースされることを期待して、これに貢献する必要があります。そのため、Discourse DEVチームからこれが可能かどうか確認する必要があります。

また、メインリポジトリ GitHub - discourse/discourse: A platform for community discussion. Free, open, simple. を見ても、プルリクエストの横にイシューセクションがなく、通常、人々が何か壊れているか不足しているかを説明するイシューを作成する場所が見当たりません。

Broken things go in Bug, missing features in Feature (or in case of e.g. plugin outlets Dev)

Do you use the stable branch? Then there is quite some time until the next stable release, but otherwise you don’t need to wait for commits being added to the latest branch after the PR is merged.

「いいね!」 1

こんにちは、@Moin さん、この情報ありがとうございます!

Discourse には Docker セットアップを使用しており、ブランチに関する良い提案をしていただきました。確かに、実際のリリースを待たずに、PR がマージされたときに変更できるかもしれません。

app.yml を確認したところ、tests-passed バージョン(ブランチ)を使用していることがわかりました。GIT を見ると、安定性のために使用するには最良ではないと推測されます。main を使用するか、latest tag に切り替えるのが推奨されますか? Docker セットアップでタグに切り替えることは可能ですか?

「いいね!」 1

tests-passed は latest です: "tests-passed" is now "latest"

Main は本番環境での使用は推奨されません。

「いいね!」 1

@david@Falco さん、PR を作成しました。レビューをお願いします。何か不足している点があれば教えてください。これは ASAP で進める必要があるため、もし優先順位をつけていただけると大変ありがたいです。

「いいね!」 3

@david 、PRの迅速なレビューとマージ、ありがとうございました。

「いいね!」 2