إدراج قائمة منسدلة جديدة لإجراءات محرر "نوع المنشور"

إعادة تصميم المحرر خلف enable_new_composer_actions

يُقدّم هذا تحديثًا لتجربة المحرر المعاد تصميمها ويُطلقها خلف تغيير تجريبي جديد (alpha upcoming-change). مع إيقاف العلم (الافتراضي)، لا يحدث أي تغيير مرئي. يمكن للمسؤولين الاختيار للانضمام عبر صفحة التغييرات القادمة في لوحة الإدارة.

التغييرات عند تفعيل العلم

  • قائمة منسدلة موحدة للإجراءات. تم استبدال قائمة composer-actions القديمة المبنية على SelectKit بمكون Glimmer/DMenu جديد (composer-actions-new.gjs). لا تزال تعرض جميع صفوف تبديل الوضع نفسها (الرد على الموضوع، الرد كموضوع جديد، إنشاء رسالة خاصة، إلخ) مع تسميات وأيقونات أوضح.

  • التبديلات تظهر مع الإجراءات. تُعرض خيارات «همس» / «بدون تنبيه» / «غير مدرج» الآن كعناصر <DToggleSwitch> في أسفل القائمة المنسدلة نفسها — بدون قائمة أزرار مركبة منفصلة. تبقى حالة التبديل ثابتة عند تبديل الوضع (مثلًا: تفعيل الهمس → التبديل من «الرد على موضوع» إلى «الرد على منشور» → لا يزال الوضع همسًا).

  • شارة مؤشر الهمس. يوجد زر صغير على يمين زر القائمة المنسدلة يعرض حالة الهمس الحالية في نسختين بصريتين: --public (لون ثانوي، أيقونة عين، «سيظهر الرد») و --whispering (خلفية باللون المتوسط/المنخفض جدًا للون الأساسي، أيقونة عين مشطوبة، «في وضع الهمس»). عند النقر عليه يتم تبديل وضع الهمس — عبر نفس مسار الكود المستخدم داخل القائمة المنسدلة، مما يضمن تزامن الحالتين. كما تتغير أيقونة الزر نفسه إلى far-eye-slash عند تفعيل الهمس.

  • تجربة تحرير المنشورات. عند تحرير منشور، تنكمش القائمة المنسدلة لتصبح تسمية ثابتة بدون سهم (أيقونة قلم + «تحرير المنشور»). زر «إضافة سبب التحرير» الذي كان موجودًا سابقًا في مكان آخر ضمن واجهة المحرر تم دمجه في هذا الزر الثابت كزر قابل للنقر باسم «صف تحريرك»؛ عند النقر عليه، يتم استبدال التسمية بحقل إدخال نصي مرتبط بـ composer.editReason مع التركيز عليه تلقائيًا.

    • editing
  • واجهة المحرر. تم إزالة النص/الـ span المسمى .action-title — حيث يعرض زر القائمة المنسدلة نفسه الوضع الحالي.

  • روابط المنشورات/المواضيع ستظهر فقط عند الضرورة. سيظهر رابط الموضوع عند التنقل بعيدًا عن الموضوع، وسيظهر رابط المنشور عند التمرير بعيدًا عن المنشور أو التنقل بعيدًا عنه.

ملاحظات لمطوري الإضافات

المكون الجديد ليس فئة فرعية من SelectKit، لذا لا تصل إليه واجهات البرمجة القديمة للإضافات. لدعم كلتا الحالتين (مع العلم مفعّل أو معطل) خلال هذه المرحلة التجريبية، يجب على الإضافات تسجيل كلا الواجهتين:

واجهة قديمة (تعمل على المكون القديم فقط) واجهة جديدة (تعمل على المكون الجديد فقط)
api.modifySelectKit("composer-actions").appendContent(...) api.registerValueTransformer("composer-actions-content", ({ value, context }) => { value.push(...); return value; })
api.modifyClass("component:composer-actions", { fooSelected(options, model) { ... } }) api.registerBehaviorTransformer("composer-actions-on-select", ({ context, next }) => { if (context.actionId === "foo") { ...; return; } next(); })

شكل الصف ({ name, description, icon, id }) متطابق في كلتا الحالتين. يستلم محوّل السلوك { actionId, options, model } في سياقه.

:double_exclamation_mark: الإضافات التي تسجل فقط الواجهات القديمة ستختفي صامتًا من المحرر بمجرد تفعيل المسؤول للعلم. أما الإضافات التي تسجل فقط المحولات الجديدة فستكون غير مرئية طالما العلم معطل (وهو الوضع الافتراضي للجميع عند الدمج).

المراجع:

  • discourse-post-voting/extend-composer-actions.js — مثال عملي على التسجيل المزدوج (ضمن النواة)

  • discourse-staff-alias — طلب سحب منفصل يضيف التسجيل المزدوج هناك

  • transformers.js — اسمَا محوّل السلوك الجديدين

ملاحظات التوزيع

  • حالة العلم هي تجريبية (alpha) — مخصصة للاختبار الداخلي فقط.

  • يجب على الإضافات التي تتكامل مع إجراءات المحرر إضافة التسجيل المزدوج قبل الترقية إلى beta/stable.

  • الاختبارات تغطي الحالتين: تغطي المواصفات الحالية للقبول/النظام حالة العلم المعطل؛ بينما تغطي ملفات *-new-test.js الشقيقة حالة العلم المفعّل (بالإضافة إلى محددات DOM للمكون الجديد الخاصة بالقائمة المنسدلة الموحدة، عناصر التبديل، شارة الهمس، وشرائح التسمية المنقسمة).

20 إعجابًا

يتم عرض «رابط الموضوع» مع كود HTML بالإضافة إلى عنوان الموضوع…

لا يمكن أن يكون هذا صحيحًا

تم إصلاحه هنا → FIX: Do not render fancyTitle link in composer header by jordanvidrine · Pull Request #40500 · discourse/discourse · GitHub

4 إعجابات

هل من الممكن عدم إظهار خيار تبديل تصويت المشاركة إذا كان نوع الفئة المحددة ليس أفكارًا، أو إذا لم تُفعّل إعدادات الفئة ميزة تصويت المشاركة؟ : ))

5 إعجابات

هذا يبدو منطقياً بالنسبة لي، أعتقد أنه قد يكون تراجعاً؟ أم أن هذا كان الحال دائماً، هل تعرف @jordan.vidrine؟

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

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

نحن في مرحلة انتقالية بسيطة مع إضافة تصويت المنشورات… أعتقد أننا سنحتاج إلى تحديد خطة هجرة لتجنب تعطيل الاستخدام الأعمّ لها قبل تقييدها على فئات محددة، فقط لأن نوع “الأفكار” مفهوم جديد نسبيًا.

إعجابَين (2)

الأخبار الجيدة هي أنه في هذه الأثناء، لدينا هُكّان (hooks) للسماح بذلك في مكون سمة… هذا يعمل في مُهيّئ (initializer) لعرض زر التبديل فقط في فئة الأفكار:

import { withPluginApi } from "discourse/lib/plugin-api";

export default {
    name: "hide-post-voting-toggle",
    after: "extend-composer-actions", 

    initialize() {
      withPluginApi((api) => {
        api.registerValueTransformer(
          "composer-actions-content",
          ({ value, context }) => {
            const category = context.composerModel?.category;
    
            if (!category?.isType("ideas")) {
              return value.filter((item) => item.id !== "togglePostVoting");
            }
    
            return value;
          }
        );
      });
    }
};

8 إعجابات

على جهاز اللوحي، تكون القائمة المنسدلة مخفية خلف محرر الرسائل.

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

مرحباً @Moin، شكراً لك على إحضار هذا إلى انتباهنا.

لم أتمكن من إعادة إنتاج المشكلة من جانبي باستخدام Chromium أو Firefox أو Safari، وعلى الرغم من ذلك، الفيديو المرفق لا يعمل لدي.

لمساعدتنا في تشخيص وتتبع هذا الأمر، هل يمكنك تقديم بعض التفاصيل الإضافية؟

  • نظام التشغيل: (على سبيل المثال، Android، iOS، Windows، macOS، Linux)

  • المتصفح والإصدار: (على سبيل المثال، Chrome 125، Safari 17)

  • إصدار Discourse: يمكنك العثور على ذلك في لوحة تحكم المسؤول، أو من خلال اتباع هذا الدليل على Meta.

شيء واحد يمكنك تجربته الآن:

اختبار السلوك في الوضع الآمن عن طريق إضافة /safe-mode إلى نهاية عنوان موقعك (على سبيل المثال، https://discourse.example.com/safe-mode).

  • إذا اختفت المشكلة: من المحتمل أن يكون أحد تخصيصات موقعك (الإضافات، السمات، أو المكونات) يسبب تعارضاً.

  • إذا استمرت المشكلة: فهي خطأ في الأساس، والتفاصيل التي تقدمها حول المتصفح/الجهاز أعلاه ستساعدنا في تحديد وإصلاحه.

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

إعجابَين (2)

ألا تظن أنه أمر غريب بعض الشيء أن تشرح لي تفاصيل وضع الأمان وكيفية العثور على إصدار Discourse الخاص بي؟

كما يمكنك أن ترى في الفيديو أعلاه (أعدت رفعه - لا أعرف سبب تعطله اليوم)، كنت قد فعّلت وضع الأمان.

الإصدار الحالي هو 2a08d5d (كان مختلفاً عندما كتبت التقرير). يمكنني أيضاً إعادة إنتاج المشكلة هنا - لقد اخترت منتدائي فقط لأن المدراء لديهم المزيد من الخيارات، لذا كان القوائم المخفية أكثر وضوحاً. أما على Meta فهي بالكاد مرئية. في معظم الأحيان يبدو أن الزر لا يعمل على الإطلاق.

أستخدم جهاز Samsung Galaxy Tab S9 FE (أندرويد 16) مع متصفح Firefox.


لقد قمت للتو بالتحقق من متصفح Chrome - ويبدو أن المشكلة نفسها موجودة:

عادةً ما تكون هذه النوعية من المشكلات بسبب أن لوحي له “حجم سطح المكتب” لكنه يعتمد على اللمس. وهو مشابه للمشكلات الموجودة هنا أو هنا.

إعجابَين (2)

شكرًا لك، هذا السياق مفيد.

لا أملك لوحيًا باللمس بنظام أندرويد، لكن يمكنني إعادة إنتاج المشكلة في Firefox بشكل موثوق باستخدام زر اللمس المحاكي.

مؤقتًا، يمكن حلها بقاعدة التنسيق هذه:

.composer-toggles-menu-content, .composer-actions-dropdown {
    z-index: 1100;
}

سأقوم بتحديث Discourse بـ هذا الإصلاح المقصود وأخطركم عند دمج التغييرات. *تحديث: تم دمج التغييرات، وسترون الإصلاح في نشراتكم القادمة التي تعمل بالإصدار d82dc7c أو الأحدث.

مرة أخرى، شكرًا لك على الإبلاغ عن المشكلة.

3 إعجابات

شكراً!

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