Markdownモードをデフォルトに設定できません

こんにちは。フォーラムで「default_composition_mode」をMarkdownモードに設定しても、新しいトピックを開始する際にユーザーにはリッチテキストエディタが表示されてしまうようです。フォーラムのバージョンは「Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0」です。

変更を適用するたびに、「この変更を過去にも適用しますか?これにより、既存の15ユーザーの設定が変更されます。」と表示され、「はい」をクリックします。それでも、ユーザーにはリッチエディタが表示されます。これは既知のバグでしょうか?

編集 - 追記: この問題は、エディタモードをリッチ/Markdown間で切り替えるトグルオプションを一度も使用したことのないユーザーで発生しています。週末にアップグレード直後にデフォルトのコンポジションモードを設定した後、本日ログインしたユーザーです。テーマCSSを使用してトグルオプションを非表示にもしていました。

「いいね!」 2

これをフォローすると、“wrap_open” BBCode トークンを使用するプラグインがありますが、リッチテキストエディタではまだサポートされていません。そのため、現時点では Markdown モードに留まる必要があります。

これを確実にするために、Claude Sonnet を使用して以下のコードを生成しました。改善点があれば(特にバグがあれば :sweat_smile:)、フィードバックをいただけると幸いです。他のフォーラム管理者にも役立つかもしれないので、共有します。コードは「テーマ設定」>「JS」(/admin/customize/themes/2/common/js/edit)に入力します。

import {
  apiInitializer
} from "discourse/lib/api";

export default apiInitializer((api) => {
  // ユーザーのエディタを強制的に Markdown モードに切り替える
  function switchToMarkdownMode() {
    const currentUser = api.getCurrentUser();

    // コンポーザーが開かれた場合、ユーザーはサインインしているはずです
    if (!currentUser) {
      console.error('ユーザーが見つかりません');
      return;
    }

    // ここからオプションを取得しました
    // https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
    const currentMode = currentUser.get('user_option.composition_mode');

    if (currentMode !== 0) {
      // Markdown モードでない場合のみ切り替える
      // 使用例: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
      currentUser.set('user_option.composition_mode', 0);

      // ユーザー設定をサーバーに保存する
      currentUser.save(['composition_mode']).then(() => {
        console.log('Markdown モードに正常に切り替わりました');
      }).catch((error) => {
        console.error('コンポジションモードの更新に失敗しました:', error);
      });

      // 現在のコンポーザー UI を即座に切り替える
      setTimeout(() => {
        const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
        if (toggleButton) {
          const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
          if (isRichTextActive) {
            toggleButton.click();
            console.log('現在のコンポーザーを Markdown モードに切り替えました');
          }
        }
      }, 100); // コンポーザーが完全にレンダリングされるまで少し待機する
    } else {
      console.log('すでに Markdown モードです。変更は不要です');
    }
  }

  api.onAppEvent('composer:opened', () => {
    switchToMarkdownMode();
  });
});

これは一般的に悪い習慣であり、このようなことのためにタイミングに依存するのは壊れやすいです。

これを分離しましょう。管理者がマークダウンモードのデフォルトを設定できるようにしたいと考えています。

ここで最小限の再現手順は何ですか?

「いいね!」 2

明日これを再現して修正に取り組んでみますが、管理者がプロンプトで既存のユーザーオプションを使用する場合、すべてのユーザーオプション値をデフォルトで設定するため、トグルスイッチを制御するために使用するすべてがこれである理由がわかりません。

「いいね!」 2

迅速なご対応ありがとうございます! :slightly_smiling_face:

最小限の再現コードを作成する方法がわかりません。もしよろしければ、フォーラムから追加情報を提供しますので、その手順を教えていただけますでしょうか。

「いいね!」 2

今日、再現しようとしましたが、うまくいきませんでした。ただし、1つ質問があります。変更後にユーザーはブラウザをリロードしていますか?リロードしていない場合、ブラウザにはまだ古いユーザー設定データがemberに残っているため、新しい設定はまだ使用されません。

期待どおりに機能させるために、私は次のようにしました。

  • ユーザーAでエディタがリッチモードに切り替わっていることを確認しました。
  • 管理者として、デフォルトをマークダウンモードに変更し、すべてのユーザーに適用しました。
  • ユーザーAとして、ページをリロードし、エディタを再度開いたところ、マークダウンモードになっていることがわかりました。

ステップ3でリロードしなかった場合、リッチモードが表示されたままでした。

「いいね!」 1

Martinさん、フォローアップありがとうございます。日曜日にすでにモードをMarkdownに設定していました。その後、月曜日に別のブラウザプロファイルでテストアカウントでログインしたところ、リッチエディタが表示されました。

また、参考になるかもしれませんが、「default_composition_mode」を「Markdown」に設定するたびに、「この変更を履歴に適用しますか?これにより、61人の既存ユーザーの設定が変更されます。」という警告が表示されます。初回はこれが出るものと思いますが、ユーザー数によっては毎回表示されるのはバグのようです。

さらにテストするために、10か月間ログインしていなかった別のテストアカウントにもログインしました。こちらもデフォルトでリッチテキストモードに設定されていました。

「いいね!」 1

これは確かに非常に奇妙です…あなたのサイトには合計で何人のユーザーがいますか?サイト設定の変更によってすべてのユーザーを更新するステップでハングしているのではないでしょうか。UIには、作業がまだ進行中であることを示す表示が何もありませんでした。

その間にトグルで変更したユーザー数によります。ローカルテストでは正常に動作しているようです。

「いいね!」 1

/about ページによると、メンバーは 20,000 人です。

手順を明確にします。

  1. /admin/site_settings/category/all_results?filter=default_composition_mode にアクセスします。
  2. default_composition_mode を Markdown モードに設定します。すでに Markdown モードになっている場合でも、ドロップダウンを開いて Markdown オプションを選択できます。
  3. XX 人のユーザーに対する警告が表示されます。それを承認します。
  4. 10 分待ってから、ページを再読み込みします。
  5. default_composition_mode を Markdown モードに設定します (手順 2 と同じ)。
  6. 再度、同じ人数のユーザーに対する警告が表示されます。

あなたが言及したように、私もどれくらい時間がかかるのか (10 分以上?) 履歴ユーザーの設定を更新するのにかかるのかわかりません。また、それほど多くのユーザーがその時間だけで設定を更新したとは思いません。何か見落としているかもしれません。

「いいね!」 1

はい、確かにその時間でそれほど多くの人が切り替えるとは思えませんね :thinking: 状況を示す画面録画を撮っていただけますか?

また、Chrome 開発者ツールのネットワークタブを確認することもお勧めします。保存後に次のような 2 つのリクエストが表示されるはずです(最初のものは XX ユーザーのプロンプトを表示するためのもので、2 番目のものは実際に設定を保存してバックフィルを実行するためのものです)。

image

2 番目のステータスが 200 である必要があります。そうでない場合、離脱すると既存ユーザーのバックフィルは行われません。

追加情報ありがとうございます。2つのリクエストは以下の画像に示されています。どちらも非常に迅速でした。

ビデオ録画はこちらのドライブリンクにあります。設定を行い、警告ダイアログを承認し、少し待ってからページをリロードし、再度設定を行いました。その後、再び警告ダイアログが表示されました。

「いいね!」 1

話はさらに複雑になってきました…すでにMarkdownが選択されているのに、Markdownを選択し直して保存するかどうか尋ねられるこの部分です。

これは起こらないはずです…リスト項目の値(0)と設定値(’0’)が異なると見なされるバグがあります。そのため、ここでの保存は何もしていないと思われます。そのバグは修正できますが、あなたはこれを実行できますか?

  • 設定を「リッチテキスト」に変更する
  • 保存するが、「いいえ、今後適用される変更のみ」を選択する
  • 「Markdown」に戻す
  • 保存し、「はい」を選択して遡って適用する

そして、それがあなたが抱えている問題を解決するかどうかを確認してください。

「いいね!」 1

お知らせいただきありがとうございます。古いテストアカウントでログインしたところ、正しく動作したようです。初回実行時にMarkdownモードがオンになりました :slightly_smiling_face:

例えば、Data Explorerを使用して、すべてのユーザーがMarkdownモードになっていることを確認する方法はありますか?

「いいね!」 2

問題が解決したと聞いてよかったです!

はい、間違いなくできます。次のようなクエリを実行できます。

SELECT composition_mode, COUNT(composition_mode) FROM user_options GROUP BY composition_mode;

値はここにあります。

「いいね!」 2

ありがとうございます。全ユーザーがMarkdownモードになりました :partying_face:

「いいね!」 3

@martin このトピックをサポートからバグに移動し、修正されたと仮定して閉じます。修正されていない場合は、再オープンできますか?

「いいね!」 1

FIX: Don't show setting save/cancel buttons when selecting the current value by OsamaSayegh · Pull Request #34552 · discourse/discourse · GitHub によって修正されました

「いいね!」 5