Browse Source

Docs: TreeView docs update.

Piotr Jasiun 9 years ago
parent
commit
6dcce542f3
1 changed files with 40 additions and 18 deletions
  1. 40 18
      packages/ckeditor5-engine/src/treeview/treeview.js

+ 40 - 18
packages/ckeditor5-engine/src/treeview/treeview.js

@@ -40,6 +40,12 @@ export default class TreeView {
 		 */
 		this.domRoots = new Map();
 
+		/**
+		 * Selection done on this document.
+		 *
+		 * @readonly
+		 * @member {engine.treeView.Selection} engine.treeView.TreeView#selection
+		 */
 		this.selection = new Selection();
 
 		/**
@@ -83,24 +89,7 @@ export default class TreeView {
 		 */
 		this._observers = new Map();
 
-		this.on( 'keydown', ( evt, data ) => {
-			if ( data.keyCode == keyNames.arrowleft ) {
-				const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();
-
-				if ( domSelection.rangeCount == 1 && domSelection.getRangeAt( 0 ).collapsed ) {
-					const domParent = domSelection.getRangeAt( 0 ).startContainer;
-					const domOffset = domSelection.getRangeAt( 0 ).startOffset;
-
-					if ( this.domConverter.startsWithFiller( domParent ) && domOffset <= INLINE_FILLER_SIZE ) {
-						const domRange = new Range();
-						domRange.setStart( domParent, 0 );
-						domRange.collapse( true );
-						domSelection.removeAllRanges();
-						domSelection.addRange( domRange );
-					}
-				}
-			}
-		} );
+		this._jumpOverInlineFiller();
 	}
 
 	/**
@@ -131,6 +120,12 @@ export default class TreeView {
 		observer.enable();
 	}
 
+	/**
+	 * Get observer of given type or undefined if such observer have not been added.
+	 *
+	 * @param {Function} Observer The constructor of an observer to get.
+	 * @returns {engine.treeView.observer.Observer|undefined} Observer instance or undefined.
+	 */
 	getObserver( Observer ) {
 		return this._observers.get( Observer );
 	}
@@ -183,6 +178,33 @@ export default class TreeView {
 			observer.enable();
 		}
 	}
+
+	/**
+	 * Assign key observer which move cursor from the end of the inline filler to the begging of it when the left arrow
+	 * is pressed, so the filler does not break navigation.
+	 *
+	 * @private
+	 */
+	_jumpOverInlineFiller() {
+		this.on( 'keydown', ( evt, data ) => {
+			if ( data.keyCode == keyNames.arrowleft ) {
+				const domSelection = data.domTarget.ownerDocument.defaultView.getSelection();
+
+				if ( domSelection.rangeCount == 1 && domSelection.getRangeAt( 0 ).collapsed ) {
+					const domParent = domSelection.getRangeAt( 0 ).startContainer;
+					const domOffset = domSelection.getRangeAt( 0 ).startOffset;
+
+					if ( this.domConverter.startsWithFiller( domParent ) && domOffset <= INLINE_FILLER_SIZE ) {
+						const domRange = new Range();
+						domRange.setStart( domParent, 0 );
+						domRange.collapse( true );
+						domSelection.removeAllRanges();
+						domSelection.addRange( domRange );
+					}
+				}
+			}
+		} );
+	}
 }
 
 mix( TreeView, EmitterMixin );