Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/twbs/bootstrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeoSot <geo.sotis@gmail.com>2021-04-20 08:32:52 +0300
committerGitHub <noreply@github.com>2021-04-20 08:32:52 +0300
commit079f2cd90c247225eb71dff4d514faf50f653416 (patch)
treeb72d54149b14fb4179456bc7ec595b6b0977d498
parent0bbe45cd977ae69f11b4cdd55e5d5be08e4a137a (diff)
Offcanvas.js: If scroll is allowed, should allow focus on other elements (#33677)
-rw-r--r--js/src/offcanvas.js2
-rw-r--r--js/tests/unit/offcanvas.spec.js34
2 files changed, 35 insertions, 1 deletions
diff --git a/js/src/offcanvas.js b/js/src/offcanvas.js
index 2b6335b391..7fcdfb48a8 100644
--- a/js/src/offcanvas.js
+++ b/js/src/offcanvas.js
@@ -112,6 +112,7 @@ class Offcanvas extends BaseComponent {
if (!this._config.scroll) {
scrollBarHide()
+ this._enforceFocusOnElement(this._element)
}
this._element.removeAttribute('aria-hidden')
@@ -121,7 +122,6 @@ class Offcanvas extends BaseComponent {
const completeCallBack = () => {
EventHandler.trigger(this._element, EVENT_SHOWN, { relatedTarget })
- this._enforceFocusOnElement(this._element)
}
const transitionDuration = getTransitionDurationFromElement(this._element)
diff --git a/js/tests/unit/offcanvas.spec.js b/js/tests/unit/offcanvas.spec.js
index 67831ad249..2419e5723c 100644
--- a/js/tests/unit/offcanvas.spec.js
+++ b/js/tests/unit/offcanvas.spec.js
@@ -220,6 +220,24 @@ describe('Offcanvas', () => {
offCanvas.show()
})
+
+ it('should not enforce focus if focus scroll is allowed', done => {
+ fixtureEl.innerHTML = '<div class="offcanvas"></div>'
+
+ const offCanvasEl = fixtureEl.querySelector('.offcanvas')
+ const offCanvas = new Offcanvas(offCanvasEl, {
+ scroll: true
+ })
+
+ spyOn(offCanvas, '_enforceFocusOnElement')
+
+ offCanvasEl.addEventListener('shown.bs.offcanvas', () => {
+ expect(offCanvas._enforceFocusOnElement).not.toHaveBeenCalled()
+ done()
+ })
+
+ offCanvas.show()
+ })
})
describe('toggle', () => {
@@ -328,6 +346,22 @@ describe('Offcanvas', () => {
expect(instance).not.toBeNull()
expect(Offcanvas.prototype.show).toHaveBeenCalled()
})
+
+ it('should enforce focus', done => {
+ fixtureEl.innerHTML = '<div class="offcanvas"></div>'
+
+ const offCanvasEl = fixtureEl.querySelector('.offcanvas')
+ const offCanvas = new Offcanvas(offCanvasEl)
+
+ spyOn(offCanvas, '_enforceFocusOnElement')
+
+ offCanvasEl.addEventListener('shown.bs.offcanvas', () => {
+ expect(offCanvas._enforceFocusOnElement).toHaveBeenCalled()
+ done()
+ })
+
+ offCanvas.show()
+ })
})
describe('hide', () => {