diff options
| author | Mark Otto <[email protected]> | 2017-06-17 19:03:25 -0700 |
|---|---|---|
| committer | Mark Otto <[email protected]> | 2017-06-17 19:03:25 -0700 |
| commit | 58bd8fdf2b7c59577737e26f821841647cf11f8e (patch) | |
| tree | e010c48e321b520cd1f56abcd4d52edddfa552eb /js/src | |
| parent | c5170db84467abf3a901d7e8df21d8e84a987743 (diff) | |
| parent | 3e25ebb58742c662743540345a7bc193e57b7aa9 (diff) | |
| download | bootstrap-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.js | 53 |
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) { |
