GrapesJS / grapesjs

Free and Open source Web Builder Framework. Next generation tool for building templates without coding
https://grapesjs.com
BSD 3-Clause "New" or "Revised" License
22.36k stars 4.05k forks source link

Ensure that getHtml() / runCommand("gjs-get-inlined-html") returns the very latest contents of the canvas #1767

Closed arachnosoft closed 5 years ago

arachnosoft commented 5 years ago

Hi @artf ,

I ran into a similar, if not the same issue as this one: #1327

While editing a text block, I click on an external button to get the contents of the canvas, without leaving the cursor from the canvas.

At this point, if I call getHtml() or runCommand("gjs-get-inlined-html") (my grapesjs being loaded with the Newsletter plugin), both commands return the contents of the canvas in its previous state (= before I started editing my block) and not in its "current" state (i.e. with the text I was currently typing).

I guess this is by-design; It can easily be reproduced on the online demo:

grapesjs not updating until blur

To ensure that grapesjs validates the content I was typing before calling getHtml() / runCommand("gjs-get-inlined-html"), just like when you click elsewhere on the canvas to trigger the component's blur event and update, I had to call disableEditing() explicitely, like this:

if (editor.getModel().isEditing()) editor.getSelected().view.disableEditing();

Based on https://github.com/artf/grapesjs/issues/319#issuecomment-331069138

Just to be sure, you could simply confirm that it's the right way to do so? And, if so, could you add this point on the getHtml() function documentation? It could avoid many misunderstandings, IMO.

FYI, I was already aware of such issues with CKEditor, on which you have to call myCkEditorInstance.updateElement() right before myCkEditorInstance.getData(). That's why I supposed it wasn't a bug ;)

artf commented 5 years ago

Yeah, this is exactly how it works. I'll try to check if I'm able to merge the temporary state before getting the HTML data

lock[bot] commented 4 years ago

This thread has been automatically locked since there has not been any recent activity after it was closed. Please open a new issue for related bugs.