Эмодзи вставлен не в то место

Хотя автодополнение эмодзи не работает, если вы ставите двоеточие после буквы, оно предлагает эмодзи, если сделать то же самое после знака препинания (например, _ - : ; . ,). Однако при использовании автодополнения эмодзи вставляется в начало, заменяя первую букву, а не в позицию, где вы печатали.

Я впервые заметил это в чате, но композитор тем ведёт себя так же.
2024-04-08 22-03-20|видео

8 лайков

Я больше не могу воспроизвести это, я считаю, что @kelv исправил это.

Я всё ещё могу воспроизвести это.

Я ввёл:

Давайте напишем текст и добавим эмодзи

А затем попытался добавить эмодзи после запятой.

1 лайк

Это только особенность iOS? Затронуты ли другие браузеры?

Не знаю, связано ли это с iOS. Это точно не ограничивается iOS, так как у меня нет устройства на iOS.
Последний случай воспроизведения был на моём Android-планшете через Firefox. (Только что проверил — то же самое в Chrome)

Исходя из имени файла, времени сообщения и того факта, что на экране не было клавиатуры, это, скорее всего, было Edge на Windows 10.

Я просто хотел сообщить об этой проблеме @Moin :slight_smile:

У меня iPadOS 18.7.1 с Safari, если это поможет @sam

Также заметил ещё одну проблему: при выделении текста для цитирования на iPad всплывающее окно «Цитата» в Discourse теперь скрыто за системным меню «Копировать/Вставить» iOS, поэтому на него невозможно нажать.

Я постараюсь воспроизвести шаги и отдельно сообщу об этом позже на этой неделе (если кто-то не сделает это раньше). Упоминаю здесь, так как, возможно, это связано, потому что обе проблемы появились только на этой неделе.

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.?,@/#!%&*;:\[\]{}=\-_()+]/.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 лайка

Это не связано с портированием. Я просто воспроизвёл проблему на более старой версии (3.5.0.beta8-dev), отключив новый автодополнение на основе floatkit. Похоже, это ошибка позиционирования курсора, которая существует уже некоторое время. Я всё ещё займусь поиском правильного исправления, но это не должно стать блокирующим фактором для полного удаления старой библиотеки автодополнения.

3 лайка

Я только что потерял всё сообщение в чате после добавления эмодзи.

Я ввёл сообщение, ввёл двоеточие и две буквы, чтобы получить предложения, нажал «ещё» и выбрал эмодзи, после чего всё сообщение исчезло. Это другая ошибка или связанная с предыдущей? Пока мне не удалось воспроизвести это в редакторе, только в чате. И только на моём ноутбуке, а не на планшете.

2 лайка

Да, это ошибка определения границ — мы путаемся, где эмодзи начинается и заканчивается.

Сложность в том, что, возможно, вся логика неверна. Не понимаю, зачем вообще нужно принимать такое решение, если система точно знает, где находится курсор и сколько символов было передано для автодополнения эмодзи. Может, просто отступить назад на N символов и заменить их… Не уверен.

Ох, это другая ошибка, потому что я только что исправил предыдущий тип проблемы, добавив эмодзи сразу после знака препинания (FIX: emojis should insert right after punctuation correctly by tyb-talks · Pull Request #35830 · discourse/discourse · GitHub), но это обновление ещё не развёрнуто здесь, на Meta.

Аналогично, эта проблема существует уже некоторое время, и я могу подтвердить, что она возникает только в чате. Я также выделю время для её решения.

3 лайка

Спасибо. Работает великолепно.

3 лайка

Это уже исправлено в FIX: emoji picker autocomplete in chat replaces entire draft by tyb-talks · Pull Request #36017 · discourse/discourse · GitHub . Спасибо за сообщение :slight_smile:

4 лайка

Эта тема была автоматически закрыта через 3 дня. Новые ответы больше не принимаются.