Avraham
(Avraham Byers)
30 نوفمبر 2020، 6:07م
1
أحاول إضافة بعض الكود في Discourse لإنشاء تقويم للفعاليات. لقد قمت بإضافة مسافة بادئة بمقدار أربعة مسافات، لكن يبدو أنها لا تعمل.
إليك مقتطف الكود:
وهذا ما حصلت عليه…
لست مبرمجًا معتادًا، لذا أرجو منك إذا أمكن تبسيط المصطلحات التقنية، سأكون ممتنًا جدًا.
Johani
(Joe)
30 نوفمبر 2020، 9:16م
2
السبب هنا هو أن Discourse يقوم بتصفية مدخلات المستخدمين في المنشورات كإجراء أمني. لا ترغب في أن يقوم مستخدمون عشوائيون بتشغيل سكريبتات على موقعك، لذا نقوم بتصفيتها.
يمكنك استخدام مكون سمة (theme component) لجعل هذا يعمل. إذا أضفت شيئًا مثل هذا في مكون سمة جديد - تحت علامة تبويب الرأس - ثم أضفته إلى سمة نشطة لديك، فستتمكن من استخدام هذا التضمين.
<script type="text/discourse-plugin" version="0.8">
const loadScript = require("discourse/lib/load-script").default;
const { next } = require("@ember/runloop");
api.decorateCookedElement(
post => {
const calendars = post.querySelectorAll(`[data-wrap="addEvent"]`);
if (!calendars.length) return;
calendars.forEach(calendar => {
const wrapper = document.createElement("div");
wrapper.dataset.calendar = calendar.dataset.calendar;
wrapper.dataset.configure = false;
wrapper.classList.add("ae-emd-cal");
calendar.append(wrapper);
});
next(() =>
loadScript("https://addevent.com/js/cal.embed.t1.init.js")
);
},
{ id: "AddEvent decorator", onlyStream: true }
);
</script>
بمجرد القيام بذلك، يمكنك إضافة تقويم AddEvent إلى منشور عن طريق إضافة شيء مثل هذا في منشورك.
[wrap=addEvent calendar=bJ306355][/wrap]
يمكنك تغيير السمة calendar=bJ306355 لإضافة المعرف المحدد للتقويم الذي تريد تضمينه.
آخر شيء تحتاج إلى فعله هو إدراج سكريبت AddEvent في قائمة السماح (whitelist) ضمن إعدادات موقعك (هذه طبقة أمان أخرى).
ابحث عن content_security_policy_script_src في لوحة الإدارة وأضف هذا الرابط هناك
https://addevent.com
أخبرني إذا كان هذا يعمل معك، ويمكنني تعبئته كمكون سمة.
مرحبًا @Johani ،
حلّك يعمل معي. أردت فقط إخبارك بذلك.
شكرًا لك!
لذا، لقد أنشأت للتو مكون سمة جديد لعرض تقويم AddEvent.
GitHub - graydenshand/discourse_upcoming_addevent: Replace the DiscourseEvent "upcoming events" calendar with an AddEvent embed · GitHub
بدلاً من تضمين التقويم في منشور، وهو ضيق جدًا لعرض نسخة سطح المكتب من التضمين، يقوم مكون السمة هذا بالاستيلاء على صفحة “الأحداث القادمة” الخاصة بإضافة DiscourseCalendar.
لاحظ أنه من أجل القيام بذلك، كان عليّ تخصيص سكريبت AddEvent (https://addevent.com/js/cal.embed.t1.init.js ) للسماح بإعادة العرض بين انتقالات الصفحات.