Browse Source

Selection improvements.

Oskar Wróbel 6 years ago
parent
commit
429be7e681

+ 1 - 5
packages/ckeditor5-list/src/todolistconverters.js

@@ -297,11 +297,7 @@ function createCheckmarkElement( modelItem, viewWriter, isChecked, onChange ) {
 			const checkbox = createElement( document, 'input', { type: 'checkbox', } );
 
 			checkbox.checked = isChecked;
-
-			checkbox.addEventListener( 'mousedown', evt => {
-				evt.stopPropagation();
-				onChange( modelItem );
-			} );
+			checkbox.addEventListener( 'change', () => onChange( modelItem ) );
 
 			const domElement = this.toDomElement( domDocument );
 

+ 5 - 9
packages/ckeditor5-list/src/todolistediting.js

@@ -218,6 +218,10 @@ function moveUIElementsAfterCheckmark( writer, uiElements ) {
 // @param {module:engine/view/downcastwriter~DowncastWriter} writer
 // @param {module:engine/view/documentselection~DocumentSelection} selection
 function moveSelectionAfterCheckmark( writer, selection ) {
+	if ( !selection.isCollapsed ) {
+		return false;
+	}
+
 	const positionToChange = selection.getFirstPosition();
 
 	if ( positionToChange.parent.name != 'li' || !positionToChange.parent.parent.hasClass( 'todo-list' ) ) {
@@ -234,15 +238,7 @@ function moveSelectionAfterCheckmark( writer, selection ) {
 		const text = findInRange( boundaries, item => item.is( 'textProxy' ) ? item.textNode : false );
 		const nextPosition = text ? writer.createPositionAt( text, 0 ) : parentEndPosition;
 
-		let range;
-
-		if ( selection.isCollapsed ) {
-			range = writer.createRange( nextPosition );
-		} else {
-			range = writer.createRange( nextPosition, selection.getLastPosition() );
-		}
-
-		writer.setSelection( range, { isBackward: selection.isBackward } );
+		writer.setSelection( writer.createRange( nextPosition ), { isBackward: selection.isBackward } );
 
 		return true;
 	}

+ 3 - 23
packages/ckeditor5-list/tests/todolistediting.js

@@ -698,26 +698,6 @@ describe( 'TodoListEditing', () => {
 				'</ul>'
 			);
 		} );
-
-		it( 'should move start of none-collapsed selection after checkmark element to the first text node', () => {
-			setModelData( model, '<listItem listType="todo" listIndent="0">[Foo]</listItem>' );
-
-			expect( getViewData( view ) ).to.equal(
-				'<ul class="todo-list">' +
-					'<li><label class="todo-list__checkmark" contenteditable="false"></label>{Foo}</li>' +
-				'</ul>'
-			);
-		} );
-
-		it( 'should move start of none-collapsed, backward selection after checkmark element to the first text node', () => {
-			setModelData( model, '<listItem listType="todo" listIndent="0">[Foo]</listItem>', { lastRangeBackward: true } );
-
-			expect( getViewData( view ) ).to.equal(
-				'<ul class="todo-list">' +
-				'<li><label class="todo-list__checkmark" contenteditable="false"></label>{Foo}</li>' +
-				'</ul>'
-			);
-		} );
 	} );
 
 	describe( 'uiElements view post-fixer', () => {
@@ -951,7 +931,7 @@ describe( 'TodoListEditing', () => {
 
 		expect( checkboxElement.checked ).to.equal( false );
 
-		checkboxElement.dispatchEvent( new Event( 'mousedown' ) );
+		checkboxElement.dispatchEvent( new Event( 'change' ) );
 
 		checkmarkViewElement = viewRoot.getChild( 0 ).getChild( 0 ).getChild( 0 );
 		checkmarkDomElement = view.domConverter.mapViewToDom( checkmarkViewElement );
@@ -964,7 +944,7 @@ describe( 'TodoListEditing', () => {
 			'<paragraph>b[a]r</paragraph>'
 		);
 
-		checkboxElement.dispatchEvent( new Event( 'mousedown' ) );
+		checkboxElement.dispatchEvent( new Event( 'change' ) );
 
 		checkmarkViewElement = viewRoot.getChild( 0 ).getChild( 0 ).getChild( 0 );
 		checkmarkDomElement = view.domConverter.mapViewToDom( checkmarkViewElement );
@@ -992,7 +972,7 @@ describe( 'TodoListEditing', () => {
 
 		expect( checkboxElement.checked ).to.equal( false );
 
-		checkboxElement.dispatchEvent( new Event( 'mousedown' ) );
+		checkboxElement.dispatchEvent( new Event( 'change' ) );
 
 		checkmarkViewElement = viewRoot.getChild( 0 ).getChild( 0 ).getChild( 0 );
 		checkmarkDomElement = view.domConverter.mapViewToDom( checkmarkViewElement );