Reputation: 4402
I have a widget where I allow users to paste html in the dialog of the widget.
In the data(evt)
event method of the widget, I then call evt.sender.parts.content.setHtml(content);
.
This works just fine for plain html, however if the html contains elements that should turn into widgets, these do not get initialized.
I have tried calling evt.sender.editor.widgets.checkWidgets();
, but that doesn't seem to do anything. In particular no upcast
methods are ever called.
I also tried to get the range of the content part, so that I could use editor.insertHtml instead, but cannot find the range anywhere in the dom.Element
object.
Then I tried using evt.sender.parts.content.setHtml(evt.sender.editor.dataProcessor.toHtml(content, 'a'));
. That calls the upcast
method, but for some reason never calls the init
method.
Any suggestions how to deal with this?
Upvotes: 1
Views: 375
Reputation: 4402
And I figured it out while typing the question...
You have to call first evt.sender.parts.content.setHtml(evt.sender.editor.dataProcessor.toHtml(content, 'a'));
to process the html and then evt.sender.editor.widgets.checkWidgets();
to process the created html with the uninitialized widgets.
To prevent infinite loops with other recursive widgets, the call to checkWidgets()
should be done in a setTimeout
. IE:
if (!checkingNewWidgets)
checkingNewWidgets = setTimeout(function() {
t.editor.widgets.checkWidgets();
checkingNewWidgets = 0;
});
Upvotes: 1