]> git.ipfire.org Git - thirdparty/bootstrap.git/commitdiff
rewrite tab with new active shit
authorJacob Thornton <jacobthornton@gmail.com>
Wed, 19 Aug 2015 05:03:34 +0000 (22:03 -0700)
committerJacob Thornton <jacobthornton@gmail.com>
Wed, 19 Aug 2015 05:03:34 +0000 (22:03 -0700)
js/dist/tab.js
js/dist/tab.js.map
js/src/tab.js
js/tests/unit/tab.js
js/tests/visual/tab.html

index 33c22805830419999dc96e15b66516d58a587023..8b175ea48889cc68e39529247ce54f833f5894c7 100644 (file)
@@ -45,13 +45,14 @@ var Tab = (function ($) {
   var Selector = {
     A: 'a',
     LI: 'li',
-    LI_DROPDOWN: 'li.dropdown',
+    DROPDOWN: '.dropdown',
     UL: 'ul:not(.dropdown-menu)',
-    FADE_CHILD: '> .fade',
+    FADE_CHILD: '> .nav-item .fade, > .fade',
     ACTIVE: '.active',
-    ACTIVE_CHILD: '> .active',
+    ACTIVE_CHILD: '> .nav-item > .active, > .active',
     DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"]',
-    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu > .active'
+    DROPDOWN_TOGGLE: '.dropdown-toggle',
+    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
   };
 
   /**
@@ -83,7 +84,7 @@ var Tab = (function ($) {
       value: function show() {
         var _this = this;
 
-        if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).parent().hasClass(ClassName.ACTIVE)) {
+        if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE)) {
           return;
         }
 
@@ -95,10 +96,6 @@ var Tab = (function ($) {
         if (ulElement) {
           previous = $.makeArray($(ulElement).find(Selector.ACTIVE));
           previous = previous[previous.length - 1];
-
-          if (previous) {
-            previous = $(previous).find(Selector.A)[0];
-          }
         }
 
         var hideEvent = $.Event(Event.HIDE, {
@@ -123,7 +120,7 @@ var Tab = (function ($) {
           target = $(selector)[0];
         }
 
-        this._activate($(this._element).closest(Selector.LI)[0], ulElement);
+        this._activate(this._element, ulElement);
 
         var complete = function complete() {
           var hiddenEvent = $.Event(Event.HIDDEN, {
@@ -178,22 +175,16 @@ var Tab = (function ($) {
           $(active).removeClass(ClassName.ACTIVE);
 
           var dropdownChild = $(active).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
+
           if (dropdownChild) {
             $(dropdownChild).removeClass(ClassName.ACTIVE);
           }
 
-          var activeToggle = $(active).find(Selector.DATA_TOGGLE)[0];
-          if (activeToggle) {
-            activeToggle.setAttribute('aria-expanded', false);
-          }
+          active.setAttribute('aria-expanded', false);
         }
 
         $(element).addClass(ClassName.ACTIVE);
-
-        var elementToggle = $(element).find(Selector.DATA_TOGGLE)[0];
-        if (elementToggle) {
-          elementToggle.setAttribute('aria-expanded', true);
-        }
+        element.setAttribute('aria-expanded', true);
 
         if (isTransitioning) {
           Util.reflow(element);
@@ -204,15 +195,12 @@ var Tab = (function ($) {
 
         if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
 
-          var dropdownElement = $(element).closest(Selector.LI_DROPDOWN)[0];
+          var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
           if (dropdownElement) {
-            $(dropdownElement).addClass(ClassName.ACTIVE);
+            $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
           }
 
-          elementToggle = $(element).find(Selector.DATA_TOGGLE)[0];
-          if (elementToggle) {
-            elementToggle.setAttribute('aria-expanded', true);
-          }
+          element.setAttribute('aria-expanded', true);
         }
 
         if (callback) {
index 58eeccb93e6a45df1770a8640056f27f57b4fdd2..e76463c68669effc945288d95a75be5e5bfb3951 100644 (file)
@@ -1 +1 @@
-{"version":3,"sources":["js/src/tab.js"],"names":[],"mappings":"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","file":"js/src/tab.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tab = (($) => {\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME                = 'tab'\n  const VERSION             = '4.0.0'\n  const DATA_KEY            = 'bs.tab'\n  const EVENT_KEY           = `.${DATA_KEY}`\n  const DATA_API_KEY        = '.data-api'\n  const JQUERY_NO_CONFLICT  = $.fn[NAME]\n  const TRANSITION_DURATION = 150\n\n  const Event = {\n    HIDE           : `hide${EVENT_KEY}`,\n    HIDDEN         : `hidden${EVENT_KEY}`,\n    SHOW           : `show${EVENT_KEY}`,\n    SHOWN          : `shown${EVENT_KEY}`,\n    CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n  }\n\n  const ClassName = {\n    DROPDOWN_MENU : 'dropdown-menu',\n    ACTIVE        : 'active',\n    FADE          : 'fade',\n    IN            : 'in'\n  }\n\n  const Selector = {\n    A                     : 'a',\n    LI                    : 'li',\n    LI_DROPDOWN           : 'li.dropdown',\n    UL                    : 'ul:not(.dropdown-menu)',\n    FADE_CHILD            : '> .fade',\n    ACTIVE                : '.active',\n    ACTIVE_CHILD          : '> .active',\n    DATA_TOGGLE           : '[data-toggle=\"tab\"], [data-toggle=\"pill\"]',\n    DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu > .active'\n  }\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab {\n\n    constructor(element) {\n      this._element = element\n    }\n\n\n    // getters\n\n    static get VERSION() {\n      return VERSION\n    }\n\n\n    // public\n\n    show() {\n      if (this._element.parentNode &&\n         (this._element.parentNode.nodeType === Node.ELEMENT_NODE) &&\n         ($(this._element).parent().hasClass(ClassName.ACTIVE))) {\n        return\n      }\n\n      let target\n      let previous\n      let ulElement = $(this._element).closest(Selector.UL)[0]\n      let selector  = Util.getSelectorFromElement(this._element)\n\n      if (ulElement) {\n        previous = $.makeArray($(ulElement).find(Selector.ACTIVE))\n        previous = previous[previous.length - 1]\n\n        if (previous) {\n          previous = $(previous).find(Selector.A)[0]\n        }\n      }\n\n      let hideEvent = $.Event(Event.HIDE, {\n        relatedTarget: this._element\n      })\n\n      let showEvent = $.Event(Event.SHOW, {\n        relatedTarget: previous\n      })\n\n      if (previous) {\n        $(previous).trigger(hideEvent)\n      }\n\n      $(this._element).trigger(showEvent)\n\n      if (showEvent.isDefaultPrevented() ||\n         (hideEvent.isDefaultPrevented())) {\n        return\n      }\n\n      if (selector) {\n        target = $(selector)[0]\n      }\n\n      this._activate(\n        $(this._element).closest(Selector.LI)[0],\n        ulElement\n      )\n\n      let complete = () => {\n        let hiddenEvent = $.Event(Event.HIDDEN, {\n          relatedTarget: this._element\n        })\n\n        let shownEvent  = $.Event(Event.SHOWN, {\n          relatedTarget: previous\n        })\n\n        $(previous).trigger(hiddenEvent)\n        $(this._element).trigger(shownEvent)\n      }\n\n      if (target) {\n        this._activate(target, target.parentNode, complete)\n      } else {\n        complete()\n      }\n    }\n\n    dispose() {\n      $.removeClass(this._element, DATA_KEY)\n      this._element = null\n    }\n\n\n    // private\n\n    _activate(element, container, callback) {\n      let active          = $(container).find(Selector.ACTIVE_CHILD)[0]\n      let isTransitioning = callback\n        && Util.supportsTransitionEnd()\n        && ((active && $(active).hasClass(ClassName.FADE))\n           || Boolean($(container).find(Selector.FADE_CHILD)[0]))\n\n      let complete = $.proxy(\n        this._transitionComplete,\n        this,\n        element,\n        active,\n        isTransitioning,\n        callback\n      )\n\n      if (active && isTransitioning) {\n        $(active)\n          .one(Util.TRANSITION_END, complete)\n          .emulateTransitionEnd(TRANSITION_DURATION)\n\n      } else {\n        complete()\n      }\n\n      if (active) {\n        $(active).removeClass(ClassName.IN)\n      }\n    }\n\n    _transitionComplete(element, active, isTransitioning, callback) {\n      if (active) {\n        $(active).removeClass(ClassName.ACTIVE)\n\n        let dropdownChild = $(active).find(\n          Selector.DROPDOWN_ACTIVE_CHILD\n        )[0]\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName.ACTIVE)\n        }\n\n        let activeToggle = $(active).find(Selector.DATA_TOGGLE)[0]\n        if (activeToggle) {\n          activeToggle.setAttribute('aria-expanded', false)\n        }\n      }\n\n      $(element).addClass(ClassName.ACTIVE)\n\n      let elementToggle = $(element).find(Selector.DATA_TOGGLE)[0]\n      if (elementToggle) {\n        elementToggle.setAttribute('aria-expanded', true)\n      }\n\n      if (isTransitioning) {\n        Util.reflow(element)\n        $(element).addClass(ClassName.IN)\n      } else {\n        $(element).removeClass(ClassName.FADE)\n      }\n\n      if (element.parentNode &&\n         ($(element.parentNode).hasClass(ClassName.DROPDOWN_MENU))) {\n\n        let dropdownElement = $(element).closest(Selector.LI_DROPDOWN)[0]\n        if (dropdownElement) {\n          $(dropdownElement).addClass(ClassName.ACTIVE)\n        }\n\n        elementToggle = $(element).find(Selector.DATA_TOGGLE)[0]\n        if (elementToggle) {\n          elementToggle.setAttribute('aria-expanded', true)\n        }\n      }\n\n      if (callback) {\n        callback()\n      }\n    }\n\n\n    // static\n\n    static _jQueryInterface(config) {\n      return this.each(function () {\n        let $this = $(this)\n        let data  = $this.data(DATA_KEY)\n\n        if (!data) {\n          data = data = new Tab(this)\n          $this.data(DATA_KEY, data)\n        }\n\n        if (typeof config === 'string') {\n          data[config]()\n        }\n      })\n    }\n\n  }\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n  $(document)\n    .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    Tab._jQueryInterface.call($(this), 'show')\n  })\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME]             = Tab._jQueryInterface\n  $.fn[NAME].Constructor = Tab\n  $.fn[NAME].noConflict  = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT\n    return Tab._jQueryInterface\n  }\n\n  return Tab\n\n})(jQuery)\n\nexport default Tab\n"]}
\ No newline at end of file
+{"version":3,"sources":["js/src/tab.js"],"names":[],"mappings":"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","file":"js/src/tab.js","sourcesContent":["import Util from './util'\n\n\n/**\n * --------------------------------------------------------------------------\n * Bootstrap (v4.0.0): tab.js\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * --------------------------------------------------------------------------\n */\n\nconst Tab = (($) => {\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  const NAME                = 'tab'\n  const VERSION             = '4.0.0'\n  const DATA_KEY            = 'bs.tab'\n  const EVENT_KEY           = `.${DATA_KEY}`\n  const DATA_API_KEY        = '.data-api'\n  const JQUERY_NO_CONFLICT  = $.fn[NAME]\n  const TRANSITION_DURATION = 150\n\n  const Event = {\n    HIDE           : `hide${EVENT_KEY}`,\n    HIDDEN         : `hidden${EVENT_KEY}`,\n    SHOW           : `show${EVENT_KEY}`,\n    SHOWN          : `shown${EVENT_KEY}`,\n    CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`\n  }\n\n  const ClassName = {\n    DROPDOWN_MENU : 'dropdown-menu',\n    ACTIVE        : 'active',\n    FADE          : 'fade',\n    IN            : 'in'\n  }\n\n  const Selector = {\n    A                     : 'a',\n    LI                    : 'li',\n    DROPDOWN              : '.dropdown',\n    UL                    : 'ul:not(.dropdown-menu)',\n    FADE_CHILD            : '> .nav-item .fade, > .fade',\n    ACTIVE                : '.active',\n    ACTIVE_CHILD          : '> .nav-item > .active, > .active',\n    DATA_TOGGLE           : '[data-toggle=\"tab\"], [data-toggle=\"pill\"]',\n    DROPDOWN_TOGGLE       : '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'\n  }\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Class Definition\n   * ------------------------------------------------------------------------\n   */\n\n  class Tab {\n\n    constructor(element) {\n      this._element = element\n    }\n\n\n    // getters\n\n    static get VERSION() {\n      return VERSION\n    }\n\n\n    // public\n\n    show() {\n      if (this._element.parentNode &&\n         (this._element.parentNode.nodeType === Node.ELEMENT_NODE) &&\n         ($(this._element).hasClass(ClassName.ACTIVE))) {\n        return\n      }\n\n      let target\n      let previous\n      let ulElement = $(this._element).closest(Selector.UL)[0]\n      let selector  = Util.getSelectorFromElement(this._element)\n\n      if (ulElement) {\n        previous = $.makeArray($(ulElement).find(Selector.ACTIVE))\n        previous = previous[previous.length - 1]\n      }\n\n      let hideEvent = $.Event(Event.HIDE, {\n        relatedTarget: this._element\n      })\n\n      let showEvent = $.Event(Event.SHOW, {\n        relatedTarget: previous\n      })\n\n      if (previous) {\n        $(previous).trigger(hideEvent)\n      }\n\n      $(this._element).trigger(showEvent)\n\n      if (showEvent.isDefaultPrevented() ||\n         (hideEvent.isDefaultPrevented())) {\n        return\n      }\n\n      if (selector) {\n        target = $(selector)[0]\n      }\n\n      this._activate(\n        this._element,\n        ulElement\n      )\n\n      let complete = () => {\n        let hiddenEvent = $.Event(Event.HIDDEN, {\n          relatedTarget: this._element\n        })\n\n        let shownEvent  = $.Event(Event.SHOWN, {\n          relatedTarget: previous\n        })\n\n        $(previous).trigger(hiddenEvent)\n        $(this._element).trigger(shownEvent)\n      }\n\n      if (target) {\n        this._activate(target, target.parentNode, complete)\n      } else {\n        complete()\n      }\n    }\n\n    dispose() {\n      $.removeClass(this._element, DATA_KEY)\n      this._element = null\n    }\n\n\n    // private\n\n    _activate(element, container, callback) {\n      let active          = $(container).find(Selector.ACTIVE_CHILD)[0]\n      let isTransitioning = callback\n        && Util.supportsTransitionEnd()\n        && ((active && $(active).hasClass(ClassName.FADE))\n           || Boolean($(container).find(Selector.FADE_CHILD)[0]))\n\n      let complete = $.proxy(\n        this._transitionComplete,\n        this,\n        element,\n        active,\n        isTransitioning,\n        callback\n      )\n\n      if (active && isTransitioning) {\n        $(active)\n          .one(Util.TRANSITION_END, complete)\n          .emulateTransitionEnd(TRANSITION_DURATION)\n\n      } else {\n        complete()\n      }\n\n      if (active) {\n        $(active).removeClass(ClassName.IN)\n      }\n    }\n\n    _transitionComplete(element, active, isTransitioning, callback) {\n      if (active) {\n        $(active).removeClass(ClassName.ACTIVE)\n\n        let dropdownChild = $(active).find(\n          Selector.DROPDOWN_ACTIVE_CHILD\n        )[0]\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName.ACTIVE)\n        }\n\n        active.setAttribute('aria-expanded', false)\n      }\n\n      $(element).addClass(ClassName.ACTIVE)\n      element.setAttribute('aria-expanded', true)\n\n      if (isTransitioning) {\n        Util.reflow(element)\n        $(element).addClass(ClassName.IN)\n      } else {\n        $(element).removeClass(ClassName.FADE)\n      }\n\n      if (element.parentNode &&\n         ($(element.parentNode).hasClass(ClassName.DROPDOWN_MENU))) {\n\n        let dropdownElement = $(element).closest(Selector.DROPDOWN)[0]\n        if (dropdownElement) {\n          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)\n        }\n\n        element.setAttribute('aria-expanded', true)\n      }\n\n      if (callback) {\n        callback()\n      }\n    }\n\n\n    // static\n\n    static _jQueryInterface(config) {\n      return this.each(function () {\n        let $this = $(this)\n        let data  = $this.data(DATA_KEY)\n\n        if (!data) {\n          data = data = new Tab(this)\n          $this.data(DATA_KEY, data)\n        }\n\n        if (typeof config === 'string') {\n          data[config]()\n        }\n      })\n    }\n\n  }\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n  $(document)\n    .on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {\n    event.preventDefault()\n    Tab._jQueryInterface.call($(this), 'show')\n  })\n\n\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME]             = Tab._jQueryInterface\n  $.fn[NAME].Constructor = Tab\n  $.fn[NAME].noConflict  = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT\n    return Tab._jQueryInterface\n  }\n\n  return Tab\n\n})(jQuery)\n\nexport default Tab\n"]}
\ No newline at end of file
index 9d793417a44e110d6de148769de6890dfd88e3bf..4b311c24e35e7043f5603bb31d52ab8d8833448d 100644 (file)
@@ -43,13 +43,14 @@ const Tab = (($) => {
   const Selector = {
     A                     : 'a',
     LI                    : 'li',
-    LI_DROPDOWN           : 'li.dropdown',
+    DROPDOWN              : '.dropdown',
     UL                    : 'ul:not(.dropdown-menu)',
-    FADE_CHILD            : '> .fade',
+    FADE_CHILD            : '> .nav-item .fade, > .fade',
     ACTIVE                : '.active',
-    ACTIVE_CHILD          : '> .active',
+    ACTIVE_CHILD          : '> .nav-item > .active, > .active',
     DATA_TOGGLE           : '[data-toggle="tab"], [data-toggle="pill"]',
-    DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu > .active'
+    DROPDOWN_TOGGLE       : '.dropdown-toggle',
+    DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active'
   }
 
 
@@ -78,7 +79,7 @@ const Tab = (($) => {
     show() {
       if (this._element.parentNode &&
          (this._element.parentNode.nodeType === Node.ELEMENT_NODE) &&
-         ($(this._element).parent().hasClass(ClassName.ACTIVE))) {
+         ($(this._element).hasClass(ClassName.ACTIVE))) {
         return
       }
 
@@ -90,10 +91,6 @@ const Tab = (($) => {
       if (ulElement) {
         previous = $.makeArray($(ulElement).find(Selector.ACTIVE))
         previous = previous[previous.length - 1]
-
-        if (previous) {
-          previous = $(previous).find(Selector.A)[0]
-        }
       }
 
       let hideEvent = $.Event(Event.HIDE, {
@@ -120,7 +117,7 @@ const Tab = (($) => {
       }
 
       this._activate(
-        $(this._element).closest(Selector.LI)[0],
+        this._element,
         ulElement
       )
 
@@ -189,22 +186,16 @@ const Tab = (($) => {
         let dropdownChild = $(active).find(
           Selector.DROPDOWN_ACTIVE_CHILD
         )[0]
+
         if (dropdownChild) {
           $(dropdownChild).removeClass(ClassName.ACTIVE)
         }
 
-        let activeToggle = $(active).find(Selector.DATA_TOGGLE)[0]
-        if (activeToggle) {
-          activeToggle.setAttribute('aria-expanded', false)
-        }
+        active.setAttribute('aria-expanded', false)
       }
 
       $(element).addClass(ClassName.ACTIVE)
-
-      let elementToggle = $(element).find(Selector.DATA_TOGGLE)[0]
-      if (elementToggle) {
-        elementToggle.setAttribute('aria-expanded', true)
-      }
+      element.setAttribute('aria-expanded', true)
 
       if (isTransitioning) {
         Util.reflow(element)
@@ -216,15 +207,12 @@ const Tab = (($) => {
       if (element.parentNode &&
          ($(element.parentNode).hasClass(ClassName.DROPDOWN_MENU))) {
 
-        let dropdownElement = $(element).closest(Selector.LI_DROPDOWN)[0]
+        let dropdownElement = $(element).closest(Selector.DROPDOWN)[0]
         if (dropdownElement) {
-          $(dropdownElement).addClass(ClassName.ACTIVE)
+          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE)
         }
 
-        elementToggle = $(element).find(Selector.DATA_TOGGLE)[0]
-        if (elementToggle) {
-          elementToggle.setAttribute('aria-expanded', true)
-        }
+        element.setAttribute('aria-expanded', true)
       }
 
       if (callback) {
index 85d9f67a256175d0405d50ec9bd6ab6f1dfc581f..1eed75e90e3f8190acad8bdf36611f4d83edd9f6 100644 (file)
@@ -191,26 +191,26 @@ $(function () {
   QUnit.test('selected tab should have aria-expanded', function (assert) {
     assert.expect(8)
     var tabsHTML = '<ul class="nav nav-tabs">'
-        + '<li class="active"><a href="#home" toggle="tab" aria-expanded="true">Home</a></li>'
-        + '<li><a href="#profile" toggle="tab" aria-expanded="false">Profile</a></li>'
+        + '<li><a class="nav-item active" href="#home" toggle="tab" aria-expanded="true">Home</a></li>'
+        + '<li><a class="nav-item" href="#profile" toggle="tab" aria-expanded="false">Profile</a></li>'
         + '</ul>'
     var $tabs = $(tabsHTML).appendTo('#qunit-fixture')
 
     $tabs.find('li:first a').bootstrapTab('show')
-    assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
-    assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
+    assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
+    assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
 
     $tabs.find('li:last a').trigger('click')
-    assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after click, shown tab has aria-expanded = true')
-    assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after click, hidden tab has aria-expanded = false')
+    assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'after click, shown tab has aria-expanded = true')
+    assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'after click, hidden tab has aria-expanded = false')
 
     $tabs.find('li:first a').bootstrapTab('show')
-    assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
-    assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
+    assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'shown tab has aria-expanded = true')
+    assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'hidden tab has aria-expanded = false')
 
     $tabs.find('li:first a').trigger('click')
-    assert.strictEqual($tabs.find('.active a').attr('aria-expanded'), 'true', 'after second show event, shown tab still has aria-expanded = true')
-    assert.strictEqual($tabs.find('li:not(.active) a').attr('aria-expanded'), 'false', 'after second show event, hidden tab has aria-expanded = false')
+    assert.strictEqual($tabs.find('.active').attr('aria-expanded'), 'true', 'after second show event, shown tab still has aria-expanded = true')
+    assert.strictEqual($tabs.find('a:not(.active)').attr('aria-expanded'), 'false', 'after second show event, hidden tab has aria-expanded = false')
   })
 
 })
index ff6685fedec148e04ffd946ec1d9f34b700fe54f..22a918ed759c4fa6c49d47921af16f31b13afe9a 100644 (file)
   <h4>Tabs without fade</h4>
 
   <ul id="myTab" class="nav nav-tabs">
-    <li class="active nav-item"><a href="#home" class="nav-link" data-toggle="tab">Home</a></li>
+    <li class="nav-item"><a href="#home" class="nav-link active" data-toggle="tab">Home</a></li>
     <li class="nav-item"><a href="#profile" data-toggle="tab" class="nav-link">Profile</a></li>
     <li class="dropdown nav-item">
       <a href="#" id="myTabDrop1" class="dropdown-toggle nav-link" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1">
-        <li><a href="#dropdown1" tabindex="-1" data-toggle="tab">@fat</a></li>
-        <li><a href="#dropdown2" tabindex="-1" data-toggle="tab">@mdo</a></li>
-      </ul>
+      <div class="dropdown-menu" role="menu" aria-labelledby="myTabDrop1">
+        <a class="dropdown-item" href="#dropdown1" tabindex="-1" data-toggle="tab">@fat</a>
+        <a class="dropdown-item" href="#dropdown2" tabindex="-1" data-toggle="tab">@mdo</a>
+      </div>
     </li>
   </ul>
   <div id="myTabContent" class="tab-content">
   <h4>Tabs with fade</h4>
 
   <ul id="myTab1" class="nav nav-tabs">
-    <li class="active nav-item"><a class="nav-link" href="#home1" data-toggle="tab">Home</a></li>
+    <li class="nav-item"><a class="nav-link active" href="#home1" data-toggle="tab">Home</a></li>
     <li class="nav-item"><a class="nav-link" href="#profile1" data-toggle="tab">Profile</a></li>
     <li class="dropdown nav-item">
       <a href="#" id="myTabDrop2" class="dropdown-toggle nav-link" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop2">
-        <li><a href="#dropdown1-1" tabindex="-1" data-toggle="tab">@fat</a></li>
-        <li><a href="#dropdown1-2" tabindex="-1" data-toggle="tab">@mdo</a></li>
-      </ul>
+      <div class="dropdown-menu" role="menu" aria-labelledby="myTabDrop2">
+        <a class="dropdown-item" href="#dropdown1-1" tabindex="-1" data-toggle="tab">@fat</a>
+        <a class="dropdown-item" href="#dropdown1-2" tabindex="-1" data-toggle="tab">@mdo</a>
+      </div>
     </li>
   </ul>
   <div id="myTabContent1" class="tab-content">
     <li class="nav-item"><a class="nav-link" href="#profile2" data-toggle="tab">Profile</a></li>
     <li class="dropdown nav-item">
       <a href="#" id="myTabDrop3" class="dropdown-toggle nav-link" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop3">
-        <li><a href="#dropdown2-1" tabindex="-1" data-toggle="tab">@fat</a></li>
-        <li><a href="#dropdown2-2" tabindex="-1" data-toggle="tab">@mdo</a></li>
-      </ul>
+      <div class="dropdown-menu" role="menu" aria-labelledby="myTabDrop3">
+        <a class="dropdown-item" href="#dropdown2-1" tabindex="-1" data-toggle="tab">@fat</a>
+        <a class="dropdown-item" href="#dropdown2-2" tabindex="-1" data-toggle="tab">@mdo</a>
+      </div>
     </li>
   </ul>
   <div id="myTabContent2" class="tab-content">
     <li class="nav-item"><a class="nav-link" href="#profile3" data-toggle="tab">Profile</a></li>
     <li class="dropdown nav-item">
       <a href="#" id="myTabDrop4" class="dropdown-toggle nav-link" data-toggle="dropdown">Dropdown <b class="caret"></b></a>
-      <ul class="dropdown-menu" role="menu" aria-labelledby="myTabDrop4">
-        <li><a href="#dropdown3-1" tabindex="-1" data-toggle="tab">@fat</a></li>
-        <li><a href="#dropdown3-2" tabindex="-1" data-toggle="tab">@mdo</a></li>
-      </ul>
+      <div class="dropdown-menu" role="menu" aria-labelledby="myTabDrop4">
+        <a class="dropdown-item" href="#dropdown3-1" tabindex="-1" data-toggle="tab">@fat</a>
+        <a class="dropdown-item" href="#dropdown3-2" tabindex="-1" data-toggle="tab">@mdo</a>
+      </div>
     </li>
   </ul>
   <div id="myTabContent3" class="tab-content">