8
0
Просмотр исходного кода

Fix blocks selection when only parent is selected.

Maciej Gołaszewski 6 лет назад
Родитель
Сommit
8dab1151f1

+ 4 - 1
packages/ckeditor5-engine/src/model/selection.js

@@ -904,5 +904,8 @@ function checkBlock( block, range ) {
 	}
 
 	// Check if element is nested in other block from a range.
-	return !range.containsRange( Range._createOn( parent ) );
+	const parentRange = Range._createOn( parent );
+	const isParentSomething = !( range.containsRange( parentRange ) || range.isEqual( parentRange ) );
+
+	return isParentSomething;
 }

+ 7 - 1
packages/ckeditor5-engine/tests/model/selection.js

@@ -1134,12 +1134,18 @@ describe( 'Selection', () => {
 			expect( stringifyBlocks( doc.selection.getSelectedBlocks() ) ).to.deep.equal( [ 'blk', 'p#bar' ] );
 		} );
 
-		it( 'returns only top most blocks', () => {
+		it( 'returns only top most blocks (multiple selected)', () => {
 			setData( model, '<p>[foo</p><table><tableRow><tableCell><p>bar</p></tableCell></tableRow></table><p>baz]</p>' );
 
 			expect( stringifyBlocks( doc.selection.getSelectedBlocks() ) ).to.deep.equal( [ 'p#foo', 'table', 'p#baz' ] );
 		} );
 
+		it( 'returns only top most block (one selected)', () => {
+			setData( model, '[<table><tableRow><tableCell><p>bar</p></tableCell></tableRow></table>]' );
+
+			expect( stringifyBlocks( doc.selection.getSelectedBlocks() ) ).to.deep.equal( [ 'table' ] );
+		} );
+
 		it( 'returns only selected blocks even if nested in other blocks', () => {
 			setData( model, '<p>foo</p><table><tableRow><tableCell><p>[b]ar</p></tableCell></tableRow></table><p>baz</p>' );