/*! * Jodit Editor (https://xdsoft.net/jodit/) * Released under MIT see LICENSE.txt in the project root for license information. * Copyright (c) 2013-2021 Valeriy Chupurnov. All rights reserved. https://xdsoft.net */ import type { IFileBrowserCallBackData, IJodit, IUploaderData } from '../../../types'; import { isFunction, $$, attr, val } from '../../../core/helpers'; import { Dom } from '../../../core/dom'; import { TabOption, TabsWidget } from '../tabs/tabs'; import { UIBlock, UIForm, UIInput, UIButton } from '../../../core/ui'; /** * Generate 3 tabs * upload - Use Drag and Drop * url - By specifying the image url * filebrowser - After opening the file browser . In the absence of one of the parameters will be less tabs * * @params {Object} callbacks Object with keys `url`, `upload` and `filebrowser`, values which are callback * functions with different parameters * @param {Function} callbacks.upload - function that will be called when the user selects a file or using drag * and drop files to the `Upload` tab * @param {Function} callbacks.url - function that will be called when the user enters the URL of the tab image * and alternative text for images * @param {Function} callbacks.filebrowser - function that will be called when the user clicks on the file browser * tab, and then choose any image in the window that opens, faylbrauzera * @params {HTMLNode} image image object * @example * ```javascript * let widget = new Jodit.modules.Widget(editor); * * return widget.c('ImageSelector', { * url: function (url, alt) { * editor.selections.insertImage(url); * }, * upload: function (images) { * editor.selections.insertImage(images[0]); * }, * filebrowser: function (images) { * editor.selections.insertImage(images[0]); * } * }, image); * ``` */ interface ImageSelectorCallbacks { url?: (this: IJodit, url: string, alt: string) => void; filebrowser?: (data: IFileBrowserCallBackData) => void; upload?: ((this: IJodit, data: IFileBrowserCallBackData) => void) | true; } /** * * @param {Jodit} editor * @param {Widget.ImageSelectorCallbacks} callbacks * @param {HTMLElement} elm * @param {Function} close Close popup * @param {boolean} isImage * @return {HTMLDivElement} * @constructor */ export const FileSelectorWidget = ( editor: IJodit, callbacks: ImageSelectorCallbacks, elm: HTMLElement | null, close: () => void, isImage: boolean = true ): HTMLDivElement => { let currentImage: any; const tabs: TabOption[] = []; if ( callbacks.upload && editor.o.uploader && (editor.o.uploader.url || editor.o.uploader.insertImageAsBase64URI) ) { const dragBox = editor.c.fromHTML( '