Cine
Cine

Reputation: 4402

CKEDITOR insert html into widget part does not initialize nested widgets

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

Answers (1)

Cine
Cine

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

Related Questions