Browse Source

Changed: Content should not be inserted if there is nothing to insert.

Szymon Cofalik 8 years ago
parent
commit
2d13c7ebae

+ 4 - 0
packages/ckeditor5-clipboard/src/clipboard.js

@@ -165,6 +165,10 @@ export default class Clipboard extends Plugin {
 				// we use the $clipboardHolder item.
 				const modelFragment = dataController.toModel( data.content, '$clipboardHolder' );
 
+				if ( modelFragment.childCount == 0 ) {
+					return;
+				}
+
 				doc.enqueueChanges( () => {
 					dataController.insertContent( modelFragment, doc.selection );
 				} );

+ 14 - 0
packages/ckeditor5-clipboard/tests/clipboard.js

@@ -193,6 +193,20 @@ describe( 'Clipboard feature', () => {
 			sinon.assert.notCalled( spy );
 		} );
 
+		it( 'do not insert content if whole content was invalid', () => {
+			// Whole content is invalid. Even though there is "view" content, the "model" content would be empty.
+			// Do not insert content in this case.
+			const dataTransferMock = createDataTransfer( { 'text/html': '<unknownTag></unknownTag>', 'text/plain': '' } );
+			const spy = sinon.stub( editor.data, 'insertContent' );
+
+			editingView.fire( 'paste', {
+				dataTransfer: dataTransferMock,
+				preventDefault() {}
+			} );
+
+			sinon.assert.notCalled( spy );
+		} );
+
 		it( 'converts content in an "all allowed" context', () => {
 			// It's enough if we check this here with a text node and paragraph because if the conversion was made
 			// in a normal root, then text or paragraph wouldn't be allowed here.