diff options
| author | Kyle Tsang <[email protected]> | 2023-07-23 12:06:14 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-07-23 22:06:14 +0300 |
| commit | d45cc7ef516de676bfaa2b97fe10b71e98ff6f3e (patch) | |
| tree | ebaf63d2ffa2fa1f5eea6b6487ace1389a270a72 /js/src/tab.js | |
| parent | 8fcfce1ebd988fd4e5ed2f51acaa5c49e6b301c9 (diff) | |
| download | bootstrap-d45cc7ef516de676bfaa2b97fe10b71e98ff6f3e.tar.xz bootstrap-d45cc7ef516de676bfaa2b97fe10b71e98ff6f3e.zip | |
Support `Home` and `End` keys in tabs (#38498)
* Support `Home` and `End` keys in tabs
* Update tab.js
* simplify tests
* Update navs-tabs.md
* Update .bundlewatch.config.json
---------
Co-authored-by: Patrick H. Lauke <[email protected]>
Co-authored-by: XhmikosR <[email protected]>
Co-authored-by: Mark Otto <[email protected]>
Diffstat (limited to 'js/src/tab.js')
| -rw-r--r-- | js/src/tab.js | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/js/src/tab.js b/js/src/tab.js index d9993d56e..5598e15c0 100644 --- a/js/src/tab.js +++ b/js/src/tab.js @@ -30,6 +30,8 @@ const ARROW_LEFT_KEY = 'ArrowLeft' const ARROW_RIGHT_KEY = 'ArrowRight' const ARROW_UP_KEY = 'ArrowUp' const ARROW_DOWN_KEY = 'ArrowDown' +const HOME_KEY = 'Home' +const END_KEY = 'End' const CLASS_NAME_ACTIVE = 'active' const CLASS_NAME_FADE = 'fade' @@ -151,14 +153,22 @@ class Tab extends BaseComponent { } _keydown(event) { - if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key))) { + if (!([ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key))) { return } event.stopPropagation()// stopPropagation/preventDefault both added to support up/down keys without scrolling the page event.preventDefault() - const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key) - const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true) + + const children = this._getChildren().filter(element => !isDisabled(element)) + let nextActiveElement + + if ([HOME_KEY, END_KEY].includes(event.key)) { + nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1] + } else { + const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key) + nextActiveElement = getNextActiveElement(children, event.target, isNext, true) + } if (nextActiveElement) { nextActiveElement.focus({ preventScroll: true }) |
