浏览代码

Vertical navigation should not override browser behavior if there is no limit element in the direction of navigation.

Kuba Niegowski 5 年之前
父节点
当前提交
ef19d12e3f
共有 1 个文件被更改,包括 12 次插入2 次删除
  1. 12 2
      packages/ckeditor5-widget/src/verticalnavigation.js

+ 12 - 2
packages/ckeditor5-widget/src/verticalnavigation.js

@@ -84,6 +84,11 @@ function findTextRangeFromSelection( editing, selection, isForward ) {
 		const startPosition = selection.isCollapsed ? selection.focus : selection.getLastPosition();
 		const endPosition = getNearestNonInlineLimit( model, startPosition, 'forward' );
 
+		// There is no limit element, browser should handle this.
+		if ( !endPosition ) {
+			return null;
+		}
+
 		const range = model.createRange( startPosition, endPosition );
 		const lastRangePosition = getNearestVisibleTextPosition( editing, range, 'backward' );
 
@@ -96,6 +101,11 @@ function findTextRangeFromSelection( editing, selection, isForward ) {
 		const endPosition = selection.isCollapsed ? selection.focus : selection.getFirstPosition();
 		const startPosition = getNearestNonInlineLimit( model, endPosition, 'backward' );
 
+		// There is no limit element, browser should handle this.
+		if ( !startPosition ) {
+			return null;
+		}
+
 		const range = model.createRange( startPosition, endPosition );
 		const firstRangePosition = getNearestVisibleTextPosition( editing, range, 'forward' );
 
@@ -112,7 +122,7 @@ function findTextRangeFromSelection( editing, selection, isForward ) {
 // @param {module:engine/model/model~Model} model
 // @param {<module:engine/model/position~Position>} startPosition
 // @param {'forward'|'backward'} direction Search direction.
-// @returns {<module:engine/model/position~Position>}
+// @returns {<module:engine/model/position~Position>|null}
 //
 function getNearestNonInlineLimit( model, startPosition, direction ) {
 	const schema = model.schema;
@@ -124,7 +134,7 @@ function getNearestNonInlineLimit( model, startPosition, direction ) {
 		}
 	}
 
-	return direction == 'forward' ? range.end : range.start;
+	return null;
 }
 
 // Basing on the provided range, finds the first or last (depending on `direction`) position inside the range