بعد أن كدتُ أُتلف حاسوبي تقريبًا، وجدتُ حلًا بديلًا — ربما ليس الحل الأمثل ![]()
يبدو أنه عند النقر على زر الرد داخل تضمين التطبيق الكامل (Full App Embed)، يفتح المُحرِّر (composer) بشكل صحيح في DOM (#reply-control.open)، لكن لسبب ما يبقى display: none.
تأكدتُ من ذلك في وحدة التحكم بالمتصفح: كان المُحرِّر موجودًا، لكن قيمته المحسوبة لخاصية display كانت “none”. عند تنفيذ الأمر يدويًا:
document.querySelector('#reply-control').style.setProperty('display', 'block', 'important');
ظهر المُحرِّر فورًا وعمل كل شيء بشكل طبيعي.
كحل بديل، إضافة كود JavaScript التالي إلى سمة Discourse تُصلح المشكلة بالنسبة لي:
import { apiInitializer } from "discourse/lib/api";
export default apiInitializer((api) => {
if (!document.body.classList.contains("embed-mode")) {
return;
}
const fixComposer = () => {
const composer = document.querySelector("#reply-control.open");
if (composer) {
composer.style.setProperty("display", "block", "important");
}
};
const observer = new MutationObserver(fixComposer);
observer.observe(document.body, {
childList: true,
subtree: true,
attributes: true,
attributeFilter: ["class"],
});
fixComposer();
});
يبدو أن هذا يُصلح الأمر تمامًا، وقد حدّدتُ نطاق الحل البديل لوضع التضمين (embed-mode) فقط حتى لا يؤثر على واجهة Discourse العادية.
من الواضح أن هذا على الأرجح ليس الحل المثالي على المدى الطويل، لكن آمل أن يساعد في تحديد ما الذي يتسبب في بقاء المُحرِّر المفتوح بخاصية display: none في تضمين التطبيق الكامل.