* This can return false to indicate that the completion of the action should
* NOT be communicated to parent UI elements, which is what occurs by default.
*/
- action: (context: EditorUiContext, button: EditorButton) => void|false;
+ action: (context: EditorUiContext, button: EditorButton) => void|false|Promise<void|boolean>;
isActive: (selection: BaseSelection|null, context: EditorUiContext) => boolean;
isDisabled?: (selection: BaseSelection|null, context: EditorUiContext) => boolean;
setup?: (context: EditorUiContext, button: EditorButton) => void;
protected onClick() {
const result = this.definition.action(this.getContext(), this);
- if (result !== false) {
+ if (result instanceof Promise) {
+ result.then(result => {
+ if (result === false) {
+ this.emitEvent('button-action');
+ }
+ });
+ } else if (result !== false) {
this.emitEvent('button-action');
}
}
if (!target) {
target = $createParagraphNode();
if (after) {
- node.insertAfter(target)
+ nearestBlock.insertAfter(target)
} else {
- node.insertBefore(target);
+ nearestBlock.insertBefore(target);
}
}