]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Dropdown: get dropdown's parent in one place
authorGeoSot <geo.sotis@gmail.com>
Mon, 13 Dec 2021 00:10:26 +0000 (02:10 +0200)
committerXhmikosR <xhmikosr@gmail.com>
Sun, 30 Jan 2022 16:01:09 +0000 (18:01 +0200)
js/src/dom/selector-engine.js
js/src/dropdown.js

index 7f4165afcc515241ad1e388a84a31ca2adbc300e..ed565bebbf4e587cff64fce73018fe2e931c0748 100644 (file)
@@ -49,7 +49,7 @@ const SelectorEngine = {
 
     return []
   },
-
+  // TODO: this is now unused; remove later along with prev()
   next(element, selector) {
     let next = element.nextElementSibling
 
index 7f3b92655b6341fb23332e89947bad243cafe21d..efc3f2be3ca681a2307933eaf153aa1ba0eb115f 100644 (file)
@@ -90,7 +90,8 @@ class Dropdown extends BaseComponent {
     super(element, config)
 
     this._popper = null
-    this._menu = this._getMenuElement()
+    this._parent = getElementFromSelector(this._element) || this._element.parentNode // dropdown wrapper
+    this._menu = SelectorEngine.findOne(SELECTOR_MENU, this._parent)
     this._inNavbar = this._detectNavbar()
   }
 
@@ -127,15 +128,13 @@ class Dropdown extends BaseComponent {
       return
     }
 
-    const parent = getElementFromSelector(this._element) || this._element.parentNode
-
-    this._createPopper(parent)
+    this._createPopper()
 
     // If this is a touch-enabled device we add extra
     // empty mouseover listeners to the body's immediate children;
     // only needed because of broken event delegation on iOS
     // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-    if ('ontouchstart' in document.documentElement && !parent.closest(SELECTOR_NAVBAR_NAV)) {
+    if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) {
       for (const element of [].concat(...document.body.children)) {
         EventHandler.on(element, 'mouseover', noop)
       }
@@ -215,7 +214,7 @@ class Dropdown extends BaseComponent {
     return config
   }
 
-  _createPopper(parent) {
+  _createPopper() {
     if (typeof Popper === 'undefined') {
       throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)')
     }
@@ -223,7 +222,7 @@ class Dropdown extends BaseComponent {
     let referenceElement = this._element
 
     if (this._config.reference === 'parent') {
-      referenceElement = parent
+      referenceElement = this._parent
     } else if (isElement(this._config.reference)) {
       referenceElement = getElement(this._config.reference)
     } else if (typeof this._config.reference === 'object') {
@@ -238,12 +237,8 @@ class Dropdown extends BaseComponent {
     return element.classList.contains(CLASS_NAME_SHOW)
   }
 
-  _getMenuElement() {
-    return SelectorEngine.next(this._element, SELECTOR_MENU)[0]
-  }
-
   _getPlacement() {
-    const parentDropdown = this._element.parentNode
+    const parentDropdown = this._parent
 
     if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) {
       return PLACEMENT_RIGHT