متابعةً لهذا، لدينا إضافة تستخدم رموز BBCode “wrap_open”، والتي لم يدعمها محرر النصوص المنسقة بعد. لذا نحتاج إلى التأكد من بقائنا في وضع Markdown في الوقت الحالي.
لقد استخدمت Claude Sonnet لإنشاء الكود التالي لضمان ذلك. سأكون سعيدًا بتلقي أي ملاحظات حول كيفية تحسينه (خاصة إذا كان به أي أخطاء
). أشارك هذا أيضًا في حال ساعد مشرفي منتديات آخرين. يوضع الكود في إعدادات السمة > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// فرض تبديل محرر المستخدم إلى وضع markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// يجب أن يكون المستخدم مسجلاً دخوله إذا تم فتح المؤلف
if (!currentUser) {
console.error('لم يتم العثور على مستخدم');
return;
}
// تم الحصول على هذا الخيار من هنا
// https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
const currentMode = currentUser.get('user_option.composition_mode');
if (currentMode !== 0) {
// التبديل فقط إذا لم يكن بالفعل في وضع markdown
// مثال للاستخدام: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// حفظ تفضيل المستخدم على الخادم
currentUser.save(['composition_mode']).then(() => {
console.log('تم التبديل بنجاح إلى وضع markdown');
}).catch((error) => {
console.error('فشل تحديث وضع التركيب:', error);
});
// تبديل واجهة المستخدم للمؤلف الحالية فورًا
setTimeout(() => {
const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
if (toggleButton) {
const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
if (isRichTextActive) {
toggleButton.click();
console.log('تم تبديل المؤلف الحالي إلى وضع markdown');
}
}
}, 100); // تأخير بسيط لضمان عرض المؤلف بالكامل
} else {
console.log('بالفعل في وضع markdown، لا حاجة للتغيير');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});