Forráskód Böngészése

Implemented FocusCycler#last. Minor docs refactoring.

Aleksander Nowodzinski 9 éve
szülő
commit
7987baa8e8

+ 14 - 3
packages/ckeditor5-utils/src/focuscycler.js

@@ -38,7 +38,8 @@ export default class FocusCycler {
 	}
 
 	/**
-	 * Returns the first focusable view in the collection. `null` if there's none.
+	 * Returns the first focusable view in {@link #viewCollection}.
+	 * `null` if there's none.
 	 *
 	 * @member {module:ui/view~View|null} #first
 	 */
@@ -47,7 +48,17 @@ export default class FocusCycler {
 	}
 
 	/**
-	 * Returns the next focusable view in the collection based on {@link #current}.
+	 * Returns the last focusable view in {@link #viewCollection}.
+	 * `null` if there's none.
+	 *
+	 * @member {module:ui/view~View|null} #last
+	 */
+	get last() {
+		return this.viewCollection.filter( isFocusable ).slice( -1 )[ 0 ] || null;
+	}
+
+	/**
+	 * Returns the next focusable view in {@link #viewCollection} based on {@link #current}.
 	 * `null` if there's none.
 	 *
 	 * @member {module:ui/view~View|null} #next
@@ -57,7 +68,7 @@ export default class FocusCycler {
 	}
 
 	/**
-	 * Returns the previous focusable view in the collection based on {@link #current}.
+	 * Returns the previous focusable view in {@link #viewCollection} based on {@link #current}.
 	 * `null` if there's none.
 	 *
 	 * @member {module:ui/view~View|null} #next

+ 23 - 0
packages/ckeditor5-utils/tests/focuscycler.js

@@ -66,6 +66,29 @@ describe( 'FocusCycler', () => {
 		} );
 	} );
 
+	describe( 'last()', () => {
+		it( 'returns last focusable view', () => {
+			expect( cycler.last ).to.equal( viewCollection.get( 3 ) );
+		} );
+
+		it( 'returns null when no focusable items', () => {
+			viewCollection = new ViewCollection();
+			cycler = new FocusCycler( viewCollection, focusTracker );
+
+			viewCollection.add( nonFocusable() );
+			viewCollection.add( nonFocusable() );
+
+			expect( cycler.last ).to.be.null;
+		} );
+
+		it( 'returns null when no items', () => {
+			viewCollection = new ViewCollection();
+			cycler = new FocusCycler( viewCollection, focusTracker );
+
+			expect( cycler.last ).to.be.null;
+		} );
+	} );
+
 	describe( 'next()', () => {
 		it( 'cycles to return the next focusable view', () => {
 			focusTracker.focusedElement = viewCollection.get( 2 ).element;