feat(editor): re-init CM6 on htmx:afterSwap into #modal-content

editor.js exposes initEditors(root) and listens for htmx:afterSwap so
editor textareas that arrive via modal swap get CM6 mounted. The
DOMContentLoaded path remains for first-paint mounting.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
mwiegand 2026-05-17 12:43:12 +02:00
parent afd2ed1c3c
commit f426970d4c
No known key found for this signature in database

View file

@ -86,18 +86,31 @@
}
}
function init() {
for (const ta of document.querySelectorAll("textarea[data-editor-language]")) {
function initEditors(root) {
const scope = root || document;
for (const ta of scope.querySelectorAll("textarea[data-editor-language]")) {
mountOne(ta).catch(err => {
console.error("[editor] mount failed", err);
unhideTextarea(ta); // restore the form-usable raw textarea
unhideTextarea(ta);
});
}
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
document.addEventListener("DOMContentLoaded", () => initEditors(document));
} else {
init();
initEditors(document);
}
// Re-init editors that arrive via HTMX swap (modal content, etc.).
document.body.addEventListener("htmx:afterSwap", (event) => {
if (event.target && event.target.id === "modal-content") {
initEditors(event.target);
}
});
// Expose for callers that need to re-mount imperatively.
if (window.__editor) {
window.__editor.initEditors = initEditors;
}
})();