أعتقد أن فكرة أن المفسد لا يمكن أن يكون مضمنًا وكُتلة في نفس الوقت هي حقيقة من حقائق CSS التي لا ينبغي للمستخدم أن يكون على علم بها.
الخلفية: كيف يتعامل HTML مع الأمر؟
ضع في اعتبارك التنسيق الغامق. يمكنك كتابة هذا في bbcode الخاص بـ Discourse اليوم:
A [b]B
C[/b] D
أو يمكنك كتابة هذا بتنسيق HTML:
<!DOCTYPE html>
<html>
<body>
<p>A <strong>B</p>
<p>C</strong> D</p>
</body>
</html>
يتم عرضه بالضبط كما تتوقع أن يتم عرضه:
A B
C D
لكن تمثيل DOM يبدو كالتالي:
<p>A <strong>B</strong></p>
<strong> </strong>
<p><strong>C</strong> D</p>
يستدعي مواصفات HTML حدوث شيء مشابه للروابط التشعبية متعددة الكتل. إذا كتبت هذا بتنسيق HTML:
<!DOCTYPE html>
<html>
<body>
<p>A <a href="https://example.com.">B</p>
<p>C</a> D</p>
</body>
</html>
تستدعي مواصفات HTML أن يبدو تمثيل DOM كالتالي، مع وجود ثلاثة روابط تشعبية:
<body>
<p>A <a href="https://example.com.">B</a>
</p><a href="https://example.com."> </a>
<p><a href="https://example.com.">C</a> D</p>
</body>
اقتراحي: المفسدات المرتبطة
يمكنك تخيل عرض المفسدات المضمنة متعددة الفقرات بطريقة مماثلة:
<p>A <spoiler>B</spoiler></p>
<p><spoiler>C</spoiler> D</p>
لكن المفسدات تختلف عن التنسيق الغامق، لأن المفسدات تفاعلية. عندما تنقر على الجزء B من المفسد، من المفترض أن يكشف عن كل من الجزء B والجزء C من المفسد؛ من المفترض أن يبدو ويشعر وكأنه “مفسد واحد”.
أعتقد أن الطريقة للتعامل مع هذا هي دعم المفسدات المرتبطة في تمثيل DOM. ربما سيكون لـ <spoiler> سمة مثل name، وعندما تنقر على مفسد، سيكشف عن جميع المفسدات بنفس الاسم. (هل يجب القيام بذلك باستخدام السمات أو الخصائص أو بعض الأنظمة الأخرى لربط المفسدات الثلاثة؟ لا أعرف، افعل ذلك بأي طريقة تفضلها.)
لذا، افترض أن لديك Markdown مثل هذا:
A B
C
D E
[spoiler]F[/spoiler]
وتختار B و C و D وتُبَلِّدها.
سيبدو Markdown بعد ذلك كالتالي:
A [spoiler]B
C
D[/spoiler] E
[spoiler]F[/spoiler]
وسيبدو DOM المُنشأ كالتالي:
<p>A <inline-spoiler name="x">B</inline-spoiler></p>
<block-spoiler name="x"><p>C</p></block-spoiler>
<p><inline-spoiler name="x">D</inline-spoiler> E</p>
<block-spoiler name="y"><p>F</p></block-spoiler>
في JavaScript، عند النقر على أي واحد من المفسدات الثلاثة، سيتم الكشف عن جميع المفسدات بنفس السمة “name” معًا.
وبالتالي، من منظور المستخدم النهائي، سيبدو الأمر وكأنك تستطيع مزج ومطابقة المفسدات المضمنة والمفسدات الكتلية.