diff options
author | GeoSot <geo.sotis@gmail.com> | 2021-04-20 08:32:52 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-20 08:32:52 +0300 |
commit | 079f2cd90c247225eb71dff4d514faf50f653416 (patch) | |
tree | b72d54149b14fb4179456bc7ec595b6b0977d498 | |
parent | 0bbe45cd977ae69f11b4cdd55e5d5be08e4a137a (diff) |
Offcanvas.js: If scroll is allowed, should allow focus on other elements (#33677)
-rw-r--r-- | js/src/offcanvas.js | 2 | ||||
-rw-r--r-- | js/tests/unit/offcanvas.spec.js | 34 |
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', () => { |