Hello,
I am trying to integrate ckeditor5 in liveview.
I have successfully created the mounted & updated hooks, I now see the ckeditor just fine in my LiveView. But I don"t know how to retrieve the editor content in order to save it.
Running code in app.js:
function ckeditor_fct(it) {
editor = ClassicEditor
.create(it.el)
.catch(error => {
console.error(error);
})
}
let Hooks = {}
Hooks.CkEditor = {
mounted() {
console.log("mount");
ckeditor_fct(this)
},
beforeUpdate() {
console.log("beforeUpdate");
},
disconnected() {
console.log("disconnected");
},
reconnected() {
console.log("reconnected");
},
destroyed() {
console.log("destroyed");
},
updated() {
console.log("updated");
ckeditor_fct(this)
}
}
let liveSocket = new LiveSocket("/live", Socket, { hooks: Hooks, params: { _csrf_token: csrfToken } })
I have tried to add this code to ckeditor_fct function
editor.model.document.on( 'change:data', () => {
console.log( 'The data has changed!' );
} );
but this code crashes at execution :
app.js:44 Uncaught TypeError: Cannot read properties of undefined (reading ‘document’)
I have tried
it.el.addEventListener('change', () => {
console.log('The data has changed!');
});
No crash, but no event received.
I admit that I’m bad with JavaScript.
As It is, user modification does not even survive any change made in the other form fields : content of the CKeditor is lost upon any updated event received.
I have seen in https://elixirforum.com/t/ckeditor5-in-liveview/44122 a recommendation to
restore state on updated (copied from beforeUpdate).
but I don’t know how to do that.
Also, in order to save the editor content, I believe I need to receive the change event.
I spent 8 hours trying to fix this, but I’m stuck.
Thank you for your help