في السابق، كانت جميع الألوان في Discourse مخزنة كمتغيرات SCSS. لدعم التبديل التلقائي لمخطط ألوان الوضع الداكن، قمنا بتحويل هذه الألوان في النواة إلى خصائص CSS مخصصة. يمكنك بسهولة رؤية القائمة الكاملة في المُفتِّش الآن:
تحتاج السمات (Themes) والإضافات (Plugins) إلى تبديل جميع متغيرات SCSS $color المستخدمة في أوراق الأنماط إلى ما يعادلها من خصائص CSS --color. في معظم الحالات، تكون هذه مهمة بحث واستبدال بسيطة:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low);
ولكن هناك بعض الحالات التي يستخدم فيها السمة أو الإضافة تباينًا أكثر تعقيدًا للون، على سبيل المثال، عند التغميق أو التفتيح باستخدام دوال ألوان SCSS. تتطلب هذه الحالات إعادة هيكلة أكثر تعقيدًا، ولهذا أضفنا القدرة على توسيع تعريفات الألوان في السمات والإضافات.
في الإضافات (Plugins)
هذا الالتزام (commit) في إضافة discourse-encrypt هو مثال جيد وبسيط لمثل هذه إعادة الهيكلة. إنه ينقل تعريف mix($color1, $color2) الخاص بـ SCSS إلى ملف منفصل ويخزنه كخاصية CSS مخصصة. بعد ذلك، يتم تسجيل الملف الجديد كأصل :color_definitions مما يضمن تضمين خاصية اللون المُعلنة حديثًا في ورقة أنماط تعريفات الألوان.
في السمات (Themes)
في السمات، يمكنك القيام بالشيء نفسه عن طريق تعريف خصائص CSS المخصصة في ورقة الأنماط common/color_definitions.scss. يمكنك الاطلاع على هذا الالتزام في السمة graceful كمثال.
بعض الملاحظات الإضافية
- عند استخدام ألوان شفافة عبر الدالة
rgba($color, 0.5)، يقبل SCSS ألوان HEX و RGB في المعامل الأول، بينما تقبل خصائص CSS المخصصة لون RGB فقط. لهذا السبب قدمنا الدالة المساعدةhexToRGB()وبعض الخصائص التي تنتهي باللاحقة--rgbفي تعريفات الألوان. مثال:
// color_definitions.scss
:root {
--primary: #{$primary};
--primary-rgb: #{hexToRGB($primary)};
}
// other stylesheet
.element {
background-color: rgba(var(--primary-rgb), 0.05);
}
- لاحظ أنه في المقتطف أعلاه، يتم استيفاء (interpolate) متغير SCSS عند تمريره إلى خاصية مخصصة. هذا مطلب في SCSS، راجع Sass: Property Declarations لمزيد من التفاصيل.
- يمكن لتعريف CSS
var()أن يوفر قيمة احتياطية (fallback) إذا لم تكن القيمة الأولى متاحة، كما في كتابةvar(--color1, red)، سيعود CSS إلى اللون الأحمر إذا لم يتم العثور على الخاصية--color1. في الإضافات، نستخدم متغيرات ألوان SCSS كقيم احتياطية لضمان التوافق مع الإصدارات السابقة من Discourse. لذا، سيبدو المثال السابق بهذا الشكل مع قيمة احتياطية:
- background-color: $primary-very-low;
+ background-color: var(--primary-very-low, $primary-very-low);
يتم التحكم في إصدار هذا المستند - اقترح تغييرات على github.

