改行のない複数行選択でインライン「整形済みテキスト」フォーマットを使用

優先度/重大度:

プラットフォーム

オペレーティングシステム

Windows 11

ブラウザ

Google Chrome 141.0.7390.123

Discourse

ad36231adab58a8a249bfe8139aade2bde2134d3

説明:

「整形済みテキスト」フォーマットには2つのスタイルがあります。

  • インライン:文章の途中に含まれる本文以外のコンテンツ(例:「foo関数を呼び出す」)や、本文以外の短い1行に使用します。
  • ブロック:複数行の本文以外のコンテンツに使用します。

コンポーザーでフォーマットを適用する際に、ユーザーは次のいずれかのアプローチを取ることができます。

  • プロアクティブ:フォーマットするコンテンツを追加する前にフォーマットモードを切り替えます。
  • レトロアクティブ:コンテンツをフォーマットされていない状態で追加し、その後選択してフォーマットを適用します。

:bug: 複数行の選択範囲に「整形済みテキスト」フォーマットを適用すると、以下の条件下で不適切な「インライン」スタイルが使用されます。

  • コンポーザーが「リッチテキストエディター」モードの場合
  • フォーマットがレトロアクティブに適用される場合
  • 選択したコンテンツにハード改行が含まれていない場合

これにより、投稿が読みにくくなり、本文以外のコンテンツ(コードの共有など、よくある要件)のコピーが困難になります。

再現手順:

  1. コンポーザーを開きます。
  2. エディターモードスイッチを「リッチテキストエディター」の位置に設定します。
  3. コンポーザーに foo と入力します。
  4. 「ソフトブレーク」を追加するために、Shift+Enter キーボードショートカットを押します。
  5. コンポーザーに bar と入力します。
    :red_exclamation_mark: 改行は追加しないでください。
  6. 2行目の終わりから投稿の開始まで、すべてのコンテンツを選択するために、Ctrl+Shift+Home キーボードショートカットを押します。
  7. コンポーザーのツールバーにある </> ボタンをクリックします。

:bug: 選択された各行は、インラインスタイルで個別にフォーマットされました。

foo
bar

正しい動作は、コンテンツを単一のコードブロックに入れることでした。

foo
bar

追加コンテキスト

デモのためにコンテンツを手動で入力するアプローチを選択したのは、コピー元のコンテンツによってフォーマットが異なるという、不必要な複雑さを考慮しないようにするためです。ただし、このバグは貼り付けたコンテンツでも発生し、ハードブレークを含まないコンテンツの条件は、そのようなコンテンツで発生する可能性が高くなります(ユーザーはハードブレークを意図していなくても、入力中にEnter を使用する可能性が高いため)。


「すべて選択」/Ctrl+A を使用してコンテンツを選択した場合、このバグは発生しません。


Markdownエディターでは、「整形済みテキスト」フォーマットが複数行の選択範囲にレトロアクティブに適用される場合、常に選択したコンテンツをコードブロックに配置するという正しい動作をします。


try.discourse.org の「セーフモード」でバグを再現できます。


元々は Why did the Forum functions change? - #37 by sterretje - Website and Forum - Arduino Forum で報告されました。

手動で選択した場合でも発生しないようです。

@NateDhaliwalさん、こんにちは。「手動で選択する」とはどういう意味ですか?

マウスでドラッグして選択することですか?もしそうなら、その選択方法でも問題は発生します。

manual-select

それとも、Shift + 矢印キーでの選択ですか?もしそうなら、その選択方法でも問題は発生します。

manual-select2

これについてはよくわかりません。これは意図的な例外でした。この場合でも、改行を含む単一の段落があり、この状況ではインラインコードマークを追加できるはずです。

この動作の変更を検討することもできますが、実際にはバグではありません。/cc @lindsey

「いいね!」 1

はい、リッチテキストとMarkdownモードで一貫性を持たせることは理にかなっています。

「いいね!」 1