]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
Backport #33634 (#33649)
authorCarson Sievert <cpsievert1@gmail.com>
Wed, 28 Apr 2021 04:02:22 +0000 (23:02 -0500)
committerGitHub <noreply@github.com>
Wed, 28 Apr 2021 04:02:22 +0000 (07:02 +0300)
Dropdown: support `.dropdown-item` wrapped in `<li>` tags

js/src/tab.js
js/tests/unit/tab.js

index e9a6f555fe616c947e03262cdcddf7b4f5802c63..bcbb5c5ea258e0d7aded1f15aaa4d30644bfeb6b 100644 (file)
@@ -187,7 +187,12 @@ class Tab {
       element.classList.add(CLASS_NAME_SHOW)
     }
 
-    if (element.parentNode && $(element.parentNode).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
+    let parent = element.parentNode
+    if (parent && parent.nodeName === 'LI') {
+      parent = parent.parentNode
+    }
+
+    if (parent && $(parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
       const dropdownElement = $(element).closest(SELECTOR_DROPDOWN)[0]
 
       if (dropdownElement) {
index a0c4ddf155475e68e51917d84440d07f8c496e89..9c9b286f04b9d1052f1f67f3cb534dac0a12d3c3 100644 (file)
@@ -345,6 +345,28 @@ $(function () {
     assert.notOk($tabs.find('li:last-child .dropdown-menu a:first-child').hasClass('active'))
   })
 
+  QUnit.test('should support li > .dropdown-item', function (assert) {
+    assert.expect(2)
+    var tabsHTML = [
+      '<ul class="nav nav-tabs">',
+      '  <li class="nav-item"><a class="nav-link active" href="#home" data-toggle="tab">Home</a></li>',
+      '  <li class="nav-item"><a class="nav-link" href="#profile" data-toggle="tab">Profile</a></li>',
+      '  <li class="nav-item dropdown">',
+      '    <a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#">Dropdown</a>',
+      '    <ul class="dropdown-menu">',
+      '      <li><a class="dropdown-item" href="#dropdown1" id="dropdown1-tab" data-toggle="tab">@fat</a></li>',
+      '      <li><a class="dropdown-item" href="#dropdown2" id="dropdown2-tab" data-toggle="tab">@mdo</a></li>',
+      '    </ul>',
+      '  </li>',
+      '</ul>'
+    ].join('')
+    var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
+
+    $tabs.find('.dropdown-item').trigger('click')
+    assert.ok($tabs.find('.dropdown-item').hasClass('active'))
+    assert.notOk($tabs.find('.nav-link:not(.dropdown-toggle)').hasClass('active'))
+  })
+
   QUnit.test('Nested tabs', function (assert) {
     assert.expect(2)
     var done = assert.async()