تم إدراج الرموز التعبيرية في المكان الخطأ

بينما لا تعمل الإكمال التلقائي للرموز التعبيرية عند إضافة نقطتين رأسيتين بعد حرف، فإنها تقدم رموزًا تعبيرية عند القيام بنفس الشيء بعد علامة ترقيم (مثل _ - : ; . , ). ولكن عند استخدام الإكمال التلقائي، يتم إدراج الرمز التعبيري في البداية، ليحل محل الحرف الأول، وليس في الموضع الذي كنت تكتب فيه.
لاحظت ذلك لأول مرة في الدردشة، لكن مؤلف الموضوع يتصرف بنفس الطريقة.

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))
-        ) {
+        // For emoji autocomplete (key === ':'), use a more permissive check that includes
+        // common punctuation like comma, period, etc. that can appear before emoji
+        let isAllowed;
+        if (this.options.key === ":") {
+          // Match the same characters allowed in emoji autocomplete's onKeyUp regex
+          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)

لا يتعلق الأمر بالنقل، لقد قمت بإعادة إنتاجه على نسخة أقدم (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 أيام. لم يعد يُسمح بالردود الجديدة.