Преглед на файлове

Added: Properly discover delete-word keyboard modifier on mac and non-mac computers.

Maciej Gołaszewski преди 7 години
родител
ревизия
3b268ea263
променени са 2 файла, в които са добавени 33 реда и са изтрити 2 реда
  1. 3 1
      packages/ckeditor5-typing/src/deleteobserver.js
  2. 30 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.
@@ -41,7 +42,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.

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

@@ -10,6 +10,7 @@ import ViewDocument from '@ckeditor/ckeditor5-engine/src/view/document';
 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 '../../ckeditor5-utils/src/env';
 
 describe( 'DeleteObserver', () => {
 	let viewDocument;
@@ -28,6 +29,12 @@ describe( 'DeleteObserver', () => {
 	} );
 
 	describe( 'delete event', () => {
+		const initialEnvMac = env.isMac;
+
+		afterEach( () => {
+			env.isMac = initialEnvMac;
+		} );
+
 		it( 'is fired on keydown', () => {
 			const spy = sinon.spy();
 
@@ -45,9 +52,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();
 
+			env.isMac = true;
+
 			viewDocument.on( 'delete', spy );
 
 			viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
@@ -63,6 +72,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();
+
+			env.isMac = 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();