I'm writing a custom plugin. for one aspect of it I have a really hacky solution that requires an external, global variable of sorts and I'm hoping someone might have insight on an alternative.
In my plugin's dialog.add('mydlg', function(editor) {} ), I have it adding an onShow: function() {}
Inside that function it builds up some HTML destined for the interior of the dialog and adds it to the dialog with:
var content = this.getContentElement('general', 'content').getElement();
content.setHtml(html);
In this context, "this" is the CKEDITOR.dialog that fires the onShow() event associated with it.
Now INSIDE that html block, I am adding a button with an onclick="do_something();" attribute. I want the do_something() function to be defined within this same dialog so that all the code is linked together nice and neat. To this end, in the dialog.add() function I've added an event to the associated editor like so:
editor.on('myevt', function() {});
Now the button's onClick can be linked to that by saying editor.fire('myevt'); The problem is that editor is undefined in the context of the onclick="" block of script. "this" refers to the button element itself, so that's no help. To solve this, I ended up stashing a copy of editor in a global variable currentEditor and then in the onclick just doing currentEditor.fire('myevt'). It works, but it seems like a poor solution.
Making matters worse, in the context of the myevt event function, "this" is the editor object. I want access to the dialog that fired the event from within there, and I'll be darned if the editor class appears to have no method for getting a named dialog to work with it. UIElement has a method to getDialog() to get it's parent, but editor has no way to getDialog(name) to get a child. This makes the API incomplete as far as I'm concerned and now I have to work around it using the same poor solution: storing a copy of the dialog in yet another global variable so that I can get at it from the other function.
My objective is to have a button within the dialog that calls a function onclick() and that function does a big pile of work on other properties within the dialog's DOM. I feel like it should be possible to achieve these this without using a bunch clunky global variables. Any thoughts out there on a cleaner implementation than what I've described?
Thanks,
- SK
I completely reworked the
I completely reworked the plugin dialog so that it exclusively uses element constructs in the dialog JSON. This is less than ideal because it dramatically reduces control over the appearance of the dialog's contents, however all the mechanics work because each element is an object that the dialog can access in the onOk() function, and editor is still accessible in there as well. While it is not what I was originally after, this solution is "fine for now" so that I can keep moving and perhaps come back to it later (if ever - you know how these things go).