瀏覽代碼

Merge pull request #138 from ckeditor/t/92

Fix: Properly discover delete-word keyboard modifier on mac and non-mac computers. Closes #92.
Piotrek Koszuliński 7 年之前
父節點
當前提交
a7b543ec4d
共有 2 個文件被更改,包括 31 次插入2 次删除
  1. 3 1
      packages/ckeditor5-typing/src/deleteobserver.js
  2. 28 1
      packages/ckeditor5-typing/tests/deleteobserver.js

+ 3 - 1
packages/ckeditor5-typing/src/deleteobserver.js

@@ -10,6 +10,7 @@
 import Observer from '@ckeditor/ckeditor5-engine/src/view/observer/observer';
 import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';
 import { keyCodes } from '@ckeditor/ckeditor5-utils/src/keyboard';
+import env from '@ckeditor/ckeditor5-utils/src/env';
 
 /**
  * Delete observer introduces the {@link module:engine/view/document~Document#event:delete} event.
@@ -42,7 +43,8 @@ export default class DeleteObserver extends Observer {
 				return;
 			}
 
-			deleteData.unit = data.altKey ? 'word' : deleteData.unit;
+			const hasWordModifier = env.isMac ? data.altKey : data.ctrlKey;
+			deleteData.unit = hasWordModifier ? 'word' : deleteData.unit;
 			deleteData.sequence = ++sequence;
 
 			// Save the event object to check later if it was stopped or not.

+ 28 - 1
packages/ckeditor5-typing/tests/deleteobserver.js

@@ -10,6 +10,11 @@ import View from '@ckeditor/ckeditor5-engine/src/view/view';
 import DomEventData from '@ckeditor/ckeditor5-engine/src/view/observer/domeventdata';
 import createViewRoot from '@ckeditor/ckeditor5-engine/tests/view/_utils/createroot';
 import { getCode } from '@ckeditor/ckeditor5-utils/src/keyboard';
+import env from '@ckeditor/ckeditor5-utils/src/env';
+
+import testUtils from '@ckeditor/ckeditor5-core/tests/_utils/utils';
+
+testUtils.createSinonSandbox();
 
 describe( 'DeleteObserver', () => {
 	let view, viewDocument;
@@ -50,9 +55,11 @@ describe( 'DeleteObserver', () => {
 			expect( data ).to.have.property( 'sequence', 1 );
 		} );
 
-		it( 'is fired with a proper direction and unit', () => {
+		it( 'is fired with a proper direction and unit (on Mac)', () => {
 			const spy = sinon.spy();
 
+			testUtils.sinon.stub( env, 'isMac' ).value( true );
+
 			viewDocument.on( 'delete', spy );
 
 			viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
@@ -68,6 +75,26 @@ describe( 'DeleteObserver', () => {
 			expect( data ).to.have.property( 'sequence', 1 );
 		} );
 
+		it( 'is fired with a proper direction and unit (on non-Mac)', () => {
+			const spy = sinon.spy();
+
+			testUtils.sinon.stub( env, 'isMac' ).value( false );
+
+			viewDocument.on( 'delete', spy );
+
+			viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
+				keyCode: getCode( 'backspace' ),
+				ctrlKey: true
+			} ) );
+
+			expect( spy.calledOnce ).to.be.true;
+
+			const data = spy.args[ 0 ][ 1 ];
+			expect( data ).to.have.property( 'direction', 'backward' );
+			expect( data ).to.have.property( 'unit', 'word' );
+			expect( data ).to.have.property( 'sequence', 1 );
+		} );
+
 		it( 'is not fired on keydown when keyCode does not match backspace or delete', () => {
 			const spy = sinon.spy();