8
0
فهرست منبع

Handle SPACE key on list view item.

Maciej Gołaszewski 6 سال پیش
والد
کامیت
93694f1079
2فایلهای تغییر یافته به همراه47 افزوده شده و 1 حذف شده
  1. 2 1
      packages/ckeditor5-mention/src/mentionui.js
  2. 45 0
      packages/ckeditor5-mention/tests/mentionui.js

+ 2 - 1
packages/ckeditor5-mention/src/mentionui.js

@@ -67,7 +67,7 @@ export default class MentionUI extends Plugin {
 					this._mentionsView.selectPrevious();
 				}
 
-				if ( data.keyCode == keyCodes.enter || data.keyCode == keyCodes.tab ) {
+				if ( data.keyCode == keyCodes.enter || data.keyCode == keyCodes.tab || data.keyCode == keyCodes.space ) {
 					this._mentionsView.executeSelected();
 				}
 
@@ -348,6 +348,7 @@ function isHandledKey( keyCode ) {
 		keyCodes.arrowright,
 		keyCodes.enter,
 		keyCodes.tab,
+		keyCodes.space,
 		keyCodes.esc
 	];
 	return handledKeyCodes.includes( keyCode );

+ 45 - 0
packages/ckeditor5-mention/tests/mentionui.js

@@ -532,6 +532,51 @@ describe( 'MentionUI', () => {
 			} );
 		} );
 
+		describe( 'space', () => {
+			it( 'should execute selected button', () => {
+				setData( model, '<paragraph>foo []</paragraph>' );
+
+				model.change( writer => {
+					writer.insertText( '@', doc.selection.getFirstPosition() );
+				} );
+
+				const command = editor.commands.get( 'mention' );
+				const spy = testUtils.sinon.spy( command, 'execute' );
+
+				return waitForDebounce()
+					.then( () => {
+						expectChildViewsIsOnState( [ true, false, false, false, false ] );
+
+						fireKeyDownEvent( {
+							keyCode: keyCodes.arrowup,
+							preventDefault: sinon.spy(),
+							stopPropagation: sinon.spy()
+						} );
+
+						expectChildViewsIsOnState( [ false, false, false, false, true ] );
+
+						fireKeyDownEvent( {
+							keyCode: keyCodes.space,
+							preventDefault: sinon.spy(),
+							stopPropagation: sinon.spy()
+						} );
+
+						sinon.assert.calledOnce( spy );
+
+						const commandOptions = spy.getCall( 0 ).args[ 0 ];
+
+						expect( commandOptions ).to.have.property( 'mention' ).that.deep.equal( { name: 'Ted' } );
+						expect( commandOptions ).to.have.property( 'marker', '@' );
+						expect( commandOptions ).to.have.property( 'range' );
+
+						const start = model.createPositionAt( doc.getRoot().getChild( 0 ), 4 );
+						const expectedRange = model.createRange( start, start.getShiftedBy( 1 ) );
+
+						expect( commandOptions.range.isEqual( expectedRange ) ).to.be.true;
+					} );
+			} );
+		} );
+
 		describe( 'esc', () => {
 			it( 'should close the opened panel', () => {
 				setData( model, '<paragraph>foo []</paragraph>' );