توجيهات حول إضافة سمات HTML عشوائية إلى القائمة البيضاء؟

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

في البداية، لم أكن أعرف أن ماركداون ستزيل المعرفات (id) والفئات (classes) من المنشورات في HTML، وبعد ذلك مباشرةً اكتشفت أن السكربتات يجب تنفيذها بطريقة مختلفة.

أحاول جعل مثال Codepen هذا يعمل داخل موقع Discourse، لكنني غير متأكد من أين أبدأ، حيث أنه لا يعمل بالطريقة المعتادة للنسخ واللصق، وبشكل واضح:

أفهم أنه يمكنني وضع السكربتات فقط من جانب المسؤول، وهو ما فعلته، لكنني أعتقد أن هناك المزيد من العمل اللازم لجعلها تعمل داخل المواضيع.

بشكل أساسي، يتم تشغيل هذه السكربتات الخارجية لحقن محتوى في div يحتوي على سمات بيانات معينة.

هل عليّ إعادة كتابة جميع السكربتات الخارجية باستخدام jQuery و Ember لحقن divs بالمحتوى؟ آمل ألا أحتاج إلى إعادة اختراع العجلة.

شكرًا مقدّمًا،

لا أفهم هذا الطلب. هل تريد أن يتمكن المستخدمون العاديون من حقن أي كود JavaScript في نظام Discourse الخاص بك، بمجرد نشره في رد؟ سيكون هذا كابوسًا أمنيًا.

شكرًا لك على الرد السريع، جيف.

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

أليس من المفترض أن تكون عناصر div ذات السمات (وهي HTML أساسية) مدعومة ومقبولة بالفعل في المحررات للمستخدم العادي للنشر؟ أم أنه لأنني مدير يمكنني استخدام HTML الأساسي، بينما لا يستطيع المستخدمون العاديون ذلك؟

مواقع كبيرة أخرى مثل Wowhead وIcy Veins تستخدم هذه السكريبتات لمستخدميها، فهل هم أيضًا معرضون للخطر؟

شكرًا مرة أخرى على مساعدتك.

إذن، لا تريد JavaScript، بل تريد

<div attribute='blah'>

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

ومع ذلك، يمكنك إضافة نطاقات <iframe> إلى القائمة البيضاء في إعدادات موقعك لتحقيق شيء مشابه.

إذا بحثت عن “wowhead” في بحث Meta، ستجد:

حيث نقدم لك بعض الأمثلة على دمج المنشورات مع قواعد بيانات الألعاب.

هل لديك مثال ملموس لما تريد تحقيقه؟

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

مرحبًا راؤول،
أظن أنني لست جيدًا في الشرح. يوجد مثال في هذا المنشور:

في أسفل الرابط المذكور في منشوري، تظهر كلمة “Loading”. هذا عنصر div يحتوي على سمات محددة من المفترض أن يحفز السكربتات الخارجية التي قمت بإضافتها في قسم /body من قالب الإدارة (حيث توضع السكربتات)، ثم يتم ملؤه بالمحتوى (شريط إحصائيات) عبر JavaScript.

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

سمات البيانات المخصصة مسموح بها افتراضيًا مع Discourse ولا يتم إزالتها من عنصر div مثل السمات id أو class.

مشكلتي هي: كيف يمكنني جعل هذه السكربتات الخارجية تُنفذ وتولّد البيانات داخل هذه العناصر div الفارغة بناءً على السمات؟ بناءً على هذه السمات، قد تختلف من موضوع إلى آخر أو من منشور إلى آخر، مما يحفز السكربت لعرض بيانات مختلفة يتم توليدها بواسطة هذه السكربتات الخارجية.

للتلخيص لما أعتزم فعله

السكربتات الخارجية موضوعة في قسم الإدارة > تخصيص > قالب “تحرير CSS/HTML” :

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://bloodmallet.com/js/bloodmallet_chart_import.min.js"></script>

الإدخال في المحرر من قبل مستخدم أو من قبلي:

<div 
  data-bloodmallet="chart"
  data-wow-class="shaman" 
  data-wow-spec="elemental" 
  data-chart-engine="highcharts"
  data-tooltip-engine="wowhead"
  data-type="trinkets"
  data-azerite-tier="all"
  data-fight-style="patchwerk"
  data-entries="7"
  data-background-color="#343a40" 
  data-font-color="#f8f9fa" 
  data-axis-color="#828282"
  data-language="en"
>Loading...</div>

المخرجات عند العثور على عنصر div وتنفيذ JavaScript الخارجي (السكربتات التي وضعتها في جانب الإدارة) وتحفيزها لتوليد المحتوى بناءً على سمات البيانات تلك:

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

هذا بالضبط ما رافقه @Falco، اقرأ GitHub - xfalcox/discourse-hearthstone · GitHub فهو يحتوي على كل ما تحتاجه.

مرحبًا جوفري،

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

شكرًا مجددًا.

لقد أدركت للتو أنني لم أكتب عن هذا من قبل، ولكن Generic bbcode wrapper for theme components قد يكون مفيدًا جدًا لحالتك الخاصة.