新しい「投稿タイプ」コンポーザーアクションドロップダウンの紹介

enable_new_composer_actions の背後にある Composer のリデザイン

この変更により、リデザインされた Composer のエクスペリエンスが導入され、新しいアルファ版の upcoming-change としてリリースされます。フラグがオフ(デフォルト)の場合、視覚的な変化はありません。管理者は upcoming-changes の管理ページからオプトインできます。

フラグがオンの場合の変化

  • 統合されたアクションドロップダウン。従来の SelectKit composer-actions ドロップダウンが、新しい Glimmer/DMenu コンポーネント(composer-actions-new.gjs)に置き換えられました。これは、より明確なラベルとアイコンで、同じモード切り替え行(トピックへの返信、新規トピックとしての返信、PM の作成など)をすべて表示します。

  • トグルはアクションと共に表示されます。Whisper / no-bump / unlist は、同じドロップダウンの下部にある <DToggleSwitch> アイテムとしてレンダリングされます。これは、別のコンボボタンメニューではありません。トグルの状態はモード切り替え後も維持されます(例:Whisper をオンにする → 返信対象をトピックから投稿に切り替える → それでも Whisper 状態のまま)。

  • Whisper 状態インジケーターのピル。ドロップダウントリガーの右側にある小さなボタンで、現在の Whisper 状態を 2 つの視覚的バリエーションで表示します:--public(セカンダリカラー、目のアイコン、「返信は表示されます」)と --whispering(primary-medium / primary-very-low 背景、目を隠すアイコン、「Whisper 中」)。これをクリックすると Whisper が切り替わります。これはドロップダウン内のトグルと同じコードパスを使用するため、両者は同期します。トリガーアイコン自体も Whisper 中は far-eye-slash に切り替わります。

  • 編集 UX。投稿を編集している場合、ドロップダウンは静的なカーソルなしラベル(鉛筆アイコン+「投稿を編集」)に折りたたまれます。以前は Composer の他の場所にあった「編集理由を追加」ボタンは、この静的トリガーに統合され、「編集内容の説明」ボタンとしてクリック可能になります。これをクリックすると、ラベルが composer.editReason にバインドされたテキスト入力フィールドに切り替わり、フォーカスが当てられます。

    • editing
  • Composer の外観(chrome).action-title テキスト/スパンは削除されました。ドロップダウントリガー自体が現在のモードを表示します。

  • 投稿/トピックリンク は必要に応じてのみ表示されます。トピックから移動するとトピックリンクがレンダリングされ、投稿からスクロール移動または移動すると投稿リンクがレンダリングされます。

プラグイン開発者向けメモ

新しいコンポーネントは SelectKit のサブクラスではないため、従来の拡張 API は適用されません。このアルファフェーズで両方のフラグ状態に対応するため、プラグインは両方の API を登録する必要があります:

旧 API(旧コンポーネントのみで動作) 新 API(新コンポーネントのみで動作)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

行の形状({ name, description, icon, id })は両方で同一です。Behavior transformer は、コンテキスト内で { actionId, options, model } を受け取ります。

:double_exclamation_mark: 旧フックのみを登録しているプラグインは、管理者がフラグを有効にした瞬間に Composer から静かに消えます。新しい transformer のみを登録しているプラグインは、フラグがオフの間(マージ時のデフォルト状態)は表示されません。

参照:

  • discourse-post-voting/extend-composer-actions.js — 二重登録の動作例(コア内)

  • discourse-staff-alias — 別途 PR で二重登録を追加

  • transformers.js — 2 つの新しい transformer 名

ロールアウトに関するメモ

  • フラグの状態は アルファ です。内部テスト用のオプトインです。

  • Composer アクションと連携するプラグインは、これが beta/stable に昇格する前に二重登録を追加してください。

  • テストは両方の状態をカバーしています:既存の受け入れ/システム仕様はフラグオフをカバーし、兄弟の *-new-test.js ファイルはフラグオンをカバーします(さらに、統合ドロップダウン、トグルアイテム、Whisper インジケーター、分割ラベルスパン用の新しいコンポーネント DOM セレクターも含まれます)。

「いいね!」 20

「トピックリンク」がトピックのタイトルに加えて HTML コードも表示されています…

それは正しくないはずです

こちらで修正済み → FIX: Do not render fancyTitle link in composer header by jordanvidrine · Pull Request #40500 · discourse/discourse · GitHub

「いいね!」 4

選択されたカテゴリタイプがアイデアでない場合、またはカテゴリ設定で投稿の投票機能が有効になっていない場合に、**「投稿投票を切り替え」**オプションを表示しないようにすることは可能でしょうか? : ))

「いいね!」 5

それは私には納得がいきます。もしかしたら回帰バグでしょうか?それとも最初からそうなっていたのでしょうか、@jordan.vidrine さん、ご存知ですか?

「いいね!」 1

これは常にそうでした。投稿投票プラグインはカテゴリ別にスコープを限定するのではなく、サイト全体で機能します。カテゴリレベルの設定は、デフォルト値を設定するためのものであり、使用を制限するためではありません。

投稿投票プラグインについては、現在、少し過渡期的な状態にあります。「アイデア」タイプという概念は比較的新しいものであるため、特定のカテゴリに限定する前に、より一般的な使用を妨げないような移行方法を検討する必要があると思います。

「いいね!」 2

好消息は、現時点でテーマコンポーネント内でこれを許可するためのフックが用意されていることです。これは、イデアカテゴリでのみトグルを表示するためのイニシャライザーで機能します。

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
    name: "hide-post-voting-toggle",
    after: "extend-composer-actions", 

    initialize() {
      withPluginApi((api) => {
        api.registerValueTransformer(
          "composer-actions-content",
          ({ value, context }) => {
            const category = context.composerModel?.category;
    
            if (!category?.isType("ideas")) {
              return value.filter((item) => item.id !== "togglePostVoting");
            }
    
            return value;
          }
        );
      });
    }
};

「いいね!」 8

私のタブレットでは、ドロップダウンがコンポーザーの背後に隠れています。

「いいね!」 1

こんにちは @Moin、この件をお知らせいただきありがとうございます。

私は Chromium、Firefox、Safari を使用してこの問題を再現できませんでしたが、添付されたビデオが再生されないようです。

この問題を診断・追跡するために、もう少し詳細な情報を提供していただけますか?

  • オペレーティングシステム: (例: Android, iOS, Windows, macOS, Linux)

  • ブラウザとバージョン: (例: Chrome 125, Safari 17)

  • Discourse のバージョン: これは管理ダッシュボードで確認できます。または メタのこのガイド に従って確認することもできます。

今すぐ試せること:

サイトの URL の末尾に /safe-mode を追加して、セーフモードで動作をテストしてください(例: https://discourse.example.com/safe-mode)。

  • 問題が消えたら: サイトのカスタマイズ(プラグイン、テーマ、またはコンポーネント)のいずれかが競合を引き起こしている可能性があります。

  • 問題が継続する場合: これはコアのバグであり、上記のブラウザ/デバイスの詳細が問題を特定して修正するのに役立ちます。

ご協力をいただきありがとうございます。ここで共有した情報についてご質問がある場合は、お知らせください。

「いいね!」 2

セーフモードの詳細や、私の Discourse のバージョンを確認する方法を私に説明するのは、少しばかげていると思いませんか?

上記のビデオ(今日なぜか壊れていたので再アップロードしました)にもあるように、私はセーフモードを有効にしていました。

現在のバージョンは 2a08d5d です(レポートを作成した時点とは異なっていました)。こちらでも再現できます。私のフォーラムを選んだのは、管理者に多くのオプションがあるため、非表示のメニューがより明確に表示されるからです。Meta ではほとんど見えません。ほとんどの場合、ボタンが全く機能しないように見えます。

私は Samsung Galaxy Tab S9 FE(Android 16)に Firefox を使用しています。


先ほど Chrome も確認しましたが、同じようです:

通常、この種の問題は、私のタブレットが「デスクトップサイズ」ながらタッチ対応であることが原因です。こちらこちらの問題に類似しています。

「いいね!」 2

ご報告いただきありがとうございます。この文脈は非常に参考になります。

私はAndroidのタッチタブレットを所有していませんが、Firefoxのタッチエミュレーション機能を使用して、この問題を確実に再現することができました。

一時的な解決策として、以下のスタイルルールを適用することで対応可能です:

.composer-toggles-menu-content, .composer-actions-dropdown {
    z-index: 1100;
}

この意図された修正をDiscourseに反映し、変更がマージされた際にはお知らせいたします。 *更新: 変更がマージされました。バージョン d82dc7c 以降の次のデプロイで修正が適用されます。

再度、問題を報告していただきありがとうございます。

「いいね!」 3

ありがとうございます!

余談ですが、最近の投稿への編集ではトピックが上位表示されなくなったため、編集を通知手段として使うのはあまり効果的ではありません。以前、ある同僚が「単に別投稿で更新情報を発信するべきだ」と言っていました。自分たちの側がそのようにしていないことが多いのは興味深いですね。