collapse.js 13.5 KB
Newer Older
Mark Otto's avatar
dist    
Mark Otto committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
(function (global, factory) {
  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) :
  typeof define === 'function' && define.amd ? define(['jquery', './util.js'], factory) :
  (global.Collapse = factory(global.jQuery,global.Util));
}(this, (function ($,Util) { 'use strict';

  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
  Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;

  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);
    }
  }

  function _createClass(Constructor, protoProps, staticProps) {
    if (protoProps) _defineProperties(Constructor.prototype, protoProps);
    if (staticProps) _defineProperties(Constructor, staticProps);
    return Constructor;
  }

  function _defineProperty(obj, key, value) {
    if (key in obj) {
      Object.defineProperty(obj, key, {
        value: value,
        enumerable: true,
        configurable: true,
        writable: true
      });
    } else {
      obj[key] = value;
    }

    return obj;
  }
Mark Otto's avatar
dist    
Mark Otto committed
40

Mark Otto's avatar
dist    
Mark Otto committed
41
42
43
44
  function _objectSpread(target) {
    for (var i = 1; i < arguments.length; i++) {
      var source = arguments[i] != null ? arguments[i] : {};
      var ownKeys = Object.keys(source);
Mark Otto's avatar
dist    
Mark Otto committed
45

Mark Otto's avatar
dist    
Mark Otto committed
46
47
48
49
50
51
52
53
54
55
      if (typeof Object.getOwnPropertySymbols === 'function') {
        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
          return Object.getOwnPropertyDescriptor(source, sym).enumerable;
        }));
      }

      ownKeys.forEach(function (key) {
        _defineProperty(target, key, source[key]);
      });
    }
Mark Otto's avatar
dist    
Mark Otto committed
56

Mark Otto's avatar
dist    
Mark Otto committed
57
58
    return target;
  }
fat's avatar
fat committed
59
60

  /**
Mark Otto's avatar
dist    
Mark Otto committed
61
   * --------------------------------------------------------------------------
Mark Otto's avatar
Mark Otto committed
62
   * Bootstrap (v4.1.3): collapse.js
Mark Otto's avatar
dist    
Mark Otto committed
63
64
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
   * --------------------------------------------------------------------------
fat's avatar
fat committed
65
   */
Mark Otto's avatar
dist    
Mark Otto committed
66
67

  var Collapse = function ($$$1) {
Mark Otto's avatar
dist    
Mark Otto committed
68
69
    /**
     * ------------------------------------------------------------------------
Mark Otto's avatar
dist    
Mark Otto committed
70
     * Constants
Mark Otto's avatar
dist    
Mark Otto committed
71
72
     * ------------------------------------------------------------------------
     */
Mark Otto's avatar
dist    
Mark Otto committed
73
    var NAME = 'collapse';
Mark Otto's avatar
Mark Otto committed
74
    var VERSION = '4.1.3';
Mark Otto's avatar
dist    
Mark Otto committed
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
    var DATA_KEY = 'bs.collapse';
    var EVENT_KEY = "." + DATA_KEY;
    var DATA_API_KEY = '.data-api';
    var JQUERY_NO_CONFLICT = $$$1.fn[NAME];
    var Default = {
      toggle: true,
      parent: ''
    };
    var DefaultType = {
      toggle: 'boolean',
      parent: '(string|element)'
    };
    var Event = {
      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
    };
    var ClassName = {
      SHOW: 'show',
      COLLAPSE: 'collapse',
      COLLAPSING: 'collapsing',
      COLLAPSED: 'collapsed'
    };
    var Dimension = {
      WIDTH: 'width',
      HEIGHT: 'height'
    };
    var Selector = {
      ACTIVES: '.show, .collapsing',
      DATA_TOGGLE: '[data-toggle="collapse"]'
      /**
       * ------------------------------------------------------------------------
       * Class Definition
       * ------------------------------------------------------------------------
       */
fat's avatar
fat committed
112

Mark Otto's avatar
dist    
Mark Otto committed
113
    };
Mark Otto's avatar
dist    
Mark Otto committed
114

Mark Otto's avatar
dist    
Mark Otto committed
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
    var Collapse =
    /*#__PURE__*/
    function () {
      function Collapse(element, config) {
        this._isTransitioning = false;
        this._element = element;
        this._config = this._getConfig(config);
        this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
        var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE));

        for (var i = 0, len = toggleList.length; i < len; i++) {
          var elem = toggleList[i];
          var selector = Util.getSelectorFromElement(elem);
          var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
            return foundElem === element;
          });

          if (selector !== null && filterElement.length > 0) {
            this._selector = selector;

            this._triggerArray.push(elem);
          }
Mark Otto's avatar
build    
Mark Otto committed
137
        }
Johann-S's avatar
build    
Johann-S committed
138

Mark Otto's avatar
dist    
Mark Otto committed
139
        this._parent = this._config.parent ? this._getParent() : null;
fat's avatar
fat committed
140

Mark Otto's avatar
dist    
Mark Otto committed
141
142
143
        if (!this._config.parent) {
          this._addAriaAndCollapsedClass(this._element, this._triggerArray);
        }
fat's avatar
fat committed
144

Mark Otto's avatar
dist    
Mark Otto committed
145
146
147
148
        if (this._config.toggle) {
          this.toggle();
        }
      } // Getters
fat's avatar
fat committed
149

Jacob Thornton's avatar
Jacob Thornton committed
150

Mark Otto's avatar
dist    
Mark Otto committed
151
      var _proto = Collapse.prototype;
fat's avatar
fat committed
152

Mark Otto's avatar
dist    
Mark Otto committed
153
154
155
156
157
158
159
160
      // Public
      _proto.toggle = function toggle() {
        if ($$$1(this._element).hasClass(ClassName.SHOW)) {
          this.hide();
        } else {
          this.show();
        }
      };
fat's avatar
fat committed
161

Mark Otto's avatar
dist    
Mark Otto committed
162
163
      _proto.show = function show() {
        var _this = this;
Mark Otto's avatar
grunt    
Mark Otto committed
164

Mark Otto's avatar
dist    
Mark Otto committed
165
166
167
        if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) {
          return;
        }
fat's avatar
fat committed
168

Mark Otto's avatar
dist    
Mark Otto committed
169
170
        var actives;
        var activesData;
fat's avatar
fat committed
171

Mark Otto's avatar
dist    
Mark Otto committed
172
173
174
175
        if (this._parent) {
          actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) {
            return elem.getAttribute('data-parent') === _this._config.parent;
          });
fat's avatar
fat committed
176

Mark Otto's avatar
dist    
Mark Otto committed
177
178
179
          if (actives.length === 0) {
            actives = null;
          }
fat's avatar
fat committed
180
181
        }

Mark Otto's avatar
dist    
Mark Otto committed
182
183
        if (actives) {
          activesData = $$$1(actives).not(this._selector).data(DATA_KEY);
fat's avatar
fat committed
184

Mark Otto's avatar
dist    
Mark Otto committed
185
186
187
          if (activesData && activesData._isTransitioning) {
            return;
          }
Mark Otto's avatar
dist    
Mark Otto committed
188
        }
fat's avatar
fat committed
189

Mark Otto's avatar
dist    
Mark Otto committed
190
191
        var startEvent = $$$1.Event(Event.SHOW);
        $$$1(this._element).trigger(startEvent);
fat's avatar
fat committed
192

Mark Otto's avatar
dist    
Mark Otto committed
193
194
195
        if (startEvent.isDefaultPrevented()) {
          return;
        }
fat's avatar
fat committed
196

Mark Otto's avatar
dist    
Mark Otto committed
197
198
        if (actives) {
          Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide');
fat's avatar
fat committed
199

Mark Otto's avatar
dist    
Mark Otto committed
200
201
202
          if (!activesData) {
            $$$1(actives).data(DATA_KEY, null);
          }
Mark Otto's avatar
dist    
Mark Otto committed
203
        }
Mark Otto's avatar
dist    
Mark Otto committed
204

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

Mark Otto's avatar
dist    
Mark Otto committed
207
208
        $$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING);
        this._element.style[dimension] = 0;
fat's avatar
fat committed
209

Mark Otto's avatar
dist    
Mark Otto committed
210
211
212
        if (this._triggerArray.length) {
          $$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true);
        }
fat's avatar
fat committed
213

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

Mark Otto's avatar
dist    
Mark Otto committed
216
217
218
        var complete = function complete() {
          $$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW);
          _this._element.style[dimension] = '';
fat's avatar
fat committed
219

Mark Otto's avatar
dist    
Mark Otto committed
220
          _this.setTransitioning(false);
fat's avatar
fat committed
221

Mark Otto's avatar
dist    
Mark Otto committed
222
223
          $$$1(_this._element).trigger(Event.SHOWN);
        };
fat's avatar
fat committed
224

Mark Otto's avatar
dist    
Mark Otto committed
225
226
227
228
229
230
        var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
        var scrollSize = "scroll" + capitalizedDimension;
        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
        $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
        this._element.style[dimension] = this._element[scrollSize] + "px";
      };
fat's avatar
fat committed
231

Mark Otto's avatar
dist    
Mark Otto committed
232
233
      _proto.hide = function hide() {
        var _this2 = this;
fat's avatar
fat committed
234

Mark Otto's avatar
dist    
Mark Otto committed
235
236
237
        if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) {
          return;
        }
fat's avatar
fat committed
238

Mark Otto's avatar
dist    
Mark Otto committed
239
240
        var startEvent = $$$1.Event(Event.HIDE);
        $$$1(this._element).trigger(startEvent);
fat's avatar
fat committed
241

Mark Otto's avatar
dist    
Mark Otto committed
242
243
244
        if (startEvent.isDefaultPrevented()) {
          return;
        }
fat's avatar
fat committed
245

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

Mark Otto's avatar
dist    
Mark Otto committed
248
249
250
251
        this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
        Util.reflow(this._element);
        $$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW);
        var triggerArrayLength = this._triggerArray.length;
fat's avatar
fat committed
252

Mark Otto's avatar
dist    
Mark Otto committed
253
254
255
256
        if (triggerArrayLength > 0) {
          for (var i = 0; i < triggerArrayLength; i++) {
            var trigger = this._triggerArray[i];
            var selector = Util.getSelectorFromElement(trigger);
fat's avatar
fat committed
257

Mark Otto's avatar
dist    
Mark Otto committed
258
259
            if (selector !== null) {
              var $elem = $$$1([].slice.call(document.querySelectorAll(selector)));
fat's avatar
fat committed
260

Mark Otto's avatar
dist    
Mark Otto committed
261
262
263
              if (!$elem.hasClass(ClassName.SHOW)) {
                $$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false);
              }
Mark Otto's avatar
dist    
Mark Otto committed
264
265
266
            }
          }
        }
fat's avatar
fat committed
267

Mark Otto's avatar
dist    
Mark Otto committed
268
        this.setTransitioning(true);
fat's avatar
fat committed
269

Mark Otto's avatar
dist    
Mark Otto committed
270
271
        var complete = function complete() {
          _this2.setTransitioning(false);
fat's avatar
fat committed
272

Mark Otto's avatar
dist    
Mark Otto committed
273
274
          $$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN);
        };
fat's avatar
fat committed
275

Mark Otto's avatar
dist    
Mark Otto committed
276
277
278
279
        this._element.style[dimension] = '';
        var transitionDuration = Util.getTransitionDurationFromElement(this._element);
        $$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
      };
Mark Otto's avatar
grunt    
Mark Otto committed
280

Mark Otto's avatar
dist    
Mark Otto committed
281
282
283
      _proto.setTransitioning = function setTransitioning(isTransitioning) {
        this._isTransitioning = isTransitioning;
      };
Mark Otto's avatar
grunt    
Mark Otto committed
284

Mark Otto's avatar
dist    
Mark Otto committed
285
286
287
288
289
290
291
292
      _proto.dispose = function dispose() {
        $$$1.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
293
294


Mark Otto's avatar
dist    
Mark Otto committed
295
296
297
      _proto._getConfig = function _getConfig(config) {
        config = _objectSpread({}, Default, config);
        config.toggle = Boolean(config.toggle); // Coerce string values
Mark Otto's avatar
grunt    
Mark Otto committed
298

Mark Otto's avatar
dist    
Mark Otto committed
299
300
301
        Util.typeCheckConfig(NAME, config, DefaultType);
        return config;
      };
Mark Otto's avatar
dist    
Mark Otto committed
302

Mark Otto's avatar
dist    
Mark Otto committed
303
304
305
306
      _proto._getDimension = function _getDimension() {
        var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH);
        return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;
      };
Mark Otto's avatar
dist    
Mark Otto committed
307

Mark Otto's avatar
dist    
Mark Otto committed
308
309
      _proto._getParent = function _getParent() {
        var _this3 = this;
Mark Otto's avatar
dist    
Mark Otto committed
310

Mark Otto's avatar
dist    
Mark Otto committed
311
        var parent = null;
Mark Otto's avatar
dist    
Mark Otto committed
312

Mark Otto's avatar
dist    
Mark Otto committed
313
314
        if (Util.isElement(this._config.parent)) {
          parent = this._config.parent; // It's a jQuery object
Mark Otto's avatar
dist    
Mark Otto committed
315

Mark Otto's avatar
dist    
Mark Otto committed
316
317
318
319
320
          if (typeof this._config.parent.jquery !== 'undefined') {
            parent = this._config.parent[0];
          }
        } else {
          parent = document.querySelector(this._config.parent);
fat's avatar
fat committed
321
322
        }

Mark Otto's avatar
dist    
Mark Otto committed
323
324
325
326
327
328
329
        var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
        var children = [].slice.call(parent.querySelectorAll(selector));
        $$$1(children).each(function (i, element) {
          _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
        });
        return parent;
      };
fat's avatar
fat committed
330

Mark Otto's avatar
dist    
Mark Otto committed
331
332
333
      _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
        if (element) {
          var isOpen = $$$1(element).hasClass(ClassName.SHOW);
Mark Otto's avatar
dist    
Mark Otto committed
334

Mark Otto's avatar
dist    
Mark Otto committed
335
336
337
          if (triggerArray.length) {
            $$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
          }
Mark Otto's avatar
dist    
Mark Otto committed
338
        }
Mark Otto's avatar
dist    
Mark Otto committed
339
      }; // Static
Mark Otto's avatar
grunt    
Mark Otto committed
340
341


Mark Otto's avatar
dist    
Mark Otto committed
342
343
344
345
      Collapse._getTargetFromElement = function _getTargetFromElement(element) {
        var selector = Util.getSelectorFromElement(element);
        return selector ? document.querySelector(selector) : null;
      };
Mark Otto's avatar
dist    
Mark Otto committed
346

Mark Otto's avatar
dist    
Mark Otto committed
347
348
349
350
      Collapse._jQueryInterface = function _jQueryInterface(config) {
        return this.each(function () {
          var $this = $$$1(this);
          var data = $this.data(DATA_KEY);
Mark Otto's avatar
dist    
Mark Otto committed
351

Mark Otto's avatar
dist    
Mark Otto committed
352
          var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {});
Mark Otto's avatar
dist    
Mark Otto committed
353

Mark Otto's avatar
dist    
Mark Otto committed
354
355
356
          if (!data && _config.toggle && /show|hide/.test(config)) {
            _config.toggle = false;
          }
Mark Otto's avatar
dist    
Mark Otto committed
357

Mark Otto's avatar
dist    
Mark Otto committed
358
359
360
361
362
363
364
365
366
          if (!data) {
            data = new Collapse(this, _config);
            $this.data(DATA_KEY, data);
          }

          if (typeof config === 'string') {
            if (typeof data[config] === 'undefined') {
              throw new TypeError("No method named \"" + config + "\"");
            }
Mark Otto's avatar
dist    
Mark Otto committed
367

Mark Otto's avatar
dist    
Mark Otto committed
368
            data[config]();
Mark Otto's avatar
dist    
Mark Otto committed
369
          }
Mark Otto's avatar
dist    
Mark Otto committed
370
371
        });
      };
Mark Otto's avatar
dist    
Mark Otto committed
372

Mark Otto's avatar
dist    
Mark Otto committed
373
374
375
376
      _createClass(Collapse, null, [{
        key: "VERSION",
        get: function get() {
          return VERSION;
Mark Otto's avatar
dist    
Mark Otto committed
377
        }
Mark Otto's avatar
dist    
Mark Otto committed
378
379
380
381
382
383
      }, {
        key: "Default",
        get: function get() {
          return Default;
        }
      }]);
fat's avatar
fat committed
384

Mark Otto's avatar
dist    
Mark Otto committed
385
386
387
388
389
390
391
      return Collapse;
    }();
    /**
     * ------------------------------------------------------------------------
     * Data Api implementation
     * ------------------------------------------------------------------------
     */
fat's avatar
fat committed
392

Mark Otto's avatar
dist    
Mark Otto committed
393

Mark Otto's avatar
dist    
Mark Otto committed
394
395
396
397
398
    $$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
      // preventDefault only for <a> elements (which change the URL) not inside the collapsible element
      if (event.currentTarget.tagName === 'A') {
        event.preventDefault();
      }
fat's avatar
fat committed
399

Mark Otto's avatar
dist    
Mark Otto committed
400
401
402
403
404
405
406
      var $trigger = $$$1(this);
      var selector = Util.getSelectorFromElement(this);
      var selectors = [].slice.call(document.querySelectorAll(selector));
      $$$1(selectors).each(function () {
        var $target = $$$1(this);
        var data = $target.data(DATA_KEY);
        var config = data ? 'toggle' : $trigger.data();
Mark Otto's avatar
dist    
Mark Otto committed
407

Mark Otto's avatar
dist    
Mark Otto committed
408
409
        Collapse._jQueryInterface.call($target, config);
      });
Mark Otto's avatar
build    
Mark Otto committed
410
    });
Mark Otto's avatar
dist    
Mark Otto committed
411
412
413
414
415
416
417
418
    /**
     * ------------------------------------------------------------------------
     * jQuery
     * ------------------------------------------------------------------------
     */

    $$$1.fn[NAME] = Collapse._jQueryInterface;
    $$$1.fn[NAME].Constructor = Collapse;
fat's avatar
fat committed
419

Mark Otto's avatar
dist    
Mark Otto committed
420
421
422
423
    $$$1.fn[NAME].noConflict = function () {
      $$$1.fn[NAME] = JQUERY_NO_CONFLICT;
      return Collapse._jQueryInterface;
    };
Mark Otto's avatar
dist    
Mark Otto committed
424

Mark Otto's avatar
dist    
Mark Otto committed
425
426
    return Collapse;
  }($);
fat's avatar
fat committed
427
428

  return Collapse;
Mark Otto's avatar
dist    
Mark Otto committed
429
430
431

})));
//# sourceMappingURL=collapse.js.map