aboutsummaryrefslogtreecommitdiff
path: root/js/src
diff options
context:
space:
mode:
authorMark Otto <[email protected]>2017-06-17 19:03:25 -0700
committerMark Otto <[email protected]>2017-06-17 19:03:25 -0700
commit58bd8fdf2b7c59577737e26f821841647cf11f8e (patch)
treee010c48e321b520cd1f56abcd4d52edddfa552eb /js/src
parentc5170db84467abf3a901d7e8df21d8e84a987743 (diff)
parent3e25ebb58742c662743540345a7bc193e57b7aa9 (diff)
downloadbootstrap-58bd8fdf2b7c59577737e26f821841647cf11f8e.tar.xz
bootstrap-58bd8fdf2b7c59577737e26f821841647cf11f8e.zip
Merge branch 'v4-dev' of https://github.com/twbs/bootstrap into v4-dev
Diffstat (limited to 'js/src')
-rw-r--r--js/src/dropdown.js53
1 files changed, 37 insertions, 16 deletions
diff --git a/js/src/dropdown.js b/js/src/dropdown.js
index 4ed0210a5..057cfa433 100644
--- a/js/src/dropdown.js
+++ b/js/src/dropdown.js
@@ -96,10 +96,11 @@ const Dropdown = (($) => {
class Dropdown {
constructor(element, config) {
- this._element = element
- this._popper = null
- this._config = this._getConfig(config)
- this._menu = this._getMenuElement()
+ this._element = element
+ this._popper = null
+ this._config = this._getConfig(config)
+ this._menu = this._getMenuElement()
+ this._inNavbar = this._detectNavbar()
this._addEventListeners()
}
@@ -153,17 +154,7 @@ const Dropdown = (($) => {
element = parent
}
}
- this._popper = new Popper(element, this._menu, {
- placement : this._getPlacement(),
- modifiers : {
- offset : {
- offset : this._config.offset
- },
- flip : {
- enabled : this._config.flip
- }
- }
- })
+ this._popper = new Popper(element, this._menu, this._getPopperConfig())
// if this is a touch-enabled device we add extra
// empty mouseover listeners to the body's immediate children;
@@ -195,6 +186,7 @@ const Dropdown = (($) => {
}
update() {
+ this._inNavbar = this._detectNavbar()
if (this._popper !== null) {
this._popper.scheduleUpdate()
}
@@ -253,10 +245,39 @@ const Dropdown = (($) => {
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) {
placement = AttachmentMap.BOTTOMEND
}
-
return placement
}
+ _detectNavbar() {
+ return $(this._element).closest('.navbar').length > 0
+ }
+
+ _getPopperConfig() {
+ const popperConfig = {
+ placement : this._getPlacement(),
+ modifiers : {
+ offset : {
+ offset : this._config.offset
+ },
+ flip : {
+ enabled : this._config.flip
+ }
+ }
+ }
+
+ if (this._inNavbar) {
+ popperConfig.modifiers.AfterApplyStyle = {
+ enabled: true,
+ order: 901, // ApplyStyle order + 1
+ fn: () => {
+ // reset Popper styles
+ $(this._menu).attr('style', '')
+ }
+ }
+ }
+ return popperConfig
+ }
+
// static
static _jQueryInterface(config) {