suneditor
Version:
Vanilla JavaScript based WYSIWYG web editor
185 lines (184 loc) • 5.61 kB
TypeScript
import type {} from '../typedef';
/**
* @fileoverview Contract interfaces for SunEditor plugins.
* These interfaces define callback methods that modules and editor core call on plugin instances.
* Use `@implements` to get type hints for these hooks in your plugin.
*/
/**
* Modal plugin hook methods interface.
* `modalAction` is required, other methods are optional.
* @interface
*/
export interface ModuleModal {
/**
* @abstract
* This function is called when a form within a modal window is `submit`.
* @returns {Promise<boolean>}
* - `true`: modal and loading are closed
* - `false`: only loading is closed
* - `undefined`: only modal is closed
*/
modalAction(): Promise<boolean>;
/**
* @optional
* Executes the method that is called when a plugin's modal is opened.
* @param {boolean} isUpdate - Whether the modal is for editing (`true`) or creating a new one (`false`).
* @returns {void}
*/
modalOn?(isUpdate: boolean): void;
/**
* @optional
* This function is called before the modal window opens or closes.
* @returns {void}
*/
modalInit?(): void;
/**
* @optional
* Modal off callback.
* @param {boolean} isUpdate - Whether the modal is for editing (`true`) or creating a new one (`false`).
* @returns {void}
*/
modalOff?(isUpdate: boolean): void;
/**
* @optional
* Modal resize callback (optional).
* @returns {void}
*/
modalResize?(): void;
}
/**
* Controller plugin hook methods interface.
* `controllerAction` is required, other methods are optional.
* @interface
*/
export interface ModuleController {
/**
* @abstract
* Executes the method that is called when a button is clicked in the `controller`.
* @param {HTMLButtonElement} target Action button element
* @returns {void}
*/
controllerAction(target: HTMLButtonElement): void;
/**
* @optional
* This function is called after the `controller` is opened.
* @param {HTMLFormElement} form Controller form element
* @param {Node|Range} target Controller target element
* @returns {void}
*/
controllerOn?(form: HTMLFormElement, target: Node | Range): void;
/**
* @optional
* This function is called before the `controller` is closed.
* @returns {void}
*/
controllerClose?(): void;
}
/**
* Browser plugin hook methods interface.
* All methods are optional - implement only what you need.
* @interface
*/
export interface ModuleBrowser {
/**
* @optional
* Executes the method that is called when a `Browser` module is opened.
* @returns {void}
*/
browserInit?(): void;
}
/**
* ColorPicker plugin hook methods interface.
* All methods are optional - implement only what you need.
* @interface
*/
export interface ModuleColorPicker {
/**
* @optional
* Executes the method called when a button of `ColorPicker` module is clicked.
* - When applying the `ColorPicker` module globally to the `dropdown` menu,
* - the default `action` method is not called.
* @param {SunEditor.Module.HueSlider.Color} color - Selected color information
* @returns {void}
*/
colorPickerAction?(color: SunEditor.Module.HueSlider.Color): void;
/**
* @optional
* Executes the method called when the `HueSlider` module is opened.
* @returns {void}
*/
colorPickerHueSliderOpen?(): void;
/**
* @optional
* Executes the method called when the `HueSlider` module is closed.
* @returns {void}
*/
colorPickerHueSliderClose?(): void;
}
/**
* HueSlider plugin hook methods interface.
* All methods are optional - implement only what you need.
* @interface
*/
export interface ModuleHueSlider {
/**
* @abstract
* This method is called when the color is selected in the hue slider.
* @returns {void}
*/
hueSliderAction(): void;
/**
* @optional
* This method is called when the hue slider is closed.
* @returns {void}
*/
hueSliderCancelAction?(): void;
}
/**
* Component plugin hook methods interface.
* `componentSelect` is required, other methods are optional.
*
* **`inst._element` Requirement:**
* Plugins with `static component` method must define a public `_element` property
* that references the currently controlled DOM element.
* - Used to detect clicks on the target element and prevent accidental `controller` closure.
*
* @interface
*/
export interface EditorComponent {
/**
* @abstract
* Executes the method that is called when a component of a plugin is selected.
* @param {HTMLElement} target - Target component element
* @returns {void|boolean} - If return `true`, Special components that are not wrapping as `figure`
*/
componentSelect(target: HTMLElement): void | boolean;
/**
* @optional
* Called when a container is deselected.
* @param {HTMLElement} target - Target element
* @returns {void}
*/
componentDeselect?(target: HTMLElement): void;
/**
* @optional
* Executes the method that is called when a component is being edited.
* @param {HTMLElement} target - Target element
* @returns {void}
*/
componentEdit?(target: HTMLElement): void;
/**
* @optional
* Method to delete a component of a plugin, called by the `FileManager`, `Controller` module.
* @param {HTMLElement} target - Target element
* @returns {Promise<void>}
*/
componentDestroy?(target: HTMLElement): Promise<void>;
/**
* @optional
* Executes the method that is called when a component copy is requested.
* @param {SunEditor.HookParams.CopyComponent} params - Copy component event information
* @returns {boolean|void} - If return `false`, the copy will be canceled
*/
componentCopy?(params: SunEditor.HookParams.CopyComponent): boolean | void;
}