Emojiが違う場所に挿入される

文字の後にコロンを入力しても絵文字の自動補完は機能しませんが、句読点(アンダースコア、ハイフン、コロン、セミコロン、ピリオド、カンマなど)の後に同じことを行うと絵文字が提案されます。しかし、自動補完を使用すると、入力中の位置ではなく、先頭の文字が置き換えられて絵文字が挿入されます。

最初にチャットで気づきましたが、トピックコンポーザーでも同様の動作をします。

「いいね!」 8

再現できなくなりました。@kelv が修正したと思われます。

これを再現できます。

入力したのは以下です。

テキストを入力し、絵文字を追加しましょう。

そして、コンマの後ろに絵文字を追加しようとしました。

「いいね!」 1

これはiOSだけの問題ですか?他のブラウザにも影響がありますか?

iOSのせいなのかわかりません。iOSデバイスを持っていないので、iOSに限定されるものではありません。
最新の再現は、Firefoxを使用したAndroidタブレットで行われました。(Chromeでも同じであることを確認しました)

ファイル名、レポートの時間、およびOPにオンスクリーンキーボードがないという事実に基づいて、それはおそらくWindows 10のEdgeだったでしょう。

@Moin さん、この問題を報告するために来ました :slight_smile:

iPadOS 18.7.1 の Safari で確認しています @sam さん

また、iPad でテキストを選択して引用しようとすると、Discourse の「引用」ポップアップが iOS の「コピー&ペースト」の後ろに隠れてしまい、クリックできなくなる別の問題も発生しています。再現手順を調べて、週の後半に別途報告します(誰かが先に報告しない限り)。両方の問題が今週になってから発生したため、関連性の可能性があるとしてここに言及しておきます。

「いいね!」 1

それなら、あなたの問題は私の問題と同じではないかもしれません。句読点の後に絵文字が誤って配置されるのは、もう1年半も前から起こっていることです。

「いいね!」 2

なるほど、これで修正できます。

diff --git a/frontend/discourse/app/modifiers/d-autocomplete.js b/frontend/discourse/app/modifiers/d-autocomplete.js
index e49fc0ec53..33fb51a1f4 100644
--- a/frontend/discourse/app/modifiers/d-autocomplete.js
+++ b/frontend/discourse/app/modifiers/d-autocomplete.js
@@ -599,10 +599,19 @@ export default class DAutocompleteModifier extends Modifier {
         prev = this.getValue()[caretPos - 1];
         const shouldTrigger = await this.shouldTrigger({ backSpace });
 
-        if (
-          shouldTrigger &&
-          (prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev))
-        ) {
+        // 絵文字のオートコンプリート(キー === ':')の場合、コンマ、ピリオドなど、絵文字の前に表示される可能性のある一般的な句読点を含む、より寛容なチェックを使用します
+        let isAllowed;
+        if (this.options.key === ":") {
+          // 絵文字オートコンプリートの onKeyUp 正規表現で許可されているのと同じ文字に一致します
+          isAllowed =
+            prev === undefined || /[\\s.?,@/#!%\u0026*;:\\[\\]{}=\\-_()+]/.test(prev);
+        } else {
+          isAllowed =
+            prev === undefined || this.ALLOWED_LETTERS_REGEXP.test(prev);
+        }
+
+        if (shouldTrigger && isAllowed) {
           start = caretPos;
           term = this.getValue().substring(caretPos + 1, initialCaretPos);
           end = caretPos + term.length;

@kelv このコードがどのように進化してきたのかあまり詳しくないのですが、最近行ったポートの一部で何か思い当たることはありますか?

「いいね!」 2

ポートの問題ではありません。新しい floatkit ベースのオートコンプリートをオフにした古いインスタンス (3.5.0.beta8-dev) で再現しました。これは、しばらく前から存在していたキャレットの位置決めバグのようです。適切な修正を調査しますが、古いオートコンプリートライブラリの完全な削除のブロッカーにはならないはずです。

「いいね!」 3

絵文字を追加したら、チャットメッセージ全体が消えてしまいました。

メッセージを入力し、コロンと2文字を入力して候補を表示させ、さらに「もっと見る」から絵文字を選択したところ、メッセージ全体が消えました。これは別のバグでしょうか、それとも関連するものでしょうか。今のところ、チャットでは再現できましたが、コンポーザーでは再現できませんでした。また、ラップトップでは発生しましたが、タブレットでは発生しませんでした。

「いいね!」 2

境界検出のバグですね。絵文字の開始位置と終了位置が混同しています。

難しいのは、カーソル位置と絵文字オートコンプリートに渡された文字数が正確にわかっているのに、なぜこのような判断が必要なのか、ロジック全体が間違っている可能性があることです。N文字分戻ってから置き換えるだけでいいのかもしれません。よくわかりません。

うっ、それは別のバグですね。なぜなら、句読点の直後に絵文字を挿入する以前の問題は、まだここでMetaにデプロイされていない(https://github.com/discourse/discourse/pull/35830)のですが、ちょうど修正したところだからです。

同様に、これはしばらく前から存在しており、チャットでのみ発生することを確認しました。これも時間を確保して対応します。

「いいね!」 3

ありがとうございます。素晴らしいです。

「いいね!」 3

FIX: emoji picker autocomplete in chat replaces entire draft by tyb-talks · Pull Request #36017 · discourse/discourse · GitHub により修正されました。ご報告ありがとうございました :slight_smile:

「いいね!」 4

このトピックは3日後に自動的に閉じられました。新しい返信はもう許可されていません。