8
0
Pārlūkot izejas kodu

Merge pull request #187 from ckeditor/t/186

Fix: The `delete` event will now stop the `keydown` event if it was set with the highest priority. Closes #186.
Piotrek Koszuliński 6 gadi atpakaļ
vecāks
revīzija
81ae02343f

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

@@ -49,9 +49,10 @@ export default class DeleteObserver extends Observer {
 
 			// Save the event object to check later if it was stopped or not.
 			let event;
-			document.once( 'delete', evt => ( event = evt ), { priority: 'highest' } );
+			document.once( 'delete', evt => ( event = evt ), { priority: Number.POSITIVE_INFINITY } );
 
-			document.fire( 'delete', new DomEventData( document, data.domEvent, deleteData ) );
+			const domEvtData = new DomEventData( document, data.domEvent, deleteData );
+			document.fire( 'delete', domEvtData );
 
 			// Stop `keydown` event if `delete` event was stopped.
 			// https://github.com/ckeditor/ckeditor5/issues/753

+ 13 - 0
packages/ckeditor5-typing/tests/deleteobserver.js

@@ -214,6 +214,19 @@ describe( 'DeleteObserver', () => {
 			sinon.assert.notCalled( keydownSpy );
 		} );
 
+		// https://github.com/ckeditor/ckeditor5-typing/issues/186
+		it( 'should stop keydown event when delete event is stopped (delete event with highest priority)', () => {
+			const keydownSpy = sinon.spy();
+			viewDocument.on( 'keydown', keydownSpy );
+			viewDocument.on( 'delete', evt => evt.stop(), { priority: 'highest' } );
+
+			viewDocument.fire( 'keydown', new DomEventData( viewDocument, getDomEvent(), {
+				keyCode: getCode( 'delete' )
+			} ) );
+
+			sinon.assert.notCalled( keydownSpy );
+		} );
+
 		it( 'should not stop keydown event when delete event is not stopped', () => {
 			const keydownSpy = sinon.spy();
 			viewDocument.on( 'keydown', keydownSpy );