return
}
- const parent = Dropdown._getParentFromElement(this._element)
const isActive = $(this._menu).hasClass(ClassName.SHOW)
Dropdown._clearMenus()
return
}
+ this.show(true)
+ }
+
+ show(usePopper = false) {
+ if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
+ return
+ }
+
const relatedTarget = {
relatedTarget: this._element
}
const showEvent = $.Event(Event.SHOW, relatedTarget)
+ const parent = Dropdown._getParentFromElement(this._element)
$(parent).trigger(showEvent)
}
// Disable totally Popper.js for Dropdown in Navbar
- if (!this._inNavbar) {
+ if (!this._inNavbar && usePopper) {
/**
* Check for Popper dependency
* Popper - https://popper.js.org
.trigger($.Event(Event.SHOWN, relatedTarget))
}
- show() {
- if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) {
- return
- }
-
- const relatedTarget = {
- relatedTarget: this._element
- }
- const showEvent = $.Event(Event.SHOW, relatedTarget)
- const parent = Dropdown._getParentFromElement(this._element)
-
- $(parent).trigger(showEvent)
-
- if (showEvent.isDefaultPrevented()) {
- return
- }
-
- $(this._menu).toggleClass(ClassName.SHOW)
- $(parent)
- .toggleClass(ClassName.SHOW)
- .trigger($.Event(Event.SHOWN, relatedTarget))
- }
-
hide() {
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) {
return
return
}
+ if (this._popper) {
+ this._popper.destroy()
+ }
+
$(this._menu).toggleClass(ClassName.SHOW)
$(parent)
.toggleClass(ClassName.SHOW)
})
QUnit.test('should show dropdown', function (assert) {
- assert.expect(2)
+ assert.expect(3)
var dropdownHTML =
'<div class="dropdown">' +
$dropdown
.parent('.dropdown')
.on('show.bs.dropdown', function () {
+ assert.ok(dropdown._popper === null)
assert.ok(true, 'show was fired')
})
.on('shown.bs.dropdown', function () {
dropdown1.toggle()
})
+
+ QUnit.test('should hide a dropdown and destroy popper', function (assert) {
+ assert.expect(1)
+ var done = assert.async()
+
+ var fixtureHtml = [
+ '<div class="dropdown">',
+ ' <button href="#" class="btn dropdown-toggle" data-toggle="dropdown">Dropdown</button>',
+ ' <div class="dropdown-menu">',
+ ' <a class="dropdown-item" href="#">Secondary link</a>',
+ ' </div>',
+ '</div>'
+ ].join('')
+
+ $(fixtureHtml).appendTo('#qunit-fixture')
+
+ var $dropdownEl = $('.dropdown')
+ var dropdown = $('[data-toggle="dropdown"]')
+ .bootstrapDropdown()
+ .data('bs.dropdown')
+ var spyPopper
+
+ $dropdownEl.one('shown.bs.dropdown', function () {
+ spyPopper = sinon.spy(dropdown._popper, 'destroy')
+ dropdown.hide()
+ })
+
+ $dropdownEl.one('hidden.bs.dropdown', function () {
+ assert.ok(spyPopper.called)
+ done()
+ })
+
+ dropdown.show(true)
+ })
})