tab.js 7.41 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
Mark Otto's avatar
dist    
Mark Otto committed
2

Mark Otto's avatar
dist    
Mark Otto committed
3
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
fat's avatar
tab es6  
fat committed
4
5
6

/**
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
7
 * Bootstrap (v4.1.2): tab.js
fat's avatar
tab es6  
fat committed
8
9
10
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */
Mark Otto's avatar
dist    
Mark Otto committed
11
var Tab = function ($) {
fat's avatar
tab es6  
fat committed
12
13
14
15
16
17
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */
  var NAME = 'tab';
Mark Otto's avatar
Mark Otto committed
18
  var VERSION = '4.1.2';
fat's avatar
tab es6  
fat committed
19
  var DATA_KEY = 'bs.tab';
Mark Otto's avatar
dist    
Mark Otto committed
20
  var EVENT_KEY = "." + DATA_KEY;
fat's avatar
fat committed
21
  var DATA_API_KEY = '.data-api';
fat's avatar
tab es6  
fat committed
22
23
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var Event = {
Mark Otto's avatar
dist    
Mark Otto committed
24
25
26
27
28
    HIDE: "hide" + EVENT_KEY,
    HIDDEN: "hidden" + EVENT_KEY,
    SHOW: "show" + EVENT_KEY,
    SHOWN: "shown" + EVENT_KEY,
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
fat's avatar
tab es6  
fat committed
29
30
31
32
  };
  var ClassName = {
    DROPDOWN_MENU: 'dropdown-menu',
    ACTIVE: 'active',
Mark Otto's avatar
grunt    
Mark Otto committed
33
    DISABLED: 'disabled',
fat's avatar
tab es6  
fat committed
34
    FADE: 'fade',
Mark Otto's avatar
grunt    
Mark Otto committed
35
    SHOW: 'show'
fat's avatar
tab es6  
fat committed
36
37
  };
  var Selector = {
38
    DROPDOWN: '.dropdown',
Mark Otto's avatar
grunt    
Mark Otto committed
39
    NAV_LIST_GROUP: '.nav, .list-group',
fat's avatar
tab es6  
fat committed
40
    ACTIVE: '.active',
Mark Otto's avatar
dist    
Mark Otto committed
41
    ACTIVE_UL: '> li > .active',
Mark Otto's avatar
grunt    
Mark Otto committed
42
    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
43
44
    DROPDOWN_TOGGLE: '.dropdown-toggle',
    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
Mark Otto's avatar
dist    
Mark Otto committed
45
46
47
48
49
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
tab es6  
fat committed
50

Mark Otto's avatar
dist    
Mark Otto committed
51
  };
fat's avatar
tab es6  
fat committed
52

Mark Otto's avatar
dist    
Mark Otto committed
53
54
55
56
  var Tab =
  /*#__PURE__*/
  function () {
    function Tab(element) {
fat's avatar
tab es6  
fat committed
57
      this._element = element;
Mark Otto's avatar
dist    
Mark Otto committed
58
    } // Getters
fat's avatar
tab es6  
fat committed
59

Jacob Thornton's avatar
Jacob Thornton committed
60

Mark Otto's avatar
dist    
Mark Otto committed
61
    var _proto = Tab.prototype;
fat's avatar
tab es6  
fat committed
62

Mark Otto's avatar
dist    
Mark Otto committed
63
    // Public
Mark Otto's avatar
dist    
Mark Otto committed
64
65
    _proto.show = function show() {
      var _this = this;
fat's avatar
tab es6  
fat committed
66

Mark Otto's avatar
dist    
Mark Otto committed
67
68
69
      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) {
        return;
      }
fat's avatar
tab es6  
fat committed
70

Mark Otto's avatar
dist    
Mark Otto committed
71
72
73
74
      var target;
      var previous;
      var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0];
      var selector = Util.getSelectorFromElement(this._element);
fat's avatar
tab es6  
fat committed
75

Mark Otto's avatar
dist    
Mark Otto committed
76
77
78
79
80
      if (listElement) {
        var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE;
        previous = $.makeArray($(listElement).find(itemSelector));
        previous = previous[previous.length - 1];
      }
fat's avatar
tab es6  
fat committed
81

Mark Otto's avatar
dist    
Mark Otto committed
82
83
84
85
86
87
      var hideEvent = $.Event(Event.HIDE, {
        relatedTarget: this._element
      });
      var showEvent = $.Event(Event.SHOW, {
        relatedTarget: previous
      });
fat's avatar
tab es6  
fat committed
88

Mark Otto's avatar
dist    
Mark Otto committed
89
90
91
      if (previous) {
        $(previous).trigger(hideEvent);
      }
fat's avatar
tab es6  
fat committed
92

Mark Otto's avatar
dist    
Mark Otto committed
93
      $(this._element).trigger(showEvent);
fat's avatar
tab es6  
fat committed
94

Mark Otto's avatar
dist    
Mark Otto committed
95
96
97
      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
        return;
      }
fat's avatar
tab es6  
fat committed
98

Mark Otto's avatar
dist    
Mark Otto committed
99
      if (selector) {
Mark Otto's avatar
dist    
Mark Otto committed
100
        target = document.querySelector(selector);
Mark Otto's avatar
dist    
Mark Otto committed
101
      }
fat's avatar
tab es6  
fat committed
102

Mark Otto's avatar
dist    
Mark Otto committed
103
      this._activate(this._element, listElement);
fat's avatar
tab es6  
fat committed
104

Mark Otto's avatar
dist    
Mark Otto committed
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
      var complete = function complete() {
        var hiddenEvent = $.Event(Event.HIDDEN, {
          relatedTarget: _this._element
        });
        var shownEvent = $.Event(Event.SHOWN, {
          relatedTarget: previous
        });
        $(previous).trigger(hiddenEvent);
        $(_this._element).trigger(shownEvent);
      };

      if (target) {
        this._activate(target, target.parentNode, complete);
      } else {
        complete();
      }
    };
fat's avatar
tab es6  
fat committed
122

Mark Otto's avatar
dist    
Mark Otto committed
123
124
125
    _proto.dispose = function dispose() {
      $.removeData(this._element, DATA_KEY);
      this._element = null;
Mark Otto's avatar
dist    
Mark Otto committed
126
    }; // Private
Mark Otto's avatar
grunt    
Mark Otto committed
127

Mark Otto's avatar
dist    
Mark Otto committed
128

Mark Otto's avatar
dist    
Mark Otto committed
129
130
    _proto._activate = function _activate(element, container, callback) {
      var _this2 = this;
fat's avatar
tab es6  
fat committed
131

Mark Otto's avatar
dist    
Mark Otto committed
132
      var activeElements;
fat's avatar
tab es6  
fat committed
133

Mark Otto's avatar
dist    
Mark Otto committed
134
135
136
137
      if (container.nodeName === 'UL') {
        activeElements = $(container).find(Selector.ACTIVE_UL);
      } else {
        activeElements = $(container).children(Selector.ACTIVE);
Mark Otto's avatar
grunt    
Mark Otto committed
138
      }
139

Mark Otto's avatar
dist    
Mark Otto committed
140
      var active = activeElements[0];
Mark Otto's avatar
dist    
Mark Otto committed
141
      var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE);
Mark Otto's avatar
grunt    
Mark Otto committed
142

Mark Otto's avatar
dist    
Mark Otto committed
143
      var complete = function complete() {
Mark Otto's avatar
dist    
Mark Otto committed
144
        return _this2._transitionComplete(element, active, callback);
Mark Otto's avatar
dist    
Mark Otto committed
145
      };
fat's avatar
tab es6  
fat committed
146

Mark Otto's avatar
dist    
Mark Otto committed
147
      if (active && isTransitioning) {
Mark Otto's avatar
dist    
Mark Otto committed
148
149
        var transitionDuration = Util.getTransitionDurationFromElement(active);
        $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
Mark Otto's avatar
dist    
Mark Otto committed
150
151
152
153
      } else {
        complete();
      }
    };
Mark Otto's avatar
dist    
Mark Otto committed
154

Mark Otto's avatar
dist    
Mark Otto committed
155
    _proto._transitionComplete = function _transitionComplete(element, active, callback) {
Mark Otto's avatar
dist    
Mark Otto committed
156
      if (active) {
Mark Otto's avatar
dist    
Mark Otto committed
157
        $(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
158
        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
fat's avatar
tab es6  
fat committed
159

Mark Otto's avatar
dist    
Mark Otto committed
160
161
        if (dropdownChild) {
          $(dropdownChild).removeClass(ClassName.ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
162
        }
fat's avatar
tab es6  
fat committed
163

Mark Otto's avatar
dist    
Mark Otto committed
164
165
        if (active.getAttribute('role') === 'tab') {
          active.setAttribute('aria-selected', false);
Mark Otto's avatar
dist    
Mark Otto committed
166
        }
Mark Otto's avatar
grunt    
Mark Otto committed
167
      }
Mark Otto's avatar
dist    
Mark Otto committed
168

Mark Otto's avatar
dist    
Mark Otto committed
169
      $(element).addClass(ClassName.ACTIVE);
fat's avatar
tab es6  
fat committed
170

Mark Otto's avatar
dist    
Mark Otto committed
171
172
173
      if (element.getAttribute('role') === 'tab') {
        element.setAttribute('aria-selected', true);
      }
fat's avatar
tab es6  
fat committed
174

Mark Otto's avatar
dist    
Mark Otto committed
175
176
      Util.reflow(element);
      $(element).addClass(ClassName.SHOW);
fat's avatar
tab es6  
fat committed
177

Mark Otto's avatar
dist    
Mark Otto committed
178
179
      if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) {
        var dropdownElement = $(element).closest(Selector.DROPDOWN)[0];
fat's avatar
tab es6  
fat committed
180

Mark Otto's avatar
dist    
Mark Otto committed
181
        if (dropdownElement) {
Mark Otto's avatar
dist    
Mark Otto committed
182
183
          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE));
          $(dropdownToggleList).addClass(ClassName.ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
184
        }
fat's avatar
tab es6  
fat committed
185

Mark Otto's avatar
dist    
Mark Otto committed
186
187
        element.setAttribute('aria-expanded', true);
      }
Mark Otto's avatar
grunt    
Mark Otto committed
188

Mark Otto's avatar
dist    
Mark Otto committed
189
190
      if (callback) {
        callback();
Mark Otto's avatar
dist    
Mark Otto committed
191
      }
Mark Otto's avatar
dist    
Mark Otto committed
192
    }; // Static
Mark Otto's avatar
dist    
Mark Otto committed
193

Mark Otto's avatar
grunt    
Mark Otto committed
194

Mark Otto's avatar
dist    
Mark Otto committed
195
196
197
198
    Tab._jQueryInterface = function _jQueryInterface(config) {
      return this.each(function () {
        var $this = $(this);
        var data = $this.data(DATA_KEY);
Mark Otto's avatar
dist    
Mark Otto committed
199

Mark Otto's avatar
dist    
Mark Otto committed
200
201
202
203
        if (!data) {
          data = new Tab(this);
          $this.data(DATA_KEY, data);
        }
Mark Otto's avatar
dist    
Mark Otto committed
204

Mark Otto's avatar
dist    
Mark Otto committed
205
206
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
Mark Otto's avatar
dist    
Mark Otto committed
207
            throw new TypeError("No method named \"" + config + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
208
          }
Mark Otto's avatar
dist    
Mark Otto committed
209
210
211
212
213
214
215
216

          data[config]();
        }
      });
    };

    _createClass(Tab, null, [{
      key: "VERSION",
Jacob Thornton's avatar
Jacob Thornton committed
217
218
219
      get: function get() {
        return VERSION;
      }
fat's avatar
tab es6  
fat committed
220
221
222
    }]);

    return Tab;
Mark Otto's avatar
grunt    
Mark Otto committed
223
224
225
226
227
228
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
tab es6  
fat committed
229

Mark Otto's avatar
dist    
Mark Otto committed
230

fat's avatar
fat committed
231
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
fat's avatar
tab es6  
fat committed
232
    event.preventDefault();
Mark Otto's avatar
dist    
Mark Otto committed
233

fat's avatar
tab es6  
fat committed
234
    Tab._jQueryInterface.call($(this), 'show');
Mark Otto's avatar
Mark Otto committed
235
  });
fat's avatar
tab es6  
fat committed
236
237
238
239
240
241
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

Mark Otto's avatar
Mark Otto committed
242
  $.fn[NAME] = Tab._jQueryInterface;
fat's avatar
tab es6  
fat committed
243
  $.fn[NAME].Constructor = Tab;
Mark Otto's avatar
dist    
Mark Otto committed
244

fat's avatar
tab es6  
fat committed
245
246
247
248
249
250
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Tab._jQueryInterface;
  };

  return Tab;
Mark Otto's avatar
dist    
Mark Otto committed
251
}($);
Mark Otto's avatar
build    
Mark Otto committed
252
//# sourceMappingURL=tab.js.map