| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /**
- * @license Copyright (c) 2003-2019, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
- */
- /**
- * @module upload/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();
- }
- }
|