collapse.js 11.1 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.2): 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.2';
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
77
78
79
        if (selector !== null && $(selector).filter(element).length > 0) {
          this._triggerArray.push(elem);
        }
      }
Johann-S's avatar
build    
Johann-S committed
80

fat's avatar
fat committed
81
82
83
84
85
86
87
88
89
      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
90
    } // getters
fat's avatar
fat committed
91

Jacob Thornton's avatar
Jacob Thornton committed
92

Mark Otto's avatar
dist    
Mark Otto committed
93
    var _proto = Collapse.prototype;
fat's avatar
fat committed
94

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
111
112
      var actives;
      var activesData;
fat's avatar
fat committed
113

Mark Otto's avatar
dist    
Mark Otto committed
114
115
      if (this._parent) {
        actives = $.makeArray($(this._parent).children().children(Selector.ACTIVES));
fat's avatar
fat committed
116

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

Mark Otto's avatar
dist    
Mark Otto committed
122
123
      if (actives) {
        activesData = $(actives).data(DATA_KEY);
fat's avatar
fat committed
124

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
137
138
      if (actives) {
        Collapse._jQueryInterface.call($(actives), 'hide');
fat's avatar
fat committed
139

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

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
154
      this.setTransitioning(true);
fat's avatar
fat committed
155

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

Mark Otto's avatar
dist    
Mark Otto committed
160
        _this.setTransitioning(false);
fat's avatar
fat committed
161

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

Mark Otto's avatar
dist    
Mark Otto committed
165
166
167
168
169
170
171
172
173
174
      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
175

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

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

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
192
193
194
      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
195

Mark Otto's avatar
dist    
Mark Otto committed
196
197
198
199
      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
200

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

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

Mark Otto's avatar
dist    
Mark Otto committed
211
      this.setTransitioning(true);
fat's avatar
fat committed
212

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

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

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

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
233
234
235
236
237
238
239
240
    _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
241
242


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

Mark Otto's avatar
dist    
Mark Otto committed
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
      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
266
        }
Mark Otto's avatar
dist    
Mark Otto committed
267
268
      } else {
        parent = $(this._config.parent)[0];
fat's avatar
fat committed
269
270
      }

Mark Otto's avatar
dist    
Mark Otto committed
271
272
273
274
275
276
      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
277

Mark Otto's avatar
dist    
Mark Otto committed
278
279
280
281
282
283
284
    _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
285
      }
Mark Otto's avatar
dist    
Mark Otto committed
286
    }; // static
Mark Otto's avatar
grunt    
Mark Otto committed
287
288


Mark Otto's avatar
dist    
Mark Otto committed
289
290
291
292
293
294
295
296
297
298
    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
299
        var _config = _extends({}, Default, $this.data(), typeof config === 'object' && config);
Mark Otto's avatar
dist    
Mark Otto committed
300
301
302
303
304
305
306
307
308
309
310
311
312

        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
313
          }
Mark Otto's avatar
dist    
Mark Otto committed
314
315
316
317
318
319
320
321

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

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

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

Mark Otto's avatar
dist    
Mark Otto committed
340

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

Mark Otto's avatar
build    
Mark Otto committed
347
348
349
350
351
352
    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
353

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

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

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

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