أيها المطورون، يرجى استخدام خدمة dialog في النواة بدلاً من bootbox في السمات والإضافات المخصصة الخاصة بكم. سيتم إزالة مكتبة bootbox من نواة Discourse بالكامل في وقت ما في عام 2023.
فيما يلي بعض طلبات السحب (PRs) من الإضافات والسمات التي توضح كيفية الانتقال إلى خدمة dialog:
الخيار الأسهل هو تحميل الخدمة باستخدام البحث. إليك مثال على الكود (هذا لم يتم اختباره، لكننا نستخدم شيئًا كهذا في النواة، خارج مكونات/وحدات تحكم/مسارات Ember):
شكرا. لقد جربت هذا ولكنني أحصل على خطأ: SyntaxError: /discourse/theme-11/initializers/theme-field-36-common-html-script-2: 'import' and 'export' may only appear at the top level. (13:4)
آه، صحيح، نحتاج إلى استخدام require في علامات النص البرمجي هذه. إذا كان من الممكن مشاركته، فما هو الكود الكامل لما تفعله هنا؟ أود أن أقترح بديلاً لعلامة <script> هذه، لقد نقلنا معظم كود السمة إلى ملفات JS مستقلة في مكونات السمة التي نحافظ عليها بأنفسنا وقد يكون من الأسهل إجراء إعادة هيكلة عامة هنا لك.
شكراً على العرض! إليك النص البرمجي الكامل (مع تعديل بعض النصوص بشكل طفيف)، والذي كان يعمل بشكل جيد حتى لاحظنا أن نافذة Bootbox المنبثقة لم تعد تعرض علامات HTML بشكل صحيح.
<script type="text/discourse-plugin" version="0.8">
if (typeof bootbox === 'undefined') {
console.log('Cannot trigger undefined "bootbox"');
return;
}
let currentUser = api.getCurrentUser();
if (currentUser) {
api.container.lookup('store:main').find('user', currentUser.username).then((user) => {
let userGroups = user.groups.map(group => group.name);
let bodyClasses = userGroups.map(group => `user-group--${group}`);
document.querySelector('body').classList.add(...bodyClasses)
let showPopup;
switch(true) {
case userGroups.includes('restricted_member'):
showPopup = true;
break;
case userGroups.includes('users_all'):
case userGroups.includes('officers'):
showPopup = false;
break;
default:
showPopup = true;
break;
}
if (!showPopup) {
return;
}
let alertHeading = '<h2>Oh no!</h2>';
let alertBody = '<p>Your account is currently restricted and you no longer have access to valuable resources. <a href="https://meta.discourse.org">Click here</a> for more information.</p>';
bootbox.alert(alertHeading + alertBody);
});
}
</script>