diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index e39ef1961..787eb6379 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -308,7 +308,7 @@ class Dropdown extends BaseComponent {
this._menu.style.removeProperty('transform')
Manipulator.setDataAttribute(this._menu, 'popper', 'static') // todo:v6 remove?
} else {
- this._menu.style.position = state.styles.popper.position
+ this._menu.style.position = state.styles.popper.position // put back position
}
}
}]
diff --git a/js/tests/unit/dropdown.spec.js b/js/tests/unit/dropdown.spec.js
index ec87159d6..c1269d8ad 100644
--- a/js/tests/unit/dropdown.spec.js
+++ b/js/tests/unit/dropdown.spec.js
@@ -1094,27 +1094,6 @@ describe('Dropdown', () => {
expect(spyUpdate).toHaveBeenCalled()
})
-
- it('should just detect navbar on update', () => {
- fixtureEl.innerHTML = [
- '
',
- ' ',
- ' ',
- '
'
- ].join('')
-
- const btnDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
- const dropdown = new Dropdown(btnDropdown)
-
- const spy = spyOn(dropdown, '_detectNavbar')
-
- dropdown.update()
-
- expect(dropdown._popper).toBeNull()
- expect(spy).toHaveBeenCalled()
- })
})
describe('data-api', () => {
@@ -1224,6 +1203,9 @@ describe('Dropdown', () => {
btnDropdown.addEventListener('shown.bs.dropdown', () => {
setTimeout(() => {
expect(dropdownMenu.getAttribute('data-bs-popper')).toEqual('static')
+ expect(dropdownMenu.style.getPropertyValue('margin')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('position')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('transform')).toEqual('')
dropdown.hide()
})
})
@@ -1237,7 +1219,7 @@ describe('Dropdown', () => {
})
})
- it('should not use Popper if display set to static', () => {
+ it('should handle Popper if display set to static', () => {
return new Promise(resolve => {
fixtureEl.innerHTML = [
'',
@@ -1253,7 +1235,51 @@ describe('Dropdown', () => {
btnDropdown.addEventListener('shown.bs.dropdown', () => {
// Popper adds this attribute when we use it
+
expect(dropdownMenu.getAttribute('data-popper-placement')).toBeNull()
+ setTimeout(() => {
+ expect(dropdownMenu.style.getPropertyValue('margin')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('position')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('transform')).toEqual('')
+ resolve()
+ })
+ })
+
+ btnDropdown.click()
+ })
+ })
+
+ it('should handle Popper if css position is set to static', () => {
+ return new Promise(resolve => {
+ fixtureEl.innerHTML = [
+ '',
+ '
',
+ ' ',
+ ' ',
+ '
'
+ ].join('')
+
+ const btnDropdown = fixtureEl.querySelector('[data-bs-toggle="dropdown"]')
+ const dropdownMenu = fixtureEl.querySelector('.dropdown-menu')
+
+ btnDropdown.addEventListener('shown.bs.dropdown', () => {
+ // Popper adds this attribute when we use it
+ expect(dropdownMenu.getAttribute('data-popper-placement')).toBeNull()
+ setTimeout(() => {
+ expect(dropdownMenu.getAttribute('data-bs-popper')).toEqual('static')
+ expect(dropdownMenu.style.getPropertyValue('margin')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('position')).toEqual('')
+ expect(dropdownMenu.style.getPropertyValue('transform')).toEqual('')
+ btnDropdown.click()
+ })
+ })
+
+ btnDropdown.addEventListener('hidden.bs.dropdown', () => {
+ expect(dropdownMenu.getAttribute('data-bs-popper')).toBeNull()
resolve()
})
@@ -1866,7 +1892,7 @@ describe('Dropdown', () => {
const dropdown = new Dropdown(triggerDropdown)
const button = fixtureEl.querySelector('button[data-bs-toggle="dropdown"]')
- const spy = spyOn(dropdown, 'toggle')
+ spyOn(dropdown, 'toggle')
// Key escape
button.focus()
@@ -1876,7 +1902,7 @@ describe('Dropdown', () => {
button.dispatchEvent(keydownEscape)
setTimeout(() => {
- expect(spy).not.toHaveBeenCalled()
+ expect(dropdown.toggle).not.toHaveBeenCalled()
expect(triggerDropdown).not.toHaveClass('show')
resolve()
}, 20)