浏览代码

Fixed arrow keys handling - preventing default behaviour when there is no place to move selection.

Szymon Kupś 9 年之前
父节点
当前提交
c113e292f0
共有 2 个文件被更改,包括 34 次插入2 次删除
  1. 2 2
      packages/ckeditor5-image/src/widget/widget.js
  2. 32 0
      packages/ckeditor5-image/tests/widget/widget.js

+ 2 - 2
packages/ckeditor5-image/src/widget/widget.js

@@ -156,9 +156,9 @@ export default class Widget extends Plugin {
 				modelDocument.enqueueChanges( () => {
 					modelSelection.setRanges( [ newRange ] );
 				} );
-
-				return true;
 			}
+
+			return true;
 		}
 
 		// If selection is next to object element.

+ 32 - 0
packages/ckeditor5-image/tests/widget/widget.js

@@ -485,6 +485,38 @@ describe( 'Widget', () => {
 				'[<widget></widget>]<paragraph>foo</paragraph>'
 			);
 
+			it( 'should prevent default behaviour when there is no correct location - document end', () => {
+				const keydownHandler = sinon.spy();
+				const domEventDataMock = {
+					keyCode: keyCodes.arrowright,
+					preventDefault: sinon.spy(),
+				};
+				setModelData( doc, '<paragraph>foo</paragraph>[<widget></widget>]' );
+				viewDocument.on( 'keydown',  keydownHandler );
+
+				viewDocument.fire( 'keydown', domEventDataMock );
+
+				expect( getModelData( doc ) ).to.equal( '<paragraph>foo</paragraph>[<widget></widget>]' );
+				sinon.assert.calledOnce( domEventDataMock.preventDefault );
+				sinon.assert.notCalled( keydownHandler );
+			} );
+
+			it( 'should prevent default behaviour when there is no correct location - document start', () => {
+				const keydownHandler = sinon.spy();
+				const domEventDataMock = {
+					keyCode: keyCodes.arrowleft,
+					preventDefault: sinon.spy(),
+				};
+				setModelData( doc, '[<widget></widget>]<paragraph>foo</paragraph>' );
+				viewDocument.on( 'keydown',  keydownHandler );
+
+				viewDocument.fire( 'keydown', domEventDataMock );
+
+				expect( getModelData( doc ) ).to.equal( '[<widget></widget>]<paragraph>foo</paragraph>' );
+				sinon.assert.calledOnce( domEventDataMock.preventDefault );
+				sinon.assert.notCalled( keydownHandler );
+			} );
+
 			test(
 				'should move selection to object element - right arrow',
 				'<paragraph>foo[]</paragraph><widget></widget>',