Bläddra i källkod

Pass DOMStringList through Array.from() to be safe onf Edge.

Piotrek Koszuliński 8 år sedan
förälder
incheckning
bb31f4e219

+ 1 - 1
packages/ckeditor5-upload/src/imageuploadengine.js

@@ -206,5 +206,5 @@ export default class ImageUploadEngine extends Plugin {
 // @param {module:clipboard/datatransfer~DataTransfer} dataTransfer
 // @returns {Boolean}
 export function isHtmlIncluded( dataTransfer ) {
-	return dataTransfer.types.indexOf( 'text/html' ) > -1 && dataTransfer.getData( 'text/html' ) !== '';
+	return Array.from( dataTransfer.types ).includes( 'text/html' ) && dataTransfer.getData( 'text/html' ) !== '';
 }

+ 22 - 0
packages/ckeditor5-upload/tests/imageuploadengine.js

@@ -173,6 +173,28 @@ describe( 'ImageUploadEngine', () => {
 		sinon.assert.notCalled( spy );
 	} );
 
+	// https://github.com/ckeditor/ckeditor5-upload/issues/70
+	it( 'should not crash on browsers which do not implement DOMStringList as a child class of an Array', () => {
+		const typesDomStringListMock = {
+			length: 2,
+			'0': 'text/html',
+			'1': 'text/plain'
+		};
+		const dataTransfer = new DataTransfer( {
+			types: typesDomStringListMock,
+			getData: type => type === 'text/html' ? '<p>SomeData</p>' : 'SomeData'
+		} );
+		setModelData( doc, '<paragraph>[]foo</paragraph>' );
+
+		const targetRange = doc.selection.getFirstRange();
+		const targetViewRange = editor.editing.mapper.toViewRange( targetRange );
+
+		viewDocument.fire( 'clipboardInput', { dataTransfer, targetRanges: [ targetViewRange ] } );
+
+		// Well, there's no clipboard plugin, so nothing happens.
+		expect( getModelData( doc ) ).to.equal( '<paragraph>[]foo</paragraph>' );
+	} );
+
 	it( 'should not convert image\'s uploadId attribute if is consumed already', () => {
 		editor.editing.modelToView.on( 'addAttribute:uploadId:image', ( evt, data, consumable ) => {
 			consumable.consume( data.item, eventNameToConsumableType( evt.name ) );