كيفية الوصول إلى المحتوى غير المطبوخ من مكون السمة؟

أنا أطور مكون سمة (theme component) وأود القيام بشيء مشابه لما يلي:

[code]
main() {
  printf("Hello World!\n");
}
[/code]

والذي ينتج:

main() {
  printf("Hello World!\n");
}

أنا أستخدم api.decorateCooked() لهذا الغرض، ولكن بما أن المحتوى تم طهيه (cooked) بالفعل، فقد تم إزالة كل “مساحة زائدة”، مثل المسافة قبل printf في المثال أعلاه.

كيف يمكنني الوصول إلى النص “غير المطهو” كما أدخله المستخدم؟

وللتوضيح؛ ما أريد دعمه من خلال مكون السمة الخاص بي هو السماح للمستخدم بكتابة شيء مثل:

[mytag]
main() {
  printf("Hello World!\n");
}
[/mytag]

الذي يفهمه مكون السمة الخاص بي ويستبدله بتحويل للنص الموجود داخل [mytag] ... [/mytag].

للحصول على الوصول إلى raw، ستحتاج إلى استخدام إضافة.

ومع ذلك، يمكنك استخدام مساعد wrap، وبذلك ستحصل على عنصر div للتعامل معه.

[wrap=test]
hello world
[/wrap]

يُحوّل إلى:

<div class="d-wrap" data-wrap="test">
<p>hello world</p>
</div>

شكرًا.

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

هل من الممكن تنفيذ دعم لـ raw في مكونات السمات؟ وإذا كان الأمر كذلك، هل تقبل طلب سحب (PR) لتنفيذ ذلك؟

دالة wrap لا تفعل ما طلبته. فهي أيضًا تزيل المسافة البادئة.

للأسف، لا تتيح مستوياتنا المجانية، القياسية، وتلك المخصصة للأعمال إضافة مكونات إضافية مخصصة. نحن نستخدم مجموعة خوادم تستضيف العديد من العملاء المختلفين، ولا نملك آلية لتشغيل مكون إضافي لعميل واحد فقط.

فكرة دعم إمكانية حقن امتداد Markdown عبر عنصر في السمة (theme component) هي فكرة فكرت فيها في الماضي، لكننا لا نملك خططًا ملموسة لإضافتها. سيكون من الصعب للغاية إضافتها.

ماذا عن التغليف المزدوج؟ هذا سيحافظ بالتأكيد على جميع المسافات البادئة.

[wrap=test]
```
1
  1
    3
```
[/wrap]

ربما حتى مجرد استخدام شيء مثل هذا سيعمل، وستكون لديك عنصر مميز للعمل معه:

```custom
test
```

هل هو صعب للغاية بالنسبة لك أيضًا، أم فقط لشخص مثلي لا يملك معرفة مسبقة بالتنفيذ؟ أين تكمن الصعوبة؟ هل سيكون من الأسهل القيام بشيء أبسط من امتداد كامل لـ Markdown، مثل الوصول للقراءة فقط للبيانات الخام؟

نعم، قد يكون هذا خيارًا. شكرًا لك.

لا يحصل الواجهة الأمامية على محتوى المنشور raw. فهي تحصل فقط على النسخة المُعالَجة (cooked). هذا يعني أن الحمولات المرسلة إلى العميل تكون أصغر حجمًا. بالإضافة إلى ذلك، فإن الخادم هو المسؤول في النهاية عن تحويل markdown إلى HTML. إذا قمنا بذلك كله أثناء التشغيل في المتصفح، فسنضيف تكاليف إضافية كبيرة ونواجه نواقل أمان معقدة يجب القلق بشأنها.

@sam شكراً لك على مساعدتك. اتضح أن اقتراحك كان جيداً وقدم للمستخدم صيغة مقبولة للغاية:

:sunglasses:

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

@pfaffman لا أعرف ما تقصده بـ

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

لقد بحثت وبحثت ولا أرى في مثالك ما الفرق بين صورتك ومربع الكود القياسي.

الرسم البياني الذي أضافه مكون السمة الخاص بي.

أوه! إذن تريد شيئًا يشبه إضافة الرياضيات، لكن بلغة الرسم البياني الخاصة بك بدلاً من TeX؟

نعم، أظن ذلك. لم أرى إضافة الرياضيات بعد، لكنها تبدو متشابهة من حيث المفهوم. إنها تؤدي نفس الوظيفة الأساسية مثل https://meta.discourse.org/t/graphviz-plugin/97554، لكن هذه الإضافة قادرة على القيام بأشياء أكثر تقدماً، مثل الانتقالات المتحركة بين الرسوم البيانية، وتوفر مجموعة واسعة من الخيارات للتحكم فيها وتنسيقها.

هناك أيضًا https://meta.discourse.org/t/graphviz-plugin/97554، والذي أعتقد أنه لا يزال لا يحل مشكلتك، حيث لا يمكنك تثبيت إضافة.

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

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

عذراً، لا أفهم ما تقصده. إنه مكون سمة ويمكن تثبيته في أي نسخة من Discourse عبر واجهة الويب من قبل المسؤول، بغض النظر عن الخطة التي يستخدمونها.

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

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

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

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