محدد البيانات للموضوعات

مرحباً،

أود اقتراح محدد بيانات للسمات (themes) لتسهيل تعديل السمات الكاملة من خلال مكون (Component).

لا أعرف مدى تفرد وضعي، لكنني أقوم بتشغيل مثال يحتوي على نسختين من “graceful” مثبتتين، مما يسمح لي باستخدام لوحة ألوان داكنة وفاتحة. أستخدم مكون سمة لإجراء تعديلات على هذه السمات البعيدة، مثل تغيير زر الإعجاب بشكل شامل. يعمل هذا بشكل ممتاز مع التعديلات الشاملة التي تتحكم فيها الأنماط، لكن المشكلة تظهر عندما أريد إجراء تعديل على النسخة الداكنة لا ينبغي أن يظهر في السمة الفاتحة. لا أرى طريقة لاستخدام CSS لإجراء تغييرات بناءً على معرف السمة (theme id). للقيام بما أريده حالياً، سأضطر إلى إنشاء مكونات سمة فردية لكل سمة للأشياء البسيطة التي أرغب فيها.

ربما شيء مثل [data-theme-id].

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

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

في رأيي، المكونات ممتازة حقًا للتغييرات الشاملة مثل الهوامش (margin) والظهور (display) والحشوة (padding) والعرض (width)، لكن فيما يتعلق بالألوان، ما لم تستخدم المتغيرات، فمن الأفضل تعديل السمات مباشرة.

يبدو هذا تعقيدًا مفرطًا لحل متاح بالفعل :thinking:

لكن تعديل السمات البعيدة يؤدي إلى فقدان تعديلاتك في المرة القادمة التي يتم فيها التحديث، أليس كذلك؟

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

أنت محق. بالنسبة لموضوع بعيد، يمكنك استخدام ثلاثة مكونات:

إصلاح موضوع عالمي للتغييرات المشتركة
وإصلاح موضوع داكن / إصلاح موضوع فاتح للتغييرات المحددة (مثل الألوان). يمكنك ربط المكون بموضوع واحد فقط

سيحتوي “Graceful فاتح” على الإصلاح العالمي والإصلاح الفاتح
سيحتوي “Graceful داكن” على الإصلاح العالمي والإصلاح الداكن

في آخر حل، يمكنك إضافة !important إلى سطر من إصلاحات الفاتح/الداكن إذا لم ينجح التغيير

أظن أنك محق. كنت قد فكرت في مكون عالمي واحد ثم مكون واحد لكل سمة، أي ثلاثة في هذا المثال، لكن بدا ذلك مبالغًا فيه أن يكون لدينا ثلاثة مستودعات بينما يمكن إصلاح الأمر بسهولة باستخدام محدد بيانات، حيث أن كل شيء آخر تقريبًا في discourse يحتوي على واحد.

كملاحظة، معرّف السمة موجود في اسم الوصف كـ content id، والكلمة المفتاحية هي discourse_themes_id، وفي رابط تغيير السمات يكون على شكل [data-id=“#”] على الأقل عند فحص رابط محدد السمات في القائمة المنسدلة الذي ينشئه هذا المكون المثبت هنا على Meta أو في أحد مواقع الاختبار الخاصة بي. إذن الأمر ليس كما لو أن المعلومات غير متاحة في discourse.

إذا قمت بإضافة هذا إلى تبويب الرأس في مكون سمة موقعك

<script type="text/discourse-plugin" version="0.8">
  const themeSelector = require('discourse/lib/theme-selector');
  const currentThemeId = themeSelector.currentThemeId();
  document.body.dataset.themeId = currentThemeId;
</script> 

فإنه سيضيف سمة data-theme-id إلى وسم <body>، ويمكنك استخدامها على النحو التالي:

[data-theme-id="1"] {
  // light theme CSS
}

[data-theme-id="2"] {
  // dark theme CSS
}

في هذه الحالة المحددة جدًا، قد تتمكن من استخدام أدوات SCSS المساعدة الخاصة بنا. إليك مثال من النواة الأساسية، ولكن يجب أن يعمل نفس المبدأ في سمة:

يمكنك أيضًا استخدام @is-dark-color-scheme

بهذه الطريقة، لن يعتمد مكونك على معرفات السمات (theme-ids)، والتي ستتغير إذا قمت بتثبيت السمة على موقع آخر.

أنتم الأفضل جميعًا، شكرًا جزيلاً لكم :slight_smile: