تمييز أجزاء من فقرتين كـ "سبويلر" لا يعمل بشكل صحيح

في وضع Markdown، اكتب ما يلي:

A B

C D

حدد B و C ولكن ليس A و D، ثم “تمويه الإفساد”.
ستبدو النتيجة كما يلي:

A [spoiler]
B

C
[/spoiler] D

ولن يتم تمويه الإفساد.

A [spoiler]
B

C
[/spoiler] D

الآن جرب مرة أخرى في وضع النص المنسق. ابدأ بما يلي:

A B

C D

حدد B و C وقم بتمويه الإفساد.
سيتم حذف فاصل الفقرة، وستبدو النتيجة كما يلي:

A BC D

إذا عدت إلى وضع Markdown، فستبدو النتيجة كما يلي:

A [spoiler]BC[/spoiler] D
إعجاب واحد (1)

ما هي النتيجة التي تتوقعها في هذه الحالة، مع الأخذ في الاعتبار أنه لا يمكن أن يكون التلميح مضمنًا وفي كتلة في نفس الوقت؟

أعتقد أن فكرة أن المفسد لا يمكن أن يكون مضمنًا وكُتلة في نفس الوقت هي حقيقة من حقائق 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” معًا.

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

لقد نقلت هذا من Bug إلى Feature نظرًا لأن ما نستكشفه هنا هو وظيفة غير مدعومة حاليًا.

@dfabulich هل يمكنك مشاركة حالة الاستخدام التي تتطلع إلى دعمها؟ سيساعدنا ذلك على فهم أفضل طريقة للتعامل مع الحل. هل يمكنك إخبارنا عن مدى فائدة دعم هذا الشكل من المفسدات المضمنة + الكتل في مجتمعك، أو متى تظهر؟

أعتقد أنه من الخطأ تصنيف هذا على أنه “ميزة”.

يمكنني أن أتخيل قول “هذه المشكلة صعبة للغاية بحيث لا يمكن إصلاحها؛ لا معنى لإعطائها الأولوية على العمل الآخر”.

لكنني لا أعتقد أن أي شخص سيدافع عن السلوك الحالي على أنه صحيح.

أما بالنسبة لسؤالك، فليس من الممكن حقًا تقديم “حالة استخدام” لإصلاح خطأ. الميزات لها حالات استخدام (إخفاء التلميحات: يريد المستخدمون إخفاء التلميحات حتى يتمكنوا من مناقشة الوسائط دون إفساد المفاجأة)، ولكن الأخطاء تكمن داخل الميزات. إصلاح الأخطاء هو كيف تفي الميزة بحالة استخدامها.

لماذا هذه المشكلة مهمة؟ لأننا نستخدم التلميحات كثيرًا!

إذا تعاملت مع هذه المشكلة على أنها “خطأ”، وأقررت أن تنفيذ حلي المقترح قد يكون مكلفًا، فإن أقرب ما يمكنني تقديمه للإجابة على سؤال “حالة الاستخدام” هو الإجابة على سؤال مختلف:

“لماذا هذه المشكلة مهمة؟ بالنظر إلى أن السلوك الحالي غير صحيح، من يهتم بعدم قدرتك على إخفاء النص المضمن عبر فقرات متعددة؟ هل تحتاج حقًا إلى القيام بذلك؟”

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

بصراحة، سيكون تحسينًا طفيفًا على السلوك الحالي عرض رسالة خطأ عندما يحاول المستخدم إخفاء أجزاء من فقرتين، وتثقيف المستخدم حول طبيعة المشكلة. يمكن أن تقول رسالة الخطأ: “في Discourse، يمكنك إخفاء جزء من فقرة واحدة، أو يمكنك إخفاء فقرة واحدة أو أكثر بأكملها، ولكن لا يمكنك إنشاء تلميح يحتوي على أجزاء من فقرتين أو أكثر.”

ولكن تخيل الآن إذا كان عليك عرض مثل هذا الخطأ للنص الغامق؟ أو المائل؟

وهذا يقود إلى سبب أهمية التلميحات بالنسبة لي: المنتدى الذي أديره (ومنصات Discourse الأخرى التي أشارك فيها) هي منتديات لاعبين، حيث الحديث عن الوسائط، وخاصة دون إفساد حلول الألغاز، أمر مهم حقًا.

أتفهم لماذا قد يقول شخص ما “إخفاء التلميحات ليس بنفس أهمية النص الغامق. سنصلح الخطأ للنص الغامق عن طريق إنشاء أقسام غامقة متعددة، ولكن بالنسبة لإخفاء التلميحات، لدينا أمور أكبر نهتم بها؛ دعنا نترك خطأ التلميحات دون إصلاح. نحن لا نهتم بالتلميحات كثيرًا. سيجد المستخدمون حلاً بديلاً.”

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

ما هي “حالة الاستخدام؟” حالة الاستخدام هي: نستخدم التلميحات للتحدث عن الوسائط دون إفساد المفاجأة. وبالتالي، يجب أن تعمل ميزة إخفاء التلميحات، وأن تعمل بشكل صحيح، لتلبية هذه الحاجة.

إعجاب واحد (1)

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

الخطأ هو أنه عند محاولة تطبيق مفسد ضمني وعبر الكتل، تتم إزالة فواصل الفقرات (في وضع النص المنسق) وإضافتها (في وضع Markdown):

نص منسق:

Markdown:

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

  • مفسدان منفصلان، أحدهما في كل سطر، يجب النقر عليهما بشكل منفصل للكشف عنهما
  • مفسد واحد، ولكن سيتم إجبار المحتوى المحدد على أن يكون في كتلته الخاصة

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

سبب سؤالي عن حالة الاستخدام الخاصة بك هو المساعدة في إصلاح الخطأ وفهم أهمية الميزة. نرى عادةً المفسدين إما ضمنيًا أو ككتل، لذلك أتساءل عما إذا كانت هناك مواقف معينة يلعب فيها المفسد الضمني + الكتلة دورًا. هذا يساعدنا على التعرف على كيفية استخدامك لـ Discourse بشكل أفضل وفهم كيف يمكن أن يساعدك حل هذا الأمر (والآخرين الذين يتعرفون على احتياجات مجتمعاتهم فيما تشاركه هنا).

إعجاب واحد (1)

بالنظر إلى هذين الخيارين، أعتقد أنني سأختار “مفسد واحد، ولكن سيتم إجبار المحتوى المحدد في كتلة خاصة به”.

لا يمكنني حقًا تقديم سبب متعلق بحالة الاستخدام لهذا؛ أعتقد أن سلوك الكتلة الإجبارية سيظل به خلل.

لكن خيار الكتلة الإجبارية يبدو “أقل خللاً” بالنسبة لي لأنه “يؤثر فقط” على كيفية ظهور المفسد شكليًا: إضافة سطر فاصل إضافي في بداية ونهاية المفسد.

وجود مفسدات متعددة غير مرتبطة يؤثر على كيفية عمل المفسد وظيفيًا. سيحتاج القراء إلى النقر ثلاث مرات على الأقل للكشف عن المفسد بالكامل: مرة واحدة للمفسد المضمن الرائد، ثم مرة أخرى لـ N مفسدات كتلة، ثم مرة أخرى في المفسد المضمن اللاحق.

مع المفسدات الإجبارية، يصبح خطأً صعبًا تجميليًا، وهو النوع الذي ربما لن يعمل عليه أحد أبدًا.

إعجابَين (2)

هذا التأطير منطقي بالنسبة لي:

سنعمل على إصلاح ذلك؛ ليس لدي موعد تقديري لك، لكنني سأقوم بالتحديث هنا بمجرد معالجة هذا الأمر.

إعجاب واحد (1)