يُنشئ مكون جدول المحتويات (TOC) سمات id لعناصر العناوين بناءً على نص العنوان.
إليك عنوانًا كمثال.
main outlet
الناتج يأتي من الأنماط المطبقة على #main-outlet، وهو عنصر في تطبيق Discourse لا علاقة له بهذا المنشور.
هذا ليس نهاية العالم إذا أمكنني تحديد id بديل للعنوان. يدعم مكون جدول المحتويات ذلك:
https://github.com/discourse/DiscoTOC/blob/master/common/header.html#L293
لسوء الحظ، يقوم Discourse بحذف سمات id من عناصر المنشور قبل تنفيذ الكود المذكور أعلاه، مما يعطل المنطق.
إليك عنوانًا يستخدم <h4 id="alt-main-outlet">main outlet</h4>:
main outlet
لاحظ أنه لا يزال يستخدم main-outlet بدلاً من alt-main-outlet.
أعتقد أن Discourse يفعل ذلك استباقًا في حال حاول شخص ما التلاعب بعنصر في الصفحة. ولكن مع مكون جدول المحتويات، يمكن تجاوز ذلك بسهولة.
إذا كان هناك حل لهذه المشكلة، أو إذا كانت هذه مشكلة معروفة ومناقشة جيدًا ولم ألاحظها، فأعتذر عن الآراء غير المطلوبة التالية ![]()
ملاحظة إضافية (P.S.)
شخصيًا، أعتقد أن Discourse لا ينبغي أن يحذف سمات id للعناصر. هذا هيكل أساسي في صفحات الويب ويُستخدم في التنقل عبر الصفحة باستخدام مقاطع عناوين URL. إذا أراد شخص ما إنشاء رابط إلى عنصر في منشور، فأعتقد أن هذا حقه كمؤلف.
حقيقة أن جدول المحتويات يفتح باب التلاعب بالمعرفات (ID hacking) تشير إلى أن إجراء حذف المعرفات من الأساس يمكن التخلي عنه.
إذا كان فريق Discourse قلقًا جدًا من اختطاف المعرفات، فيجب أن تُسبق جميع معرفات Discourse ببادئة، مثل discourse-main-outlet، وينطبق حذف المعرفات فقط على تلك المعرفات ذات البادئة.
يمكنني تقدير استحالة ذلك نظرًا للكود الحالي!
يمكن تخيل مجموعة من المعرفات المستبعدة (مثل main-outlet وما إلى ذلك) يتم حذفها. هذا لا يزال يترك مشكلة استخدام جدول المحتويات لتجاوز هذا الإجراء الوقائي، لكنه على الأقل سيسمح للمؤلفين بإنشاء مراسيم مفيدة.
ملاحظة إضافية ثانية (P.P.S.)
مرتبط ارتباطًا مباشرًا بهذه المشكلة هو وجود عناوين تحمل نفس المحتوى النصي.
Topic One
Examples
Topic Two
Examples
مع جدول المحتويات، يحصل كلا العنوانين Examples على نفس المعرف (ID)، وهو أمر معطل بوضوح. يمكن لجدول المحتويات إرفاق مؤشرات تصاعدية (مثل examples، examples-2، إلخ) — وربما ينبغي أن يكون ذلك كإجراء افتراضي — ولكن الحل الأفضل سيكون معالجة المشكلة المذكورة أعلاه، والتي تسمح للمؤلفين بالقرار بشأن كيفية وصف محتواهم. مثلًا: <h5 id="topic-one-examples">Examples</h5>، وهكذا.