From: Ryan Weaver Date: Fri, 21 May 2021 22:16:05 +0000 (-0400) Subject: Fix bug where backdrop calls method on null if it is already removed from the body... X-Git-Tag: v5.0.2~75 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a2b5901efc6de12bb828f8dda118ddccbcd545cf;p=thirdparty%2Fbootstrap.git Fix bug where backdrop calls method on null if it is already removed from the body (#34014) Co-authored-by: Rohit Sharma --- diff --git a/js/src/util/backdrop.js b/js/src/util/backdrop.js index 4c18e99c08..c05c221ddf 100644 --- a/js/src/util/backdrop.js +++ b/js/src/util/backdrop.js @@ -116,7 +116,11 @@ class Backdrop { EventHandler.off(this._element, EVENT_MOUSEDOWN) - this._getElement().parentNode.removeChild(this._element) + const { parentNode } = this._getElement() + if (parentNode) { + parentNode.removeChild(this._element) + } + this._isAppended = false } diff --git a/js/tests/unit/util/backdrop.spec.js b/js/tests/unit/util/backdrop.spec.js index ae342b0929..02dea5a25b 100644 --- a/js/tests/unit/util/backdrop.spec.js +++ b/js/tests/unit/util/backdrop.spec.js @@ -129,6 +129,25 @@ describe('Backdrop', () => { }) }) + it('should not error if the backdrop no longer has a parent', done => { + const instance = new Backdrop({ + isVisible: true, + isAnimated: true + }) + const getElements = () => document.querySelectorAll(CLASS_BACKDROP) + + instance.show(() => { + instance.hide(() => { + expect(getElements().length).toEqual(0) + + // replace the fixture, which was just wiped out + fixtureEl = getFixture() + done() + }) + document.body.innerHTML = 'changed' + }) + }) + describe('click callback', () => { it('it should execute callback on click', done => { const spy = jasmine.createSpy('spy')