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

Fix requirements checking on general elements in selection post-fixer.

Maciej Gołaszewski 7 лет назад
Родитель
Сommit
5c099db78a
1 измененных файлов с 6 добавлено и 6 удалено
  1. 6 6
      packages/ckeditor5-engine/src/model/utils/selection-post-fixer.js

+ 6 - 6
packages/ckeditor5-engine/src/model/utils/selection-post-fixer.js

@@ -184,8 +184,7 @@ function tryFixingNonCollapsedRage( range, schema ) {
 		// - [<block>foo</block>]    ->    <block>[foo]</block>
 		// - [<block>foo]</block>    ->    <block>[foo]</block>
 		// - <block>f[oo</block>]    ->    <block>f[oo]</block>
-		// TODO: make it nicer
-		// - [<block>foo</block><object></object>]    ->    [<block>foo</block><object></object>]
+		// - [<block>foo</block><object></object>]    ->    <block>[foo</block><object></object>]
 		if ( checkSelectionOnNonLimitElements( start, end, schema ) ) {
 			const isStartObject = start.nodeAfter && schema.isObject( start.nodeAfter );
 			const fixedStart = isStartObject ? null : schema.getNearestSelectionRange( start, 'forward' );
@@ -247,17 +246,18 @@ function findOuterMostIsLimitAncestor( startingNode, schema ) {
 	return isLimitNode;
 }
 
-// Checks whether both range ends are placed around non-limit elements.
+// Checks whether one of range ends is placed around non-limit elements.
 //
 // @param {module:engine/model/position~Position} start
 // @param {module:engine/model/position~Position} end
 // @param {module:engine/model/schema~Schema} schema
 // @returns {Boolean}
 function checkSelectionOnNonLimitElements( start, end, schema ) {
-	const startIsOnBlock = ( start.nodeAfter && schema.isBlock( start.nodeAfter ) ) || schema.checkChild( start, '$text' );
-	const endIsOnBlock = ( end.nodeBefore && schema.isBlock( end.nodeBefore ) ) || schema.checkChild( end, '$text' );
+	const startIsOnBlock = ( start.nodeAfter && !schema.isLimit( start.nodeAfter ) ) || schema.checkChild( start, '$text' );
+	const endIsOnBlock = ( end.nodeBefore && !schema.isLimit( end.nodeBefore ) ) || schema.checkChild( end, '$text' );
 
-	return startIsOnBlock && endIsOnBlock;
+	// We should fix such selection when one of those nodes needs fixing.
+	return startIsOnBlock || endIsOnBlock;
 }
 
 // Checks if node exists and if it's an object.