Ver código fonte

Merge pull request #56 from ckeditor/t/ckeditor5/1120

Fix: Default action of `Enter` event should be always prevented. Closes ckeditor/ckeditor5#1120.
Piotrek Koszuliński 7 anos atrás
pai
commit
5032e13d7f

+ 2 - 1
packages/ckeditor5-enter/src/enter.js

@@ -36,13 +36,14 @@ export default class Enter extends Plugin {
 		editor.commands.add( 'enter', new EnterCommand( editor ) );
 
 		this.listenTo( viewDocument, 'enter', ( evt, data ) => {
+			data.preventDefault();
+
 			// The soft enter key is handled by the ShiftEnter plugin.
 			if ( data.isSoft ) {
 				return;
 			}
 
 			editor.execute( 'enter' );
-			data.preventDefault();
 			view.scrollToTheSelection();
 		}, { priority: 'low' } );
 	}

+ 2 - 1
packages/ckeditor5-enter/src/shiftenter.js

@@ -58,13 +58,14 @@ export default class ShiftEnter extends Plugin {
 		editor.commands.add( 'shiftEnter', new ShiftEnterCommand( editor ) );
 
 		this.listenTo( viewDocument, 'enter', ( evt, data ) => {
+			data.preventDefault();
+
 			// The hard enter key is handled by the Enter plugin.
 			if ( !data.isSoft ) {
 				return;
 			}
 
 			editor.execute( 'shiftEnter' );
-			data.preventDefault();
 			view.scrollToTheSelection();
 		}, { priority: 'low' } );
 	}

+ 9 - 1
packages/ckeditor5-enter/tests/enter.js

@@ -53,7 +53,7 @@ describe( 'Enter feature', () => {
 		viewDocument.fire( 'enter', new DomEventData( viewDocument, domEvt ) );
 
 		sinon.assert.calledOnce( scrollSpy );
-		sinon.assert.callOrder( executeSpy, scrollSpy );
+		sinon.assert.callOrder( domEvt.preventDefault, executeSpy, scrollSpy );
 	} );
 
 	it( 'does not execute the command if soft enter should be used', () => {
@@ -65,6 +65,14 @@ describe( 'Enter feature', () => {
 		sinon.assert.notCalled( commandExecuteSpy );
 	} );
 
+	it( 'prevents default event action even if the command should not be executed', () => {
+		const domEvt = getDomEvent();
+
+		viewDocument.fire( 'enter', new DomEventData( viewDocument, domEvt, { isSoft: true } ) );
+
+		sinon.assert.calledOnce( domEvt.preventDefault );
+	} );
+
 	function getDomEvent() {
 		return {
 			preventDefault: sinon.spy()

+ 9 - 1
packages/ckeditor5-enter/tests/shiftenter.js

@@ -53,7 +53,7 @@ describe( 'ShiftEnter feature', () => {
 		viewDocument.fire( 'enter', new DomEventData( viewDocument, domEvt, { isSoft: true } ) );
 
 		sinon.assert.calledOnce( scrollSpy );
-		sinon.assert.callOrder( executeSpy, scrollSpy );
+		sinon.assert.callOrder( domEvt.preventDefault, executeSpy, scrollSpy );
 	} );
 
 	it( 'does not execute the command if hard enter should be used', () => {
@@ -65,6 +65,14 @@ describe( 'ShiftEnter feature', () => {
 		sinon.assert.notCalled( commandExecuteSpy );
 	} );
 
+	it( 'prevents default event action even if the command should not be executed', () => {
+		const domEvt = getDomEvent();
+
+		viewDocument.fire( 'enter', new DomEventData( viewDocument, domEvt, { isSoft: false } ) );
+
+		sinon.assert.calledOnce( domEvt.preventDefault );
+	} );
+
 	function getDomEvent() {
 		return {
 			preventDefault: sinon.spy()