UNPKG

ckeditor5-image-upload-base64

Version:

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

109 lines (95 loc) 2.54 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 upload/adapters/base64uploadadapter */ /* globals window */ import Plugin from '@ckeditor/ckeditor5-core/src/plugin'; import FileRepository from '../filerepository'; /** * A plugin that converts images inserted into the editor into [Base64 strings](https://en.wikipedia.org/wiki/Base64) * in the {@glink builds/guides/integration/saving-data editor output}. * * This kind of image upload does not require server processing – images are stored with the rest of the text and * displayed by the web browser without additional requests. * * Check out the {@glink features/image-upload/image-upload comprehensive "Image upload overview"} to learn about * other ways to upload images into CKEditor 5. * * @extends module:core/plugin~Plugin */ export default class Base64UploadAdapter extends Plugin { /** * @inheritDoc */ static get requires() { return [ FileRepository ]; } /** * @inheritDoc */ static get pluginName() { return 'Base64UploadAdapter'; } /** * @inheritDoc */ init() { this.editor.plugins.get( FileRepository ).createUploadAdapter = loader => new Adapter( loader ); } } /** * The upload adapter that converts images inserted into the editor into Base64 strings. * * @private * @implements module:upload/filerepository~UploadAdapter */ class Adapter { /** * Creates a new adapter instance. * * @param {module:upload/filerepository~FileLoader} loader */ constructor( loader ) { /** * `FileLoader` instance to use during the upload. * * @member {module:upload/filerepository~FileLoader} #loader */ this.loader = loader; } /** * Starts the upload process. * * @see module:upload/filerepository~UploadAdapter#upload * @returns {Promise} */ upload() { return new Promise( ( resolve, reject ) => { const reader = this.reader = new window.FileReader(); reader.addEventListener( 'load', () => { resolve( { default: reader.result } ); } ); reader.addEventListener( 'error', err => { reject( err ); } ); reader.addEventListener( 'abort', () => { reject(); } ); this.loader.file.then( file => { reader.readAsDataURL( file ); } ); } ); } /** * Aborts the upload process. * * @see module:upload/filerepository~UploadAdapter#abort * @returns {Promise} */ abort() { this.reader.abort(); } }