tab.js 7.49 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.0.0-beta.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.0.0-beta.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
24
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 150;
  var Event = {
Mark Otto's avatar
dist    
Mark Otto committed
25
26
27
28
29
    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
30
31
32
33
  };
  var ClassName = {
    DROPDOWN_MENU: 'dropdown-menu',
    ACTIVE: 'active',
Mark Otto's avatar
grunt    
Mark Otto committed
34
    DISABLED: 'disabled',
fat's avatar
tab es6  
fat committed
35
    FADE: 'fade',
Mark Otto's avatar
grunt    
Mark Otto committed
36
    SHOW: 'show'
fat's avatar
tab es6  
fat committed
37
38
  };
  var Selector = {
39
    DROPDOWN: '.dropdown',
Mark Otto's avatar
grunt    
Mark Otto committed
40
    NAV_LIST_GROUP: '.nav, .list-group',
fat's avatar
tab es6  
fat committed
41
    ACTIVE: '.active',
Mark Otto's avatar
dist    
Mark Otto committed
42
    ACTIVE_UL: '> li > .active',
Mark Otto's avatar
grunt    
Mark Otto committed
43
    DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',
44
45
    DROPDOWN_TOGGLE: '.dropdown-toggle',
    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'
Mark Otto's avatar
dist    
Mark Otto committed
46
47
48
49
50
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
tab es6  
fat committed
51

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

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

Jacob Thornton's avatar
Jacob Thornton committed
61

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

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

Mark Otto's avatar
dist    
Mark Otto committed
68
69
70
      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
71

Mark Otto's avatar
dist    
Mark Otto committed
72
73
74
75
      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
76

Mark Otto's avatar
dist    
Mark Otto committed
77
78
79
80
81
      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
82

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

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
100
101
102
      if (selector) {
        target = $(selector)[0];
      }
fat's avatar
tab es6  
fat committed
103

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

Mark Otto's avatar
dist    
Mark Otto committed
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
      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
123

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

Mark Otto's avatar
dist    
Mark Otto committed
129

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

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

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
148
149
150
151
152
      if (active && isTransitioning) {
        $(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
      } else {
        complete();
      }
fat's avatar
tab es6  
fat committed
153

Mark Otto's avatar
dist    
Mark Otto committed
154
155
156
157
      if (active) {
        $(active).removeClass(ClassName.SHOW);
      }
    };
Mark Otto's avatar
dist    
Mark Otto committed
158

Mark Otto's avatar
dist    
Mark Otto committed
159
160
161
162
    _proto._transitionComplete = function _transitionComplete(element, active, isTransitioning, callback) {
      if (active) {
        $(active).removeClass(ClassName.ACTIVE);
        var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0];
fat's avatar
tab es6  
fat committed
163

Mark Otto's avatar
dist    
Mark Otto committed
164
165
        if (dropdownChild) {
          $(dropdownChild).removeClass(ClassName.ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
166
        }
fat's avatar
tab es6  
fat committed
167

Mark Otto's avatar
dist    
Mark Otto committed
168
169
        if (active.getAttribute('role') === 'tab') {
          active.setAttribute('aria-selected', false);
Mark Otto's avatar
dist    
Mark Otto committed
170
        }
Mark Otto's avatar
grunt    
Mark Otto committed
171
      }
Mark Otto's avatar
dist    
Mark Otto committed
172

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

Mark Otto's avatar
dist    
Mark Otto committed
175
176
177
      if (element.getAttribute('role') === 'tab') {
        element.setAttribute('aria-selected', true);
      }
fat's avatar
tab es6  
fat committed
178

Mark Otto's avatar
dist    
Mark Otto committed
179
180
181
182
183
184
      if (isTransitioning) {
        Util.reflow(element);
        $(element).addClass(ClassName.SHOW);
      } else {
        $(element).removeClass(ClassName.FADE);
      }
fat's avatar
tab es6  
fat committed
185

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

Mark Otto's avatar
dist    
Mark Otto committed
189
190
        if (dropdownElement) {
          $(dropdownElement).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE);
Mark Otto's avatar
dist    
Mark Otto committed
191
        }
fat's avatar
tab es6  
fat committed
192

Mark Otto's avatar
dist    
Mark Otto committed
193
194
        element.setAttribute('aria-expanded', true);
      }
Mark Otto's avatar
grunt    
Mark Otto committed
195

Mark Otto's avatar
dist    
Mark Otto committed
196
197
      if (callback) {
        callback();
Mark Otto's avatar
dist    
Mark Otto committed
198
      }
Mark Otto's avatar
dist    
Mark Otto committed
199
    }; // static
Mark Otto's avatar
dist    
Mark Otto committed
200

Mark Otto's avatar
grunt    
Mark Otto committed
201

Mark Otto's avatar
dist    
Mark Otto committed
202
203
204
205
    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
206

Mark Otto's avatar
dist    
Mark Otto committed
207
208
209
210
        if (!data) {
          data = new Tab(this);
          $this.data(DATA_KEY, data);
        }
Mark Otto's avatar
dist    
Mark Otto committed
211

Mark Otto's avatar
dist    
Mark Otto committed
212
213
214
        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new Error("No method named \"" + config + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
215
          }
Mark Otto's avatar
dist    
Mark Otto committed
216
217
218
219
220
221
222
223

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

    _createClass(Tab, null, [{
      key: "VERSION",
Jacob Thornton's avatar
Jacob Thornton committed
224
225
226
      get: function get() {
        return VERSION;
      }
fat's avatar
tab es6  
fat committed
227
228
229
    }]);

    return Tab;
Mark Otto's avatar
grunt    
Mark Otto committed
230
231
232
233
234
235
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
tab es6  
fat committed
236

Mark Otto's avatar
dist    
Mark Otto committed
237

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

fat's avatar
tab es6  
fat committed
241
    Tab._jQueryInterface.call($(this), 'show');
Mark Otto's avatar
Mark Otto committed
242
  });
fat's avatar
tab es6  
fat committed
243
244
245
246
247
248
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

Mark Otto's avatar
Mark Otto committed
249
  $.fn[NAME] = Tab._jQueryInterface;
fat's avatar
tab es6  
fat committed
250
  $.fn[NAME].Constructor = Tab;
Mark Otto's avatar
dist    
Mark Otto committed
251

fat's avatar
tab es6  
fat committed
252
253
254
255
256
257
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Tab._jQueryInterface;
  };

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