]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Fix dropdowns
authorlouismaxime.piton <louismaxime.piton@orange.com>
Tue, 8 Mar 2022 11:34:21 +0000 (12:34 +0100)
committerMark Otto <otto@github.com>
Tue, 8 Mar 2022 22:37:44 +0000 (14:37 -0800)
js/src/dropdown.js
scss/_dropdown.scss

index c93739b5238f33a495d48e68eaa156bdac63f052..65b3aa372ab72fbd7253b474fb37062a165318ff 100644 (file)
@@ -48,6 +48,8 @@ const CLASS_NAME_SHOW = 'show'
 const CLASS_NAME_DROPUP = 'dropup'
 const CLASS_NAME_DROPEND = 'dropend'
 const CLASS_NAME_DROPSTART = 'dropstart'
+const CLASS_NAME_DROPUP_CENTER = 'dropup-center'
+const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'
 
 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'
 const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE}.${CLASS_NAME_SHOW}`
@@ -62,6 +64,8 @@ const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'
 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'
 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'
 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'
+const PLACEMENT_TOPCENTER = 'top'
+const PLACEMENT_BOTTOMCENTER = 'bottom'
 
 const Default = {
   offset: [0, 2],
@@ -248,6 +252,14 @@ class Dropdown extends BaseComponent {
       return PLACEMENT_LEFT
     }
 
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) {
+      return PLACEMENT_TOPCENTER
+    }
+
+    if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) {
+      return PLACEMENT_BOTTOMCENTER
+    }
+
     // We need to trim the value because custom properties can also include spaces
     const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'
 
@@ -400,8 +412,12 @@ class Dropdown extends BaseComponent {
     const instance = Dropdown.getOrCreateInstance(getToggleButton)
 
     if (isEscapeEvent) {
-      instance.hide()
-      getToggleButton.focus()
+      if (getToggleButton.classList.contains(CLASS_NAME_SHOW)) {
+        instance.hide()
+        getToggleButton.focus()
+        event.stopPropagation()
+      }
+
       return
     }
 
index 6f8acc1aa42a2e962256dbf3a708056100365e1a..e04f91cb0f96aeb4058defa84fb7302de8867e2a 100644 (file)
@@ -51,7 +51,7 @@
   min-width: var(--#{$variable-prefix}dropdown-min-width);
   padding: var(--#{$variable-prefix}dropdown-padding-y) var(--#{$variable-prefix}dropdown-padding-x);
   margin: 0; // Override default margin of ul
-  @include font-size(var(#{$variable-prefix}dropdown-font-size));
+  @include font-size(var(--#{$variable-prefix}dropdown-font-size));
   color: var(--#{$variable-prefix}dropdown-color);
   text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
   list-style: none;