UNPKG

suneditor

Version:

Vanilla JavaScript based WYSIWYG web editor

912 lines (842 loc) 35.1 kB
// Event function collection // This is a collection of functions that can be used in the editor's event callback. // --------- // --- native events /** * @typedef {Object} BaseEvent * @property {SunEditor.Deps} $ - Kernel dependencies * @property {SunEditor.FrameContext} frameContext - frame context * @property {Event} event - event object */ /** * @typedef {Object} ClipboardEvent * @property {SunEditor.Deps} $ - Kernel dependencies * @property {SunEditor.FrameContext} frameContext - frame context * @property {Event} event - event object * @property {string} data - drop data * @property {boolean} maxCharCount - is max char count * @property {string} from - `"SE"`|`"MS"`|`""` - source */ // --- media /** * @typedef {Object} FileManagementInfo * @property {string} src - source URL of the image. * @property {number} index - index of the image. * @property {string} name - name of the file. * @property {number} size - size of the file in bytes. * @property {HTMLElement} element - target element. * @property {() => void} delete - delete function. * @property {() => void} select - select function. */ /** * @typedef {Object} ProcessInfo * @property {string} origin - origin url * @property {string} url - url * @property {"video"|"iframe"} tag - tag name * @property {?HTMLCollection} children - embed children tags */ // --- image /** * @typedef {Object} ImageInfo * @property {FileList} files - FileList object * @property {HTMLImageElement} element - target element * @property {string} inputWidth - width value * @property {string} inputHeight - height value * @property {string} align - align value * @property {boolean} isUpdate - new create or update * @property {?HTMLElement} anchor - Anchor element, if it exists * @property {string} alt - alt text value */ // --- video /** * @typedef {Object} VideoInfo * @property {FileList} files - FileList object * @property {HTMLIFrameElement|HTMLVideoElement} element - target element * @property {string} inputWidth - width value * @property {string} inputHeight - height value * @property {string} align - align value * @property {boolean} isUpdate - new create or update * @property {string} url - video url * @property {?ProcessInfo} process - video process info */ // --- audio /** * @typedef {Object} AudioInfo * @property {HTMLAudioElement} element - target element * @property {FileList} files - FileList object * @property {boolean} isUpdate - new create or update */ // --- file /** * @typedef {Object} FileInfo * @property {string} url - file url * @property {FileList} files - FileList object * @property {Object} uploadHeaders - upload headers */ // --- embed /** * @typedef {Object} EmbedInfo * @property {HTMLElement} element - target element * @property {string} inputWidth - width value * @property {string} inputHeight - height value * @property {string} align - align value * @property {boolean} isUpdate - new create or update * @property {string} url - embed url * @property {?HTMLElement} children - When the input source is stacked in an `iframe`, etc., the actual embedded DOM * @property {?ProcessInfo} process - embed process info */ // ----------------- [handlers] --------------------------------------------------------------------------------------- /** * @callback * @description Fired when the editor has completed full initialization. * This event is deferred via `setTimeout` to ensure all DOM layout calculations are complete, * toolbar is visible, `ResizeObserver` is registered, and history stack is initialized. * Use this event to safely call editor methods immediately after creation. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies */ function onload(params) {} /** * @callback * @description Fired when the editor content area is scrolled. * Use this to sync UI elements with scroll position or implement custom scroll behaviors. * @param {BaseEvent} params */ function onScroll(params) {} /** * @callback * @description Fired when the user presses a mouse button down in the editor. * Triggered before internal `mousedown` processing. * Return `false` to prevent the default editor behavior. * @param {BaseEvent} params */ function onMouseDown(params) {} /** * @callback * @description Fired when the user clicks in the editor. * Triggered before component selection and default `line` creation. * Return `false` to prevent the default editor behavior. * @param {BaseEvent} params */ function onClick(params) {} /** * @callback * @description Fired before text input is inserted into the editor. * Triggered after character count validation. * Return `false` to prevent the input from being processed. * @param {BaseEvent & {data: string}} params */ function onBeforeInput(params) {} /** * @callback * @description Fired when text content is input into the editor (typing, composition, paste). * Triggered after default `line` creation and selection initialization. * Return `false` to prevent history push. * @param {BaseEvent & {data: string}} params */ function onInput(params) {} /** * @callback * @description Fired when the mouse cursor leaves the editor area. * Return `false` to prevent the default editor behavior. * @param {BaseEvent} params */ function onMouseLeave(params) {} /** * @callback * @description Fired when the user releases a mouse button in the editor. * Triggered after internal selection updates. * Return `false` to prevent the default editor behavior. * @param {BaseEvent} params */ function onMouseUp(params) {} /** * @callback * @description Fired when a key is pressed down in the editor. * Triggered before shortcut command execution and `keydown` reducers. * Return `false` to prevent the default editor behavior including shortcuts, actions, and text input. * @param {BaseEvent} params */ function onKeyDown(params) {} /** * @callback * @description Fired when a key is released in the editor. * Triggered after format tag cleanup and zero-width character removal. * Return `false` to prevent history push for history-relevant keys. * @param {BaseEvent} params */ function onKeyUp(params) {} /** * @callback * @description Fired when the editor gains focus (managed focus via `editor.focusManager.focus()`). * Triggered after toolbar display updates and status flags are set. * This is different from `onNativeFocus` which fires on native DOM `focus` events. * @param {BaseEvent} params */ function onFocus(params) {} /** * @callback * @description Fired when the editor receives a native DOM `focus` event. * Triggered before managed focus processing. * This is the raw browser `focus` event, use `onFocus` for managed focus handling. * @param {BaseEvent} params */ function onNativeFocus(params) {} /** * @callback * @description Fired when the editor loses focus (managed blur via `editor.blur()`). * Triggered after balloon toolbar is hidden and status flags are updated. * This is different from `onNativeBlur` which fires on native DOM `blur` events. * @param {BaseEvent} params */ function onBlur(params) {} /** * @callback * @description Fired when the editor receives a native DOM `blur` event. * Triggered before managed blur processing. * This is the raw browser `blur` event, use `onBlur` for managed blur handling. * @param {BaseEvent} params */ function onNativeBlur(params) {} /** * @callback * @description Fired when the user attempts to copy content from the editor. * Triggered before copying to clipboard. * Return `false` to prevent the copy operation. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {Event} params.event - event object * @param {Event} params.clipboardData - `clipboardData` */ function onCopy(params) {} /** * @callback * @description Fired when the user attempts to cut content from the editor. * Triggered before cutting to clipboard. * Return `false` to prevent the cut operation and history push. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {Event} params.event - event object * @param {Event} params.clipboardData - `clipboardData` */ function onCut(params) {} /** * @callback * @description Fired when the editor content has changed. * Triggered after history stack updates, undo/redo operations, and user edits. * Use this to sync external state or validate content. * The `data` parameter contains the current HTML content. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {string} params.data - editor HTML content */ function onChange(params) {} /** * @callback * @description Fired when a toolbar becomes visible. * Triggered for balloon mode and inline mode toolbars. * The `mode` parameter indicates the toolbar type (`balloon` or `inline`). * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.toolbar - Toolbar element * @param {string} params.mode - Toolbar mode * @param {SunEditor.FrameContext} params.frameContext - frame context */ function onShowToolbar(params) {} /** * @callback * @description Fired after a component controller (floating toolbar) is displayed. * Triggered when components (images, videos, tables) are selected. * The `caller` parameter indicates which plugin triggered the controller. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {string} params.caller - caller plugin name * @param {SunEditor.Module.Controller.Info} params.info - info object */ function onShowController(params) {} /** * @callback * @description Fired before a component controller (floating toolbar) is displayed. * Triggered when components (images, videos, tables) are about to be selected. * Return `false` to prevent the controller from showing. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {string} params.caller - caller plugin name * @param {SunEditor.Module.Controller.Info} params.info - info object */ function onBeforeShowController(params) {} /** * @callback * @description Fired when the editor switches between WYSIWYG view and code view. * The `is` parameter indicates whether code view is now active (`true`) or WYSIWYG view is active (`false`). * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {boolean} params.is - code view status */ function onToggleCodeView(params) {} /** * @callback * @description Fired when the editor switches between WYSIWYG view and markdown view. * The `is` parameter indicates whether markdown view is now active (`true`) or WYSIWYG view is active (`false`). * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {boolean} params.is - markdown view status */ function onToggleMarkdownView(params) {} /** * @callback * @description Fired when the editor enters or exits fullscreen mode. * The `is` parameter indicates whether fullscreen mode is now active (`true`) or normal mode is active (`false`). * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {boolean} params.is - full screen status */ function onToggleFullScreen(params) {} /** * @callback * @description Fired when the editor's wysiwyg area height changes. * Triggered by `ResizeObserver`. * Use this to sync external UI elements or implement custom resize behaviors. * Parameters include current height, previous height, and the `ResizeObserverEntry`. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {number} params.height - wysiwyg area frame height * @param {boolean} params.prevHeight - wysiwyg area previous height * @param {ResizeObserverEntry} params.observerEntry - ResizeObserverEntry */ function onResizeEditor(params) {} /** * @callback * @description Fired after toolbar buttons are created and rendered. * Triggered during toolbar initialization and `resetToolbarButtons()`. * Use this to customize toolbar DOM or add custom elements to the `buttonTray`. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {HTMLElement} params.buttonTray - button tray element */ function onSetToolbarButtons(params) {} /** * @callback * @description Fired when the save command is executed (Ctrl+S or save button). * Use this to send editor content to a server or perform custom save logic. * Return a Promise resolving to `false` to prevent the save operation from completing. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {SunEditor.FrameContext} params.frameContext - frame context * @param {Event} params.data - editor data * @returns {PromiseLike<boolean>} */ function onSave(params) { return; } /** * @callback * @description Fired when toolbar button states are reset. * Triggered during undo/redo operations and history navigation. * Use this to update custom toolbar buttons or external UI state. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.rootKey - frame key */ function onResetButtons(params) {} /** * @callback * @description Fired before a font family change is applied to the selection. * Triggered by font dropdown selection. * Return a Promise resolving to `false` to cancel the font change operation. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.value - font value * @returns {PromiseLike<boolean | void>} */ function onFontActionBefore(params) { return; } /** * @callback * @description Fired when the user attempts to drop content into the editor. * Triggered after HTML cleaning and character count validation. * Return `false` to cancel drop, or return a string to replace the drop data. * @param {ClipboardEvent} params * @returns {PromiseLike<boolean | string>} */ function onDrop(params) { return; } /** * @callback * @description Fired when the user attempts to paste content into the editor. * Triggered after HTML cleaning and character count validation. * Return `false` to cancel paste, or return a string to replace the paste data. * @param {ClipboardEvent} params * @returns {PromiseLike<boolean | string | void>} */ function onPaste(params) { return; } /** * @callback * @description Custom handler for image upload requests. * Fired after the `XMLHttpRequest` is sent but before default response processing. * Return a Promise resolving to `true` if you handle the upload response yourself, * or `false` to use default processing. The `xmlHttp` parameter provides access to the `XMLHttpRequest` object. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {XMLHttpRequest} params.xmlHttp - XMLHttpRequest * @param {ImageInfo} params.info - info object * @returns {PromiseLike<boolean | void>} */ function imageUploadHandler(params) { return; } /** * @callback * @description Fired before an image is uploaded to the server. * Use this to validate, resize, or modify image data before upload. * Return `false` to cancel upload, return an `ImageInfo` object to modify the upload data, * or call the `handler` parameter to proceed with modified data. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {ImageInfo} params.info - info object * @param {(newInfo?: ImageInfo | null) => void} params.handler - handler function * @returns {PromiseLike<boolean | ImageInfo | void>} */ function onImageUploadBefore(params) { return; } /** * @callback * @description Fired after images are successfully loaded into the editor. * Triggered after upload completion or URL-based image insertion. * The `infoList` parameter contains an array of `FileManagementInfo` objects for all loaded images. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {Array<FileManagementInfo>} params.infoList - info list */ function onImageLoad(params) {} /** * @callback * @description Fired when an image is created, updated, or deleted in the editor. * The `state` parameter indicates the action type (`create`, `update`, or `delete`). * Use this to sync image state with external systems or track image modifications. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileManagementInfo} params.info - info object * @param {HTMLElement | null} params.element - target element * @param {"create" | "update" | "delete"} params.state - state * @param {number} params.index - data index * @param {number} params.remainingFilesCount - remaining files count * @param {string} params.pluginName - plugin name */ function onImageAction(params) {} /** * @callback * @description Fired when an image upload fails due to size limits, server errors, or other issues. * Return a Promise resolving to a custom error message string to override the default error message, * or `undefined` to use the default message. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.error - error message * @param {number} [params.limitSize] - limit size * @param {number} [params.uploadSize] - upload size * @param {number} [params.currentSize] - current size * @param {File} [params.file] - File object * @returns {PromiseLike<string | void>} */ function onImageUploadError(params) { return; } /** * @callback * @description Fired before an image is deleted from the editor. * Use this to confirm deletion, notify server, or perform cleanup. * Return a Promise resolving to `false` to prevent the image from being deleted. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.element - target element * @param {HTMLElement} params.container - target's container element (div) * @param {string} params.align - align value * @param {string} params.alt - alt text value * @param {?string} params.url - Anchor url, if it exists * @returns {PromiseLike<boolean>} */ function onImageDeleteBefore(params) { return; } /** * @callback * @description Custom handler for video upload requests. * Fired after the `XMLHttpRequest` is sent but before default response processing. * Return a Promise resolving to `true` if you handle the upload response yourself, * or `false` to use default processing. * The `xmlHttp` parameter provides access to the `XMLHttpRequest` object. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {XMLHttpRequest} params.xmlHttp - XMLHttpRequest * @param {VideoInfo} params.info - info object * @returns {PromiseLike<boolean>} */ function videoUploadHandler(params) { return; } /** * @callback * @description Fired before a video is uploaded to the server. * Use this to validate, transcode, or modify video data before upload. * Return `false` to cancel upload, return a `VideoInfo` object to modify the upload data, * or call the `handler` parameter to proceed with modified data. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {VideoInfo} params.info - info object * @param {(newInfo?: VideoInfo | null) => void} params.handler - handler function * @returns {PromiseLike<boolean | VideoInfo | void>} */ function onVideoUploadBefore(params) { return; } /** * @callback * @description Fired after videos are successfully loaded into the editor. * Triggered after upload completion or URL-based video insertion (iframe/video tag). * The `infoList` parameter contains an array of `FileManagementInfo` objects for all loaded videos. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {Array<FileManagementInfo>} params.infoList - info list */ function onVideoLoad(params) {} /** * @callback * @description Fired when a video is created, updated, or deleted in the editor. * The `state` parameter indicates the action type (`create`, `update`, or `delete`). * Use this to sync video state with external systems or track video modifications. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileManagementInfo} params.info - info object * @param {HTMLElement | null} params.element - target element * @param {"create" | "update" | "delete"} params.state - state * @param {number} params.index - data index * @param {number} params.remainingFilesCount - remaining files count * @param {string} params.pluginName - plugin name */ function onVideoAction(params) {} /** * @callback * @description Fired when a video upload fails due to size limits, server errors, or other issues. * Return a Promise resolving to a custom error message string to override the default error message, * or `undefined` to use the default message. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.error - error message * @param {number} [params.limitSize] - limit size * @param {number} [params.uploadSize] - upload size * @param {number} [params.currentSize] - current size * @param {File} [params.file] - File object * @returns {PromiseLike<string | void>} */ function onVideoUploadError(params) { return; } /** * @callback * @description Fired before a video is deleted from the editor. * Use this to confirm deletion, notify server, or perform cleanup. * Return a Promise resolving to `false` to prevent the video from being deleted. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.element - target element * @param {HTMLElement} params.container - target's container element (div) * @param {string} params.align - align value * @param {string} params.url - video url * @returns {PromiseLike<boolean>} */ function onVideoDeleteBefore(params) { return; } /** * @callback * @description Custom handler for audio upload requests. * Fired after the `XMLHttpRequest` is sent but before default response processing. * Return a Promise resolving to `true` if you handle the upload response yourself, * or `false` to use default processing. * The `xmlHttp` parameter provides access to the `XMLHttpRequest` object. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {XMLHttpRequest} params.xmlHttp - XMLHttpRequest * @param {AudioInfo} params.info - info object * @returns {PromiseLike<boolean>} */ function audioUploadHandler(params) { return; } /** * @callback * @description Fired before an audio file is uploaded to the server. * Use this to validate, transcode, or modify audio data before upload. * Return `false` to cancel upload, return an `AudioInfo` object to modify the upload data, * or call the `handler` parameter to proceed with modified data. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {AudioInfo} params.info - info object * @param {(newInfo?: AudioInfo | null) => void} params.handler - handler function * @returns {PromiseLike<boolean | AudioInfo| void>} */ function onAudioUploadBefore(params) { return; } /** * @callback * @description Fired when an audio upload fails due to size limits, server errors, or other issues. * Return a Promise resolving to a custom error message string to override the default error message, * or `undefined` to use the default message. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.error - error message * @param {number} [params.limitSize] - limit size * @param {number} [params.uploadSize] - upload size * @param {number} [params.currentSize] - current size * @param {File} [params.file] - File object * @returns {PromiseLike<string | void>} */ function onAudioUploadError(params) { return; } /** * @callback * @description Fired after audio files are successfully loaded into the editor. * Triggered after upload completion or URL-based audio insertion. * The `infoList` parameter contains an array of `FileManagementInfo` objects for all loaded audio files. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {Array<FileManagementInfo>} params.infoList - info list */ function onAudioLoad(params) {} /** * @callback * @description Fired when an audio element is created, updated, or deleted in the editor. * The `state` parameter indicates the action type (`create`, `update`, or `delete`). * Use this to sync audio state with external systems or track audio modifications. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileManagementInfo} params.info - info object * @param {HTMLElement | null} params.element - target element * @param {"create" | "update" | "delete"} params.state - state * @param {number} params.index - data index * @param {number} params.remainingFilesCount - remaining files count * @param {string} params.pluginName - plugin name */ function onAudioAction(params) {} /** * @callback * @description Fired before an audio element is deleted from the editor. * Use this to confirm deletion, notify server, or perform cleanup. * Return a Promise resolving to `false` to prevent the audio from being deleted. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.element - target element * @param {HTMLElement} params.container - target's container element (div) * @param {string} params.url - audio url * @returns {PromiseLike<boolean>} */ function onAudioDeleteBefore(params) { return; } /** * @callback * @description Fired before a file is uploaded to the server (via `fileUpload` plugin). * Use this to validate or modify file data before upload. * Return `false` to cancel upload, return a `FileInfo` object to modify the upload data, * or call the `handler` parameter to proceed with modified data. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileInfo} params.info - info object * @param {(newInfo?: FileInfo | null) => void} params.handler - handler function * @returns {PromiseLike<boolean | FileInfo | void>} */ function onFileUploadBefore(params) { return; } /** * @callback * @description Fired after files are successfully uploaded and loaded into the editor. * Triggered by the `fileUpload` plugin after upload completion. * The `infoList` parameter contains an array of `FileManagementInfo` objects for all loaded files. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {Array<FileManagementInfo>} params.infoList - info list */ function onFileLoad(params) {} /** * @callback * @description Fired when a file link is created, updated, or deleted in the editor. * The `state` parameter indicates the action type (`create`, `update`, or `delete`). * Use this to sync file state with external systems or track file modifications. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileManagementInfo} params.info - info object * @param {HTMLElement | null} params.element - target element * @param {"create" | "update" | "delete"} params.state - state * @param {number} params.index - data index * @param {number} params.remainingFilesCount - remaining files count * @param {string} params.pluginName - plugin name */ function onFileAction(params) {} /** * @callback * @description Fired when a file upload fails due to size limits, server errors, or other issues. * Return a Promise resolving to a custom error message string to override the default error message, * or `undefined` to use the default message. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {string} params.error - error message * @param {number} [params.limitSize] - limit size * @param {number} [params.uploadSize] - upload size * @param {number} [params.currentSize] - current size * @param {File} [params.file] - File object * @returns {PromiseLike<string | void>} */ function onFileUploadError(params) { return; } /** * @callback * @description Fired before a file link is deleted from the editor. * Use this to confirm deletion, notify server, or perform cleanup. * Return a Promise resolving to `false` to prevent the file link from being deleted. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.element - target element * @param {HTMLElement} params.container - target's container element (div) * @param {string} params.url - file url * @returns {PromiseLike<boolean>} */ function onFileDeleteBefore(params) { return; } /** * @callback * @description Fired before the editor content is exported to PDF. * Use this to modify content, add metadata, or cancel the export. * Return a Promise resolving to `false` to prevent the PDF export. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.target - wysiwyg editable element * @returns {PromiseLike<boolean>} */ function onExportPDFBefore(params) { return; } /** * @callback * @description Fired when any media element (image, video, audio, file) is created, updated, or deleted. * This is a unified event that triggers for all media types. * The `pluginName` parameter indicates which plugin triggered the action (`image`, `video`, `audio`, or `file`). * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {FileManagementInfo} params.info - info object * @param {HTMLElement | null} params.element - target element * @param {"create" | "update" | "delete"} params.state - state * @param {number} params.index - data index * @param {number} params.remainingFilesCount - remaining files count * @param {string} params.pluginName - plugin name */ function onFileManagerAction(params) {} /** * @callback * @description Fired before an embed URL is processed and inserted into the editor. * Use this to validate URLs, add custom embed processors, or modify embed parameters. * Return `false` to cancel insertion, return an `EmbedInfo` object to modify the embed data, * or call the `handler` parameter to proceed with modified data. * @param {EmbedInfo & {$: SunEditor.Deps, handler: (newInfo?: EmbedInfo | null) => void}} params * @returns {PromiseLike<boolean | EmbedInfo | void>} */ function onEmbedInputBefore(params) { return; } /** * @callback * @description Fired before an embedded element (iframe, custom embed) is deleted from the editor. * Use this to confirm deletion or perform cleanup. * Return a Promise resolving to `false` to prevent the embed from being deleted. * @param {Object} params * @param {SunEditor.Deps} params.$ - Kernel dependencies * @param {HTMLElement} params.element - target element * @param {HTMLElement} params.container - target's container element (div) * @param {string} params.align - align value * @param {string} params.url - embed url * @returns {PromiseLike<boolean>} */ function onEmbedDeleteBefore(params) { return; } // ------------------------------------------------ Exports ------------------------------------------------ /** * @typedef {Object} EventHandlers * @property {?onload} [onload] * @property {?onScroll} [onScroll] * @property {?onMouseDown} [onMouseDown] * @property {?onClick} [onClick] * @property {?onBeforeInput} [onBeforeInput] * @property {?onInput} [onInput] * @property {?onMouseLeave} [onMouseLeave] * @property {?onMouseUp} [onMouseUp] * @property {?onKeyDown} [onKeyDown] * @property {?onKeyUp} [onKeyUp] * @property {?onFocus} [onFocus] * @property {?onNativeFocus} [onNativeFocus] * @property {?onBlur} [onBlur] * @property {?onNativeBlur} [onNativeBlur] * @property {?onCopy} [onCopy] * @property {?onCut} [onCut] * @property {?onChange} [onChange] * @property {?onShowToolbar} [onShowToolbar] * @property {?onShowController} [onShowController] * @property {?onBeforeShowController} [onBeforeShowController] * @property {?onToggleCodeView} [onToggleCodeView] * @property {?onToggleMarkdownView} [onToggleMarkdownView] * @property {?onToggleFullScreen} [onToggleFullScreen] * @property {?onResizeEditor} [onResizeEditor] * @property {?onSetToolbarButtons} [onSetToolbarButtons] * @property {?onSave} [onSave] * @property {?onResetButtons} [onResetButtons] * @property {?onFontActionBefore} [onFontActionBefore] * @property {?onDrop} [onDrop] * @property {?onPaste} [onPaste] * @property {?imageUploadHandler} [imageUploadHandler] * @property {?onImageUploadBefore} [onImageUploadBefore] * @property {?onImageLoad} [onImageLoad] * @property {?onImageAction} [onImageAction] * @property {?onImageUploadError} [onImageUploadError] * @property {?onImageDeleteBefore} [onImageDeleteBefore] * @property {?videoUploadHandler} [videoUploadHandler] * @property {?onVideoUploadBefore} [onVideoUploadBefore] * @property {?onVideoLoad} [onVideoLoad] * @property {?onVideoAction} [onVideoAction] * @property {?onVideoUploadError} [onVideoUploadError] * @property {?onVideoDeleteBefore} [onVideoDeleteBefore] * @property {?audioUploadHandler} [audioUploadHandler] * @property {?onAudioUploadBefore} [onAudioUploadBefore] * @property {?onAudioUploadError} [onAudioUploadError] * @property {?onAudioLoad} [onAudioLoad] * @property {?onAudioAction} [onAudioAction] * @property {?onAudioDeleteBefore} [onAudioDeleteBefore] * @property {?onFileUploadBefore} [onFileUploadBefore] * @property {?onFileLoad} [onFileLoad] * @property {?onFileAction} [onFileAction] * @property {?onFileUploadError} [onFileUploadError] * @property {?onFileDeleteBefore} [onFileDeleteBefore] * @property {?onExportPDFBefore} [onExportPDFBefore] * @property {?onFileManagerAction} [onFileManagerAction] * @property {?onEmbedInputBefore} [onEmbedInputBefore] * @property {?onEmbedDeleteBefore} [onEmbedDeleteBefore] */ export {};