import Block from './index'; import { BlockToolData, ToolConfig } from '../../../types/tools'; import { SavedData } from '../../../types/data-formats'; import { BlockAPI as BlockAPIInterface } from '../../../types/api'; /** * Constructs new BlockAPI object * * @class * @param {Block} block - Block to expose */ function BlockAPI( block: Block ): void { const blockAPI: BlockAPIInterface = { /** * Block id * * @returns {string} */ get id(): string { return block.id; }, /** * Tool name * * @returns {string} */ get name(): string { return block.name; }, /** * Tool config passed on Editor's initialization * * @returns {ToolConfig} */ get config(): ToolConfig { return block.config; }, /** * .ce-block element, that wraps plugin contents * * @returns {HTMLElement} */ get holder(): HTMLElement { return block.holder; }, /** * True if Block content is empty * * @returns {boolean} */ get isEmpty(): boolean { return block.isEmpty; }, /** * True if Block is selected with Cross-Block selection * * @returns {boolean} */ get selected(): boolean { return block.selected; }, /** * Set Block's stretch state * * @param {boolean} state — state to set */ set stretched(state: boolean) { block.stretched = state; }, /** * True if Block is stretched * * @returns {boolean} */ get stretched(): boolean { return block.stretched; }, /** * Call Tool method with errors handler under-the-hood * * @param {string} methodName - method to call * @param {object} param - object with parameters * @returns {unknown} */ call(methodName: string, param?: object): unknown { return block.call(methodName, param); }, /** * Save Block content * * @returns {Promise} */ save(): Promise { return block.save(); }, /** * Validate Block data * * @param {BlockToolData} data - data to validate * @returns {Promise} */ validate(data: BlockToolData): Promise { return block.validate(data); }, /** * Allows to say Editor that Block was changed. Used to manually trigger Editor's 'onChange' callback * Can be useful for block changes invisible for editor core. */ dispatchChange(): void { block.dispatchChange(); }, }; Object.setPrototypeOf(this, blockAPI); } export default BlockAPI;