UNPKG

ckeditor5-image-upload-base64

Version:

The development environment of CKEditor 5 – the best browser-based rich text editor.

64 lines (53 loc) 1.88 kB
/** * @license Copyright (c) 2003-2020, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @module image/imageupload/imageuploadui */ import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; import FileDialogButtonView from '@ckeditor/ckeditor5-upload/src/ui/filedialogbuttonview'; import imageIcon from '@ckeditor/ckeditor5-core/theme/icons/image.svg'; import { createImageTypeRegExp } from './utils'; /** * The image upload button plugin. * * For a detailed overview, check the {@glink features/image-upload/image-upload Image upload feature} documentation. * * Adds the `'imageUpload'` button to the {@link module:ui/componentfactory~ComponentFactory UI component factory}. * * @extends module:core/plugin~Plugin */ export default class ImageUploadUI extends Plugin { /** * @inheritDoc */ init() { const editor = this.editor; const t = editor.t; // Setup `imageUpload` button. editor.ui.componentFactory.add( 'imageUpload', locale => { const view = new FileDialogButtonView( locale ); const command = editor.commands.get( 'imageUpload' ); const imageTypes = editor.config.get( 'image.upload.types' ); const imageTypesRegExp = createImageTypeRegExp( imageTypes ); view.set( { acceptedType: imageTypes.map( type => `image/${ type }` ).join( ',' ), allowMultipleFiles: true } ); view.buttonView.set( { label: t( 'Insert image' ), icon: imageIcon, tooltip: true } ); view.buttonView.bind( 'isEnabled' ).to( command ); view.on( 'done', ( evt, files ) => { const imagesToUpload = Array.from( files ).filter( file => imageTypesRegExp.test( file.type ) ); if ( imagesToUpload.length ) { editor.execute( 'imageUpload', { file: imagesToUpload } ); } } ); return view; } ); } }