UNPKG

@steroidsjs/ckeditor5

Version:

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

112 lines (98 loc) 2.68 kB
/** * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license */ /** * @module clipboard/datatransfer */ /** * A facade over the native [`DataTransfer`](https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer) object. */ export default class DataTransfer { constructor( nativeDataTransfer ) { /** * The array of files created from the native `DataTransfer#files` or `DataTransfer#items`. * * @readonly * @member {Array.<File>} #files */ this.files = getFiles( nativeDataTransfer ); /** * The native DataTransfer object. * * @private * @member {DataTransfer} #_native */ this._native = nativeDataTransfer; } /** * Returns an array of available native content types. * * @returns {Array.<String>} */ get types() { return this._native.types; } /** * Gets the data from the data transfer by its MIME type. * * dataTransfer.getData( 'text/plain' ); * * @param {String} type The MIME type. E.g. `text/html` or `text/plain`. * @returns {String} */ getData( type ) { return this._native.getData( type ); } /** * Sets the data in the data transfer. * * @param {String} type The MIME type. E.g. `text/html` or `text/plain`. * @param {String} data */ setData( type, data ) { this._native.setData( type, data ); } /** * The effect that is allowed for a drag operation. * * @param {String} value */ set effectAllowed( value ) { this._native.effectAllowed = value; } get effectAllowed() { return this._native.effectAllowed; } /** * The actual drop effect. * * @param {String} value */ set dropEffect( value ) { this._native.dropEffect = value; } get dropEffect() { return this._native.dropEffect; } /** * Whether the dragging operation was canceled. * * @returns {Boolean} */ get isCanceled() { return this._native.dropEffect == 'none' || !!this._native.mozUserCancelled; } } function getFiles( nativeDataTransfer ) { // DataTransfer.files and items are array-like and might not have an iterable interface. const files = nativeDataTransfer.files ? Array.from( nativeDataTransfer.files ) : []; const items = nativeDataTransfer.items ? Array.from( nativeDataTransfer.items ) : []; if ( files.length ) { return files; } // Chrome has empty DataTransfer.files, but allows getting files through the items interface. return items .filter( item => item.kind === 'file' ) .map( item => item.getAsFile() ); }