تحويل الكلمات تلقائيًا إلى روابط

@md-misko شكراً على طلب السحب (PR)!

هل أنت متأكد؟ هذا يفاجئني قليلاً. أعتقد أنه إذا كان تعبيرك النمطي (regex) طماعًا بما يكفي، فيجب أن تكون قادرًا على مطابقته. لاحظ أن إزالة النقطة من أحرف الحدود يكسر ربط الكلمات في نهاية الجملة.

لقد أجريت اختبارًا بسيطًا بتعبيرك النمطي أدناه على regex101.com ويبدو أنه يعمل مع أحرف الحدود الحالية، انظر regex101: build, test, and debug regex
لاحظ أنه إذا فهمت غرضك بشكل صحيح، فقد تحتاج إلى تحويل بعض مجموعات الالتقاط الخاصة بك إلى مجموعات غير التقاط باستخدام (?:)

عدم القدرة على استخدام | مزعج للغاية، أتفق معك. لاحظ أنه بالنسبة لجزء ID|id يمكنك ببساطة استخدام المعدل i لجعل التعبير النمطي غير حساس لحالة الأحرف. بالنسبة للأرقام، إذا كنت تحتاج حقًا إلى النطاق الدقيق بين 1-10 و 1-100، فهذا صعب، وتخفيفه إلى 1-19 و 1-199 سيجعل الأمر أسهل. :slight_smile:

إليك تعبيرك النمطي مع مجموعات غير التقاط أعتقد أنها ستعمل

/id\\s?((?:[1-9]|10)\\.(?:[1-9]|[1-9][0-9]|100))/i, https://example.com/id$2

@danekhollas شكراً على ملاحظاتك والتعبير النمطي! لقد قمت بتغيير الكود بناءً على تعليقاتك، و PR جاهز للمراجعة.

إعجاب واحد (1)

جميل! سيتعين على شخص ما من فريق Discourse مراجعة هذا، مع الإشارة إلى @sam

لاحظ أنه يمكنك ببساطة تثبيت الامتداد من المستودع المتفرع الخاص بك (يمكنك حتى تحديد فرع).

إعجاب واحد (1)

أود أن أوضح أولاً، لماذا يستخدم المستخدمون المكون مقابل الكلمات المراقبة المضمنة؟

4 إعجابات

وجدت مشكلتين رئيسيتين مع الكلمات المراقبة المضمنة

  • لا يمكن إضافة تعابير نمطية معقدة: حدث خطأ: الكلمة طويلة جدًا (الحد الأقصى 100 حرف)
  • لا يمكن استخدام أي حرف عشوائي كحد للكلمة: وهو الشرطة السفلية
  • أيضًا عدم القدرة على تحرير القواعد أو تغيير ترتيب التنفيذ أقل من المثالي

يعرض طلب السحب للمكون حدود الكلمات للمستخدم، ولا توجد مشاكل مع التعبيرات النمطية الطويلة (باستثناء عدم القدرة على استخدام |، والتي يتم معالجتها أيضًا في طلب السحب).

بخلاف ذلك، تعمل الكلمات المراقبة بشكل مثالي، وإذا كان يمكن معالجة هذه المشاكل في النواة، فأنا مع ذلك.

تم إنشاء هذا كمنشور منفصل بناءً على Auto-Linkify Words - #216 by md-misko لست متأكدًا مما إذا كانت هذه تعتبر أخطاء:\n\nالكلمات المراقبة لا تحترم اليونيكود، فهي تعامل جميع أحرف اليونيكود كحدود للكلمات (عند استخدام \b، ولكن هذا متوقع على ما أعتقد).\n\nالمزيد (تشغيل بعض حالات الاختبار على الكلمات المراقبة ووجدت هاتين):\n- الكلمة المراقبة \"\\bid\\(d+)\\b\" هي تعبير عادي غير صالح. (صحيح، لكنها لا تزال تضيف القاعدة)\n- \\bid\\s?(\\d+)\\b → https://example.com/id$1 يتم ربطها بـ https://example.com/id%241 (تضيف $1 مشفرة بعنوان URL بدلاً من إجراء الاستبدال).\n\nهل الاستبدال غير مدعوم أم أن هذا خطأ؟

هل وجد أي شخص حلاً بديلاً لاستخدام الخطوط العمودية | في هذه المرحلة؟ لدي بعض التعبيرات النمطية حيث تكون هذه الخطوط ضرورية.

مرحباً، شكراً لك على تطوير هذا القالب الرائع، لقد أحببته كثيراً! هل يمكنك إصداره لجميع المستخدمين لاستخدامه؟ وليس للمسؤولين فقط

GitHub - renato/discourse-imgify-words: theme to auto imgify urls in discourse, almost the same as discourse-linkify-works

مرحباً،

مكون السمة هذا الذي أشرت إليه هو تكيف لـ Sam قمت به كحل بديل لحاجة وصفتها في موضوع آخر.

إنها مكونات سمة بسيطة تغير فقط كيفية عرض هذه الكلمات في منشور (يقوم Sam بتحويل كلمات معينة إلى روابط، وتقوم كلماتي بتحويل كلمات معينة إلى صور) بناءً على إعدادات مكون السمة، والتي يديرها المسؤولون فقط.

الميزة التي تصفها لا يمكن القيام بها في مكون سمة، بل ستحتاج إلى إضافة (plugin) لتخزين مجموعة من (الكلمة، عنوان URL للصورة) لكل مستخدم في قاعدة البيانات، ويجب إجراء تحويل الكلمة إلى صورة من جانب الخادم، عند بناء محتوى المنشور المطبوخ (بتنسيق HTML). لا يمكن القيام بهذه الأمور في مكون سمة، وهو مجرد كود من جانب الواجهة الأمامية/العميل (إذا قمت بتوظيف شخص للقيام بهذا العمل، فمن الأهمية بمكان أن يفهم هذه التفاصيل).

هذا خارج نطاق مكون السمة هذا وسيحتاج إلى عمل أكثر تعقيدًا. الاقتراح هو نشر تفاصيل كيف تريد أن تتصرف هذه الميزة في Marketplace ويمكنك توظيف شخص هنا لديه خبرة سابقة في تفاصيل Discourse الداخلية لمساعدتك.

شكراً لإعلامي، سأذهب إلى تلك الفئة وأتحدث عنها

لقد تم طرح هذا الموضوع عدة مرات في هذا الموضوع، ولكن أود التحقق مرة أخرى؛ هل هناك أي طريقة لتقييد هذا بفئة معينة أو استبعاد فئات؟ أود استخدام هذا في فئة المبتدئين لدينا لربط جميع المصطلحات الأساسية التي يحتاج المبتدئون إلى تعلمها، ولكن في مناطق أخرى، سيكون هذا مزعجًا للمستخدمين ذوي الخبرة. شكرًا!

3 إعجابات

لقد وجدت قيدًا مزعجًا: بالنظر إلى تعبير عادي، يتم استبدال $1 مرة واحدة بالضبط فقط.

مثال

/foo-([0-9a-f]+)/,https://target.example/foo/$1/foo-$1

متوقع

كلمة مفتاحية رابط
foo-abcd https://target.example/foo/abcd/foo-abcd

فعلي

كلمة مفتاحية رابط
foo-abcd https://target.example/foo/abcd/foo-$1

مشكلة الكلمات المراقبة هي أن الكلمة المراقبة ترتبط بالعديد من المرات التي تظهر فيها الكلمة المراقبة في المنشور. هذا يسبب فوضى.

ملاحظة: قل ذلك ثلاث مرات بسرعة. :grin:

لتكون دقيقًا، يتم استبدال الكلمة مرة واحدة لكل سطر، وليس مرة واحدة لكل مشاركة كاملة. :slight_smile:

أتمنى لو كان ذلك صحيحًا يا Coin، لكنه ليس موجودًا في تثبيتي. :frowning:

إليك كيف يعمل على نسختي التجريبية:

:thinking:

تحقق من هذا…

قاعدتي:

النتيجة:

@Canapin لقد أغفلت مشكلتي: لا يتعلق الأمر بالكلمات المتكررة، بل بالاستبدال المتكرر للنمط لكلمة واحدة: يحتوي عنوان URL على النمط المراد استبداله مرتين.

نظرًا لأن خيار استبدال النمط /g هو الافتراضي في المكون الإضافي، فيجب تطبيقه على جميع حالات $1 في الاستبدال، وليس فقط الحالة الأولى.

إنها حالة مختلفة عن وجود الكلمة المفتاحية عدة مرات في جملة أو سطر أو فقرة. يجب أن يأخذ الاستبدال في الاعتبار حالات متعددة للتحديد.

إعجاب واحد (1)

كنت أتحدث عن مكون الكلمات الرابطة، وليس ميزة الكلمات المراقبة :slight_smile:

@hellekin، شكرًا على التوضيح :+1:

كنت أرد على سام بخصوص الكلمات التي تمت مراقبتها. :grin:

من الجيد معرفة أن linkify يقوم بعمل واحد فقط، ولكني أحببت أن يكون هناك رابط واحد لكل منشور. قد أضطر إلى تجربة هذا اليوم، فالكلمات التي تمت مراقبتها لا تطاق في بعض الأحيان عندما تجد تطابقًا.

إعجاب واحد (1)