كيفية تخصيص شريط أدوات Composer

أتساءل عما إذا كانت هناك أي طريقة لتخصيص الأزرار التي يتم عرضها (وبأي ترتيب) في شريط أدوات الموضوع الجديد.

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

أرى أن هناك مواضيع حول تخصيص زر الموضوع الجديد، ولكن ليس شريط الأدوات نفسه.

3 إعجابات

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

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

لا يوجد إعداد لتكوين شريط الأدوات، ولكن يمكن القيام بذلك من خلال السمات والإضافات.

سيكون من الجيد وجود هذه الميزة، لذا سأعيد تصنيفها كطلب ميزة.

في الوقت الحالي، يمكن إخفاء الأزرار باستخدام CSS… على سبيل المثال:

.d-editor-button-bar {
  .local-dates {  // يخفي زر التاريخ
    display: none;
  }
}

أو لإخفاء خيار من قائمة :gear:

.toolbar-popup-menu-options {
  [data-name="Build Poll"] {
    display: none;
  }
}

باستخدام CSS، من السهل أيضًا إعادة ترتيب العناصر في هذه القوائم… يمكنك القيام بشيء مثل:

.d-editor-button-bar {
  .local-dates {  // ينقل زر التاريخ إلى البداية
    order: -1/
  }
}

لدينا دليل لمعرفة كيفية تغيير CSS هنا:

كل ما سبق، التغيير الأكثر صعوبة هو نقل شيء ما من/إلى القائمة المنسدلة وإلى شريط الأدوات الرئيسي (أو العكس). ستحتاج إلى إخفاء الزر الأصلي باستخدام CSS ثم إضافة زر مكرر باستخدام واجهة برمجة التطبيقات (API).

بالنظر إلى مكون سمة مثال، مثل Discourse Gifs يعطي فكرة عامة عن كيفية القيام بذلك… على الرغم من أن هذا يصبح صعبًا إذا لم تكن مطورًا.

9 إعجابات

لـ قائمة :gear:

عندما حاولت الكتابة بهذه الطريقة، لم يتغير ترتيب العرض.
ملاحظة: display: none; لم تعمل أيضًا.

.toolbar-popup-menu-options {
  [data-name="Create event"] {
    order: -1;
  }
}

الصيغة التالية تعمل كما هو متوقع، وتنقل “إنشاء حدث” إلى الأعلى.

.select-kit-collection {
  display: flex;
  flex-direction: column;
}

.select-kit-row[data-name="Create event"] {
  order: -1;
}

أنا لست على دراية بـ CSS، ChatGPT يساعد في إنشاء الكود أعلاه.

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

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

ولكن في الوقت الحالي، القدرة على تحريك الأشياء عالميًا على الأقل وإضافتها إلى القائمة المخفية/قائمة الترس، ستساعد.

على شاشتي مقاس 13 بوصة، بدأت الأمور تصبح ضيقة بعض الشيء (أحب دائمًا أن يكون جزء من الموضوع الأصلي مرئيًا لاقتباس الأقسام، وما إلى ذلك):

أنا فضولي: كيف أضفت تلك الملاحظة “20 حرفًا مطلوبًا”، وهل تعرض بعد ذلك عدد الأحرف التي كتبها الشخص بالفعل؟
ماذا عن العنوان؟

بصراحة لست متأكدًا تمامًا. تم تثبيت هذا على مجتمع كنت أديره سابقًا (لكنني لم أعد أديره). يبدو أنه يمكن العثور عليه هنا.

إعجابَين (2)

شكرا! هذا بالضبط ما هو مطلوب! :raising_hands:

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

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

الترس هو أيضًا رمز غير واضح جدًا لـ “هناك المزيد”. ربما تكون النقاط الثلاث أكثر ملاءمة؟ هل هناك طريقة مباشرة لتغيير الأيقونة؟

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

.composer-controls .toggle-toolbar {
  display: none;
}

.d-editor-button-bar {
  display: grid !important;
}

مرحباً، كنت أتساءل عما إذا كانت هذه الطريقة لا تزال موصى بها، أم أنها تأثرت بهذا؟

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

لا يزال استخدام api.onToolbarCreate من مُهيئ .js مدعومًا :+1:

الموضوع الذي ربطته يشير فقط إلى تضمين جافاسكريبت في علامات \u003cscript type=\"text/discourse-plugin\"\u003e.

3 إعجابات

مرحباً،

لدي “أيقونة إنشاء حدث” موضوعة على اليمين وخارج القائمة “+menu”، ولكن يمكنك وضعها على اليسار بهذه التعليمات:

  1. في رأس السمة الخاص بك في admin > appearance > themes > edit > edit code > head، أضف هذا الكود جافاسكريبت:
<!-- Custom Create Event Button (Icon-based, Language-proof) -->
<script>
(() => {
  const e = ".d-editor-button-bar";
  const t = ".btn.no-text.fk-d-menu__trigger.toolbar-menu__options-trigger.toolbar__button.options.toolbar-popup-menu-options";
  const n = ".fk-d-menu__inner-content";
  const o = ".d-modal.fk-d-menu-modal";

  const c = (e) => {
    const t = e.querySelector('svg use[href="#calendar-day"]');
    return t ? t.closest("button") : null;
  };

  const r = (e, t, n = 4000) => new Promise((o, c) => {
    const r = t(e);
    if (r) return o(r);
    const l = new MutationObserver(() => {
      const n = t(e);
      n && (l.disconnect(), o(n));
    });
    l.observe(e, { childList: !0, subtree: !0 });
    setTimeout(() => {
      l.disconnect();
      c();
    }, n);
  });

  const l = (e = 4000) => {
    const t = new MutationObserver(() => {
      document.querySelector(o) && t.disconnect();
    });
    t.observe(document.body, { childList: !0, subtree: !0 });
    setTimeout(() => {
      t.disconnect();
    }, e);
  };

  const s = (e) => {
    if (e.querySelector(".custom-create-event-btn")) return;
    const o = document.createElement("button");
    o.className = "btn no-text btn-icon toolbar__button link custom-create-event-btn";
    o.title = "Create event";
    o.innerHTML = '<svg class="fa d-icon d-icon-calendar-day svg-icon"><use href="#calendar-day"></use></svg>';
    e.appendChild(o);

    o.addEventListener("click", async () => {
      const e = document.querySelector(t);
      if (!e) return;
      e.click();
      let o = document.querySelector(n);
      if (!o) {
        await new Promise((e, t) => {
          const c = new MutationObserver(() => {
            o = document.querySelector(n);
            o && (c.disconnect(), e());
          });
          c.observe(document.body, { childList: !0, subtree: !0 });
          setTimeout(() => {
            c.disconnect();
            t();
          }, 2000);
        });
      }
      try {
        (await r(o, c)).click();
        l();
      } catch {}
    });
  };

  const u = new MutationObserver(() => {
    const t = document.querySelector(e);
    t && s(t);
  });
  u.observe(document.body, { childList: !0, subtree: !0 });

  const d = document.querySelector(e);
  d && s(d);
})();
</script>
  1. إذا كنت تريد الأيقونة على اليسار وليس على اليمين: في نفس صفحة الإدارة، ستجد علامة تبويب CSS حيث يمكنك إضافة هذا:

.btn.no-text.btn-icon.toolbar__button.link.custom-create-event-btn { order: -1; }

  1. إضافي: إذا كنت تريد أن يكون هذا الزر مرئيًا في هذا المكان في فئات معينة فقط، فاستخدم النص البرمجي هناك وقم بتعديل الشروط بأسماء الفئات الخاصة بك: Discourse Calendar (and Event) - #547 by opcourdis

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

شكراً جزيلاً لـ @david و @opcourdis على الردود المفيدة.

إعجابَين (2)