瀏覽代碼

Implemented ListView#focusLast.

Aleksander Nowodzinski 9 年之前
父節點
當前提交
086b412623
共有 2 個文件被更改,包括 30 次插入1 次删除
  1. 13 1
      packages/ckeditor5-ui/src/list/listview.js
  2. 17 0
      packages/ckeditor5-ui/tests/list/listview.js

+ 13 - 1
packages/ckeditor5-ui/src/list/listview.js

@@ -110,7 +110,7 @@ export default class ListView extends View {
 	}
 
 	/**
-	 * Focuses the list.
+	 * Focuses the first focusable in {@link #items}.
 	 */
 	focus() {
 		// Find the very first list item that can be focused.
@@ -120,4 +120,16 @@ export default class ListView extends View {
 			firstFocusable.focus();
 		}
 	}
+
+	/**
+	 * Focuses the last focusable in {@link #items}.
+	 */
+	focusLast() {
+		// Find the last list item that can be focused.
+		const lastFocusable = this._focusCycler.last;
+
+		if ( lastFocusable ) {
+			lastFocusable.focus();
+		}
+	}
 }

+ 17 - 0
packages/ckeditor5-ui/tests/list/listview.js

@@ -161,6 +161,23 @@ describe( 'ListView', () => {
 			sinon.assert.calledOnce( spy );
 		} );
 	} );
+
+	describe( 'focusLast()', () => {
+		it( 'focuses the last focusable item in DOM', () => {
+			// No children to focus.
+			view.focusLast();
+
+			// The second child is focusable.
+			view.items.add( nonFocusable() );
+			view.items.add( focusable() );
+			view.items.add( nonFocusable() );
+
+			const spy = sinon.spy( view.items.get( 1 ), 'focus' );
+			view.focusLast();
+
+			sinon.assert.calledOnce( spy );
+		} );
+	} );
 } );
 
 function focusable() {