collapse.js 11.2 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
2
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }

Mark Otto's avatar
dist    
Mark Otto committed
3
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
4

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

/**
 * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
9
 * Bootstrap (v4.0.0-beta.3): collapse.js
fat's avatar
fat committed
10
11
12
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
 * --------------------------------------------------------------------------
 */
Mark Otto's avatar
dist    
Mark Otto committed
13
var Collapse = function ($) {
fat's avatar
fat committed
14
15
16
17
18
19
  /**
   * ------------------------------------------------------------------------
   * Constants
   * ------------------------------------------------------------------------
   */
  var NAME = 'collapse';
Mark Otto's avatar
Mark Otto committed
20
  var VERSION = '4.0.0-beta.3';
fat's avatar
fat committed
21
  var DATA_KEY = 'bs.collapse';
Mark Otto's avatar
dist    
Mark Otto committed
22
  var EVENT_KEY = "." + DATA_KEY;
fat's avatar
fat committed
23
  var DATA_API_KEY = '.data-api';
fat's avatar
fat committed
24
25
  var JQUERY_NO_CONFLICT = $.fn[NAME];
  var TRANSITION_DURATION = 600;
26
  var Default = {
fat's avatar
fat committed
27
    toggle: true,
28
    parent: ''
fat's avatar
fat committed
29
  };
fat's avatar
fat committed
30
31
  var DefaultType = {
    toggle: 'boolean',
Mark Otto's avatar
dist    
Mark Otto committed
32
    parent: '(string|element)'
fat's avatar
fat committed
33
  };
fat's avatar
fat committed
34
  var Event = {
Mark Otto's avatar
dist    
Mark Otto committed
35
36
37
38
39
    SHOW: "show" + EVENT_KEY,
    SHOWN: "shown" + EVENT_KEY,
    HIDE: "hide" + EVENT_KEY,
    HIDDEN: "hidden" + EVENT_KEY,
    CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
fat's avatar
fat committed
40
41
  };
  var ClassName = {
Mark Otto's avatar
grunt    
Mark Otto committed
42
    SHOW: 'show',
fat's avatar
fat committed
43
44
45
46
47
48
49
50
51
    COLLAPSE: 'collapse',
    COLLAPSING: 'collapsing',
    COLLAPSED: 'collapsed'
  };
  var Dimension = {
    WIDTH: 'width',
    HEIGHT: 'height'
  };
  var Selector = {
Johann-S's avatar
build    
Johann-S committed
52
53
    ACTIVES: '.show, .collapsing',
    DATA_TOGGLE: '[data-toggle="collapse"]'
Mark Otto's avatar
dist    
Mark Otto committed
54
55
56
57
58
    /**
     * ------------------------------------------------------------------------
     * Class Definition
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
59

Mark Otto's avatar
dist    
Mark Otto committed
60
  };
fat's avatar
fat committed
61

Mark Otto's avatar
dist    
Mark Otto committed
62
63
64
65
  var Collapse =
  /*#__PURE__*/
  function () {
    function Collapse(element, config) {
fat's avatar
fat committed
66
67
      this._isTransitioning = false;
      this._element = element;
fat's avatar
fat committed
68
      this._config = this._getConfig(config);
Mark Otto's avatar
dist    
Mark Otto committed
69
      this._triggerArray = $.makeArray($("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
Mark Otto's avatar
build    
Mark Otto committed
70
      var tabToggles = $(Selector.DATA_TOGGLE);
Mark Otto's avatar
dist    
Mark Otto committed
71

Mark Otto's avatar
build    
Mark Otto committed
72
73
74
      for (var i = 0; i < tabToggles.length; i++) {
        var elem = tabToggles[i];
        var selector = Util.getSelectorFromElement(elem);
Mark Otto's avatar
dist    
Mark Otto committed
75

Mark Otto's avatar
build    
Mark Otto committed
76
        if (selector !== null && $(selector).filter(element).length > 0) {
Mark Otto's avatar
dist    
Mark Otto committed
77
78
          this._selector = selector;

Mark Otto's avatar
build    
Mark Otto committed
79
80
81
          this._triggerArray.push(elem);
        }
      }
Johann-S's avatar
build    
Johann-S committed
82

fat's avatar
fat committed
83
84
85
86
87
88
89
90
91
      this._parent = this._config.parent ? this._getParent() : null;

      if (!this._config.parent) {
        this._addAriaAndCollapsedClass(this._element, this._triggerArray);
      }

      if (this._config.toggle) {
        this.toggle();
      }
Mark Otto's avatar
dist    
Mark Otto committed
92
    } // getters
fat's avatar
fat committed
93

Jacob Thornton's avatar
Jacob Thornton committed
94

Mark Otto's avatar
dist    
Mark Otto committed
95
    var _proto = Collapse.prototype;
fat's avatar
fat committed
96

Mark Otto's avatar
dist    
Mark Otto committed
97
98
99
100
101
102
103
104
    // public
    _proto.toggle = function toggle() {
      if ($(this._element).hasClass(ClassName.SHOW)) {
        this.hide();
      } else {
        this.show();
      }
    };
fat's avatar
fat committed
105

Mark Otto's avatar
dist    
Mark Otto committed
106
107
    _proto.show = function show() {
      var _this = this;
Mark Otto's avatar
grunt    
Mark Otto committed
108

Mark Otto's avatar
dist    
Mark Otto committed
109
110
      if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) {
        return;
fat's avatar
fat committed
111
112
      }

Mark Otto's avatar
dist    
Mark Otto committed
113
114
      var actives;
      var activesData;
fat's avatar
fat committed
115

Mark Otto's avatar
dist    
Mark Otto committed
116
      if (this._parent) {
Mark Otto's avatar
dist    
Mark Otto committed
117
        actives = $.makeArray($(this._parent).find(Selector.ACTIVES).filter("[data-parent=\"" + this._config.parent + "\"]"));
fat's avatar
fat committed
118

Mark Otto's avatar
dist    
Mark Otto committed
119
120
        if (!actives.length) {
          actives = null;
fat's avatar
fat committed
121
        }
Mark Otto's avatar
dist    
Mark Otto committed
122
      }
fat's avatar
fat committed
123

Mark Otto's avatar
dist    
Mark Otto committed
124
      if (actives) {
Mark Otto's avatar
dist    
Mark Otto committed
125
        activesData = $(actives).not(this._selector).data(DATA_KEY);
fat's avatar
fat committed
126

Mark Otto's avatar
dist    
Mark Otto committed
127
        if (activesData && activesData._isTransitioning) {
Mark Otto's avatar
dist    
Mark Otto committed
128
129
          return;
        }
Mark Otto's avatar
dist    
Mark Otto committed
130
      }
fat's avatar
fat committed
131

Mark Otto's avatar
dist    
Mark Otto committed
132
133
      var startEvent = $.Event(Event.SHOW);
      $(this._element).trigger(startEvent);
fat's avatar
fat committed
134

Mark Otto's avatar
dist    
Mark Otto committed
135
136
137
      if (startEvent.isDefaultPrevented()) {
        return;
      }
fat's avatar
fat committed
138

Mark Otto's avatar
dist    
Mark Otto committed
139
      if (actives) {
Mark Otto's avatar
dist    
Mark Otto committed
140
        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');
fat's avatar
fat committed
141

Mark Otto's avatar
dist    
Mark Otto committed
142
143
        if (!activesData) {
          $(actives).data(DATA_KEY, null);
Mark Otto's avatar
dist    
Mark Otto committed
144
        }
Mark Otto's avatar
dist    
Mark Otto committed
145
146
147
      }

      var dimension = this._getDimension();
fat's avatar
fat committed
148

Mark Otto's avatar
dist    
Mark Otto committed
149
150
      $(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
      this._element.style[dimension] = 0;
fat's avatar
fat committed
151

Mark Otto's avatar
dist    
Mark Otto committed
152
153
154
      if (this._triggerArray.length) {
        $(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
      }
fat's avatar
fat committed
155

Mark Otto's avatar
dist    
Mark Otto committed
156
      this.setTransitioning(true);
fat's avatar
fat committed
157

Mark Otto's avatar
dist    
Mark Otto committed
158
159
160
      var complete = function complete() {
        $(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
        _this._element.style[dimension] = '';
fat's avatar
fat committed
161

Mark Otto's avatar
dist    
Mark Otto committed
162
        _this.setTransitioning(false);
fat's avatar
fat committed
163

Mark Otto's avatar
dist    
Mark Otto committed
164
165
        $(_this._element).trigger(Event.SHOWN);
      };
fat's avatar
fat committed
166

Mark Otto's avatar
dist    
Mark Otto committed
167
168
169
170
171
172
173
174
175
176
      if (!Util.supportsTransitionEnd()) {
        complete();
        return;
      }

      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
      var scrollSize = "scroll" + capitalizedDimension;
      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
      this._element.style[dimension] = this._element[scrollSize] + "px";
    };
fat's avatar
fat committed
177

Mark Otto's avatar
dist    
Mark Otto committed
178
179
    _proto.hide = function hide() {
      var _this2 = this;
fat's avatar
fat committed
180

Mark Otto's avatar
dist    
Mark Otto committed
181
182
      if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) {
        return;
fat's avatar
fat committed
183
184
      }

Mark Otto's avatar
dist    
Mark Otto committed
185
186
      var startEvent = $.Event(Event.HIDE);
      $(this._element).trigger(startEvent);
fat's avatar
fat committed
187

Mark Otto's avatar
dist    
Mark Otto committed
188
189
190
      if (startEvent.isDefaultPrevented()) {
        return;
      }
fat's avatar
fat committed
191

Mark Otto's avatar
dist    
Mark Otto committed
192
      var dimension = this._getDimension();
fat's avatar
fat committed
193

Mark Otto's avatar
dist    
Mark Otto committed
194
195
196
      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
      Util.reflow(this._element);
      $(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
fat's avatar
fat committed
197

Mark Otto's avatar
dist    
Mark Otto committed
198
199
200
201
      if (this._triggerArray.length) {
        for (var i = 0; i < this._triggerArray.length; i++) {
          var trigger = this._triggerArray[i];
          var selector = Util.getSelectorFromElement(trigger);
fat's avatar
fat committed
202

Mark Otto's avatar
dist    
Mark Otto committed
203
204
          if (selector !== null) {
            var $elem = $(selector);
fat's avatar
fat committed
205

Mark Otto's avatar
dist    
Mark Otto committed
206
207
            if (!$elem.hasClass(ClassName.SHOW)) {
              $(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
Mark Otto's avatar
dist    
Mark Otto committed
208
209
210
            }
          }
        }
Mark Otto's avatar
dist    
Mark Otto committed
211
      }
fat's avatar
fat committed
212

Mark Otto's avatar
dist    
Mark Otto committed
213
      this.setTransitioning(true);
fat's avatar
fat committed
214

Mark Otto's avatar
dist    
Mark Otto committed
215
216
      var complete = function complete() {
        _this2.setTransitioning(false);
fat's avatar
fat committed
217

Mark Otto's avatar
dist    
Mark Otto committed
218
219
        $(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
      };
fat's avatar
fat committed
220

Mark Otto's avatar
dist    
Mark Otto committed
221
      this._element.style[dimension] = '';
fat's avatar
fat committed
222

Mark Otto's avatar
dist    
Mark Otto committed
223
224
225
      if (!Util.supportsTransitionEnd()) {
        complete();
        return;
Mark Otto's avatar
dist    
Mark Otto committed
226
      }
fat's avatar
fat committed
227

Mark Otto's avatar
dist    
Mark Otto committed
228
229
      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(TRANSITION_DURATION);
    };
Mark Otto's avatar
grunt    
Mark Otto committed
230

Mark Otto's avatar
dist    
Mark Otto committed
231
232
233
    _proto.setTransitioning = function setTransitioning(isTransitioning) {
      this._isTransitioning = isTransitioning;
    };
Mark Otto's avatar
grunt    
Mark Otto committed
234

Mark Otto's avatar
dist    
Mark Otto committed
235
236
237
238
239
240
241
242
    _proto.dispose = function dispose() {
      $.removeData(this._element, DATA_KEY);
      this._config = null;
      this._parent = null;
      this._element = null;
      this._triggerArray = null;
      this._isTransitioning = null;
    }; // private
Mark Otto's avatar
grunt    
Mark Otto committed
243
244


Mark Otto's avatar
dist    
Mark Otto committed
245
    _proto._getConfig = function _getConfig(config) {
Mark Otto's avatar
dist    
Mark Otto committed
246
      config = _extends({}, Default, config);
Mark Otto's avatar
dist    
Mark Otto committed
247
      config.toggle = Boolean(config.toggle); // coerce string values
Mark Otto's avatar
grunt    
Mark Otto committed
248

Mark Otto's avatar
dist    
Mark Otto committed
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
      Util.typeCheckConfig(NAME, config, DefaultType);
      return config;
    };

    _proto._getDimension = function _getDimension() {
      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);
      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
    };

    _proto._getParent = function _getParent() {
      var _this3 = this;

      var parent = null;

      if (Util.isElement(this._config.parent)) {
        parent = this._config.parent; // it's a jQuery object

        if (typeof this._config.parent.jquery !== 'undefined') {
          parent = this._config.parent[0];
fat's avatar
fat committed
268
        }
Mark Otto's avatar
dist    
Mark Otto committed
269
270
      } else {
        parent = $(this._config.parent)[0];
fat's avatar
fat committed
271
272
      }

Mark Otto's avatar
dist    
Mark Otto committed
273
274
275
276
277
278
      var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
      $(parent).find(selector).each(function (i, element) {
        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
      });
      return parent;
    };
fat's avatar
fat committed
279

Mark Otto's avatar
dist    
Mark Otto committed
280
281
282
283
284
285
286
    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
      if (element) {
        var isOpen = $(element).hasClass(ClassName.SHOW);

        if (triggerArray.length) {
          $(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
        }
Mark Otto's avatar
dist    
Mark Otto committed
287
      }
Mark Otto's avatar
dist    
Mark Otto committed
288
    }; // static
Mark Otto's avatar
grunt    
Mark Otto committed
289
290


Mark Otto's avatar
dist    
Mark Otto committed
291
292
293
294
295
296
297
298
299
300
    Collapse._getTargetFromElement = function _getTargetFromElement(element) {
      var selector = Util.getSelectorFromElement(element);
      return selector ? $(selector)[0] : null;
    };

    Collapse._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
301
        var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config);
Mark Otto's avatar
dist    
Mark Otto committed
302
303
304
305
306
307
308
309
310
311
312
313
314

        if (!data && _config.toggle && /show|hide/.test(config)) {
          _config.toggle = false;
        }

        if (!data) {
          data = new Collapse(this, _config);
          $this.data(DATA_KEY, data);
        }

        if (typeof config === 'string') {
          if (typeof data[config] === 'undefined') {
            throw new Error("No method named \"" + config + "\"");
Mark Otto's avatar
dist    
Mark Otto committed
315
          }
Mark Otto's avatar
dist    
Mark Otto committed
316
317
318
319
320
321
322
323

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

    _createClass(Collapse, null, [{
      key: "VERSION",
Jacob Thornton's avatar
Jacob Thornton committed
324
325
326
327
      get: function get() {
        return VERSION;
      }
    }, {
Mark Otto's avatar
dist    
Mark Otto committed
328
      key: "Default",
Jacob Thornton's avatar
Jacob Thornton committed
329
330
331
      get: function get() {
        return Default;
      }
fat's avatar
fat committed
332
333
334
    }]);

    return Collapse;
Mark Otto's avatar
grunt    
Mark Otto committed
335
336
337
338
339
340
  }();
  /**
   * ------------------------------------------------------------------------
   * Data Api implementation
   * ------------------------------------------------------------------------
   */
fat's avatar
fat committed
341

Mark Otto's avatar
dist    
Mark Otto committed
342

fat's avatar
fat committed
343
  $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
Mark Otto's avatar
dist    
Mark Otto committed
344
    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
Mark Otto's avatar
dist    
Mark Otto committed
345
    if (event.currentTarget.tagName === 'A') {
Mark Otto's avatar
grunt    
Mark Otto committed
346
347
      event.preventDefault();
    }
fat's avatar
fat committed
348

Mark Otto's avatar
build    
Mark Otto committed
349
350
351
352
353
354
    var $trigger = $(this);
    var selector = Util.getSelectorFromElement(this);
    $(selector).each(function () {
      var $target = $(this);
      var data = $target.data(DATA_KEY);
      var config = data ? 'toggle' : $trigger.data();
Mark Otto's avatar
dist    
Mark Otto committed
355

Mark Otto's avatar
build    
Mark Otto committed
356
357
      Collapse._jQueryInterface.call($target, config);
    });
Mark Otto's avatar
Mark Otto committed
358
  });
fat's avatar
fat committed
359
360
361
362
363
364
  /**
   * ------------------------------------------------------------------------
   * jQuery
   * ------------------------------------------------------------------------
   */

Mark Otto's avatar
Mark Otto committed
365
  $.fn[NAME] = Collapse._jQueryInterface;
fat's avatar
fat committed
366
  $.fn[NAME].Constructor = Collapse;
Mark Otto's avatar
dist    
Mark Otto committed
367

fat's avatar
fat committed
368
369
370
371
372
373
  $.fn[NAME].noConflict = function () {
    $.fn[NAME] = JQUERY_NO_CONFLICT;
    return Collapse._jQueryInterface;
  };

  return Collapse;
Mark Otto's avatar
dist    
Mark Otto committed
374
}($);
Mark Otto's avatar
build    
Mark Otto committed
375
//# sourceMappingURL=collapse.js.map