aboutsummaryrefslogtreecommitdiff
path: root/js/src/tab.js
diff options
context:
space:
mode:
authorKyle Tsang <[email protected]>2023-07-23 12:06:14 -0700
committerGitHub <[email protected]>2023-07-23 22:06:14 +0300
commitd45cc7ef516de676bfaa2b97fe10b71e98ff6f3e (patch)
treeebaf63d2ffa2fa1f5eea6b6487ace1389a270a72 /js/src/tab.js
parent8fcfce1ebd988fd4e5ed2f51acaa5c49e6b301c9 (diff)
downloadbootstrap-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.js16
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 })