1 | /*! |
||
2 | * Bootstrap collapse.js v4.6.2 (https://getbootstrap.com/) |
||
3 | * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) |
||
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) |
||
5 | */ |
||
6 | (function (global, factory) { |
||
7 | typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : |
||
8 | typeof define === 'function' && define.amd ? define(['jquery', './util'], factory) : |
||
9 | (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Collapse = factory(global.jQuery, global.Util)); |
||
10 | })(this, (function ($, Util) { 'use strict'; |
||
11 | |||
12 | function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } |
||
13 | |||
14 | var $__default = /*#__PURE__*/_interopDefaultLegacy($); |
||
15 | var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util); |
||
16 | |||
17 | function _defineProperties(target, props) { |
||
18 | for (var i = 0; i < props.length; i++) { |
||
19 | var descriptor = props[i]; |
||
20 | descriptor.enumerable = descriptor.enumerable || false; |
||
21 | descriptor.configurable = true; |
||
22 | if ("value" in descriptor) descriptor.writable = true; |
||
23 | Object.defineProperty(target, descriptor.key, descriptor); |
||
24 | } |
||
25 | } |
||
26 | |||
27 | function _createClass(Constructor, protoProps, staticProps) { |
||
28 | if (protoProps) _defineProperties(Constructor.prototype, protoProps); |
||
29 | if (staticProps) _defineProperties(Constructor, staticProps); |
||
30 | Object.defineProperty(Constructor, "prototype", { |
||
31 | writable: false |
||
32 | }); |
||
33 | return Constructor; |
||
34 | } |
||
35 | |||
36 | function _extends() { |
||
37 | _extends = Object.assign ? Object.assign.bind() : function (target) { |
||
38 | for (var i = 1; i < arguments.length; i++) { |
||
39 | var source = arguments[i]; |
||
40 | |||
41 | for (var key in source) { |
||
0 ignored issues
–
show
|
|||
42 | if (Object.prototype.hasOwnProperty.call(source, key)) { |
||
43 | target[key] = source[key]; |
||
44 | } |
||
45 | } |
||
46 | } |
||
47 | |||
48 | return target; |
||
49 | }; |
||
50 | return _extends.apply(this, arguments); |
||
51 | } |
||
52 | |||
53 | /** |
||
54 | * Constants |
||
55 | */ |
||
56 | |||
57 | var NAME = 'collapse'; |
||
58 | var VERSION = '4.6.2'; |
||
59 | var DATA_KEY = 'bs.collapse'; |
||
60 | var EVENT_KEY = "." + DATA_KEY; |
||
61 | var DATA_API_KEY = '.data-api'; |
||
62 | var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; |
||
63 | var CLASS_NAME_SHOW = 'show'; |
||
64 | var CLASS_NAME_COLLAPSE = 'collapse'; |
||
65 | var CLASS_NAME_COLLAPSING = 'collapsing'; |
||
66 | var CLASS_NAME_COLLAPSED = 'collapsed'; |
||
67 | var DIMENSION_WIDTH = 'width'; |
||
68 | var DIMENSION_HEIGHT = 'height'; |
||
69 | var EVENT_SHOW = "show" + EVENT_KEY; |
||
70 | var EVENT_SHOWN = "shown" + EVENT_KEY; |
||
71 | var EVENT_HIDE = "hide" + EVENT_KEY; |
||
72 | var EVENT_HIDDEN = "hidden" + EVENT_KEY; |
||
73 | var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; |
||
74 | var SELECTOR_ACTIVES = '.show, .collapsing'; |
||
75 | var SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]'; |
||
76 | var Default = { |
||
77 | toggle: true, |
||
78 | parent: '' |
||
79 | }; |
||
80 | var DefaultType = { |
||
81 | toggle: 'boolean', |
||
82 | parent: '(string|element)' |
||
83 | }; |
||
84 | /** |
||
85 | * Class definition |
||
86 | */ |
||
87 | |||
88 | var Collapse = /*#__PURE__*/function () { |
||
89 | function Collapse(element, config) { |
||
90 | this._isTransitioning = false; |
||
91 | this._element = element; |
||
92 | this._config = this._getConfig(config); |
||
93 | this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); |
||
94 | var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)); |
||
95 | |||
96 | for (var i = 0, len = toggleList.length; i < len; i++) { |
||
97 | var elem = toggleList[i]; |
||
98 | var selector = Util__default["default"].getSelectorFromElement(elem); |
||
99 | var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { |
||
100 | return foundElem === element; |
||
101 | }); |
||
102 | |||
103 | if (selector !== null && filterElement.length > 0) { |
||
104 | this._selector = selector; |
||
105 | |||
106 | this._triggerArray.push(elem); |
||
107 | } |
||
108 | } |
||
109 | |||
110 | this._parent = this._config.parent ? this._getParent() : null; |
||
111 | |||
112 | if (!this._config.parent) { |
||
113 | this._addAriaAndCollapsedClass(this._element, this._triggerArray); |
||
114 | } |
||
115 | |||
116 | if (this._config.toggle) { |
||
117 | this.toggle(); |
||
118 | } |
||
119 | } // Getters |
||
120 | |||
121 | |||
122 | var _proto = Collapse.prototype; |
||
123 | |||
124 | // Public |
||
125 | _proto.toggle = function toggle() { |
||
126 | if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) { |
||
127 | this.hide(); |
||
128 | } else { |
||
129 | this.show(); |
||
130 | } |
||
131 | }; |
||
132 | |||
133 | _proto.show = function show() { |
||
134 | var _this = this; |
||
135 | |||
136 | if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) { |
||
137 | return; |
||
138 | } |
||
139 | |||
140 | var actives; |
||
141 | var activesData; |
||
142 | |||
143 | if (this._parent) { |
||
144 | actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) { |
||
145 | if (typeof _this._config.parent === 'string') { |
||
146 | return elem.getAttribute('data-parent') === _this._config.parent; |
||
147 | } |
||
148 | |||
149 | return elem.classList.contains(CLASS_NAME_COLLAPSE); |
||
150 | }); |
||
151 | |||
152 | if (actives.length === 0) { |
||
153 | actives = null; |
||
154 | } |
||
155 | } |
||
156 | |||
157 | if (actives) { |
||
158 | activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY); |
||
159 | |||
160 | if (activesData && activesData._isTransitioning) { |
||
161 | return; |
||
162 | } |
||
163 | } |
||
164 | |||
165 | var startEvent = $__default["default"].Event(EVENT_SHOW); |
||
166 | $__default["default"](this._element).trigger(startEvent); |
||
167 | |||
168 | if (startEvent.isDefaultPrevented()) { |
||
169 | return; |
||
170 | } |
||
171 | |||
172 | if (actives) { |
||
173 | Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide'); |
||
174 | |||
175 | if (!activesData) { |
||
176 | $__default["default"](actives).data(DATA_KEY, null); |
||
177 | } |
||
178 | } |
||
179 | |||
180 | var dimension = this._getDimension(); |
||
181 | |||
182 | $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING); |
||
183 | this._element.style[dimension] = 0; |
||
184 | |||
185 | if (this._triggerArray.length) { |
||
186 | $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true); |
||
187 | } |
||
188 | |||
189 | this.setTransitioning(true); |
||
190 | |||
191 | var complete = function complete() { |
||
192 | $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW); |
||
193 | _this._element.style[dimension] = ''; |
||
194 | |||
195 | _this.setTransitioning(false); |
||
196 | |||
197 | $__default["default"](_this._element).trigger(EVENT_SHOWN); |
||
198 | }; |
||
199 | |||
200 | var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); |
||
201 | var scrollSize = "scroll" + capitalizedDimension; |
||
202 | var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element); |
||
203 | $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); |
||
204 | this._element.style[dimension] = this._element[scrollSize] + "px"; |
||
205 | }; |
||
206 | |||
207 | _proto.hide = function hide() { |
||
208 | var _this2 = this; |
||
209 | |||
210 | if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW)) { |
||
211 | return; |
||
212 | } |
||
213 | |||
214 | var startEvent = $__default["default"].Event(EVENT_HIDE); |
||
215 | $__default["default"](this._element).trigger(startEvent); |
||
216 | |||
217 | if (startEvent.isDefaultPrevented()) { |
||
218 | return; |
||
219 | } |
||
220 | |||
221 | var dimension = this._getDimension(); |
||
222 | |||
223 | this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; |
||
224 | Util__default["default"].reflow(this._element); |
||
225 | $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW); |
||
226 | var triggerArrayLength = this._triggerArray.length; |
||
227 | |||
228 | if (triggerArrayLength > 0) { |
||
229 | for (var i = 0; i < triggerArrayLength; i++) { |
||
230 | var trigger = this._triggerArray[i]; |
||
231 | var selector = Util__default["default"].getSelectorFromElement(trigger); |
||
232 | |||
233 | if (selector !== null) { |
||
234 | var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector))); |
||
235 | |||
236 | if (!$elem.hasClass(CLASS_NAME_SHOW)) { |
||
237 | $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false); |
||
238 | } |
||
239 | } |
||
240 | } |
||
241 | } |
||
242 | |||
243 | this.setTransitioning(true); |
||
244 | |||
245 | var complete = function complete() { |
||
246 | _this2.setTransitioning(false); |
||
247 | |||
248 | $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN); |
||
249 | }; |
||
250 | |||
251 | this._element.style[dimension] = ''; |
||
252 | var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element); |
||
253 | $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); |
||
254 | }; |
||
255 | |||
256 | _proto.setTransitioning = function setTransitioning(isTransitioning) { |
||
257 | this._isTransitioning = isTransitioning; |
||
258 | }; |
||
259 | |||
260 | _proto.dispose = function dispose() { |
||
261 | $__default["default"].removeData(this._element, DATA_KEY); |
||
262 | this._config = null; |
||
263 | this._parent = null; |
||
264 | this._element = null; |
||
265 | this._triggerArray = null; |
||
266 | this._isTransitioning = null; |
||
267 | } // Private |
||
268 | ; |
||
269 | |||
270 | _proto._getConfig = function _getConfig(config) { |
||
271 | config = _extends({}, Default, config); |
||
272 | config.toggle = Boolean(config.toggle); // Coerce string values |
||
273 | |||
274 | Util__default["default"].typeCheckConfig(NAME, config, DefaultType); |
||
275 | return config; |
||
276 | }; |
||
277 | |||
278 | _proto._getDimension = function _getDimension() { |
||
279 | var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH); |
||
280 | return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT; |
||
281 | }; |
||
282 | |||
283 | _proto._getParent = function _getParent() { |
||
284 | var _this3 = this; |
||
285 | |||
286 | var parent; |
||
287 | |||
288 | if (Util__default["default"].isElement(this._config.parent)) { |
||
289 | parent = this._config.parent; // It's a jQuery object |
||
290 | |||
291 | if (typeof this._config.parent.jquery !== 'undefined') { |
||
292 | parent = this._config.parent[0]; |
||
293 | } |
||
294 | } else { |
||
295 | parent = document.querySelector(this._config.parent); |
||
296 | } |
||
297 | |||
298 | var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; |
||
299 | var children = [].slice.call(parent.querySelectorAll(selector)); |
||
300 | $__default["default"](children).each(function (i, element) { |
||
301 | _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); |
||
302 | }); |
||
303 | return parent; |
||
304 | }; |
||
305 | |||
306 | _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { |
||
307 | var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW); |
||
308 | |||
309 | if (triggerArray.length) { |
||
310 | $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen); |
||
311 | } |
||
312 | } // Static |
||
313 | ; |
||
314 | |||
315 | Collapse._getTargetFromElement = function _getTargetFromElement(element) { |
||
316 | var selector = Util__default["default"].getSelectorFromElement(element); |
||
317 | return selector ? document.querySelector(selector) : null; |
||
318 | }; |
||
319 | |||
320 | Collapse._jQueryInterface = function _jQueryInterface(config) { |
||
321 | return this.each(function () { |
||
322 | var $element = $__default["default"](this); |
||
323 | var data = $element.data(DATA_KEY); |
||
324 | |||
325 | var _config = _extends({}, Default, $element.data(), typeof config === 'object' && config ? config : {}); |
||
326 | |||
327 | if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { |
||
328 | _config.toggle = false; |
||
329 | } |
||
330 | |||
331 | if (!data) { |
||
332 | data = new Collapse(this, _config); |
||
333 | $element.data(DATA_KEY, data); |
||
334 | } |
||
335 | |||
336 | if (typeof config === 'string') { |
||
337 | if (typeof data[config] === 'undefined') { |
||
338 | throw new TypeError("No method named \"" + config + "\""); |
||
339 | } |
||
340 | |||
341 | data[config](); |
||
342 | } |
||
343 | }); |
||
344 | }; |
||
345 | |||
346 | _createClass(Collapse, null, [{ |
||
347 | key: "VERSION", |
||
348 | get: function get() { |
||
349 | return VERSION; |
||
350 | } |
||
351 | }, { |
||
352 | key: "Default", |
||
353 | get: function get() { |
||
354 | return Default; |
||
355 | } |
||
356 | }]); |
||
357 | |||
358 | return Collapse; |
||
359 | }(); |
||
360 | /** |
||
361 | * Data API implementation |
||
362 | */ |
||
363 | |||
364 | |||
365 | $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { |
||
366 | // preventDefault only for <a> elements (which change the URL) not inside the collapsible element |
||
367 | if (event.currentTarget.tagName === 'A') { |
||
368 | event.preventDefault(); |
||
369 | } |
||
370 | |||
371 | var $trigger = $__default["default"](this); |
||
372 | var selector = Util__default["default"].getSelectorFromElement(this); |
||
373 | var selectors = [].slice.call(document.querySelectorAll(selector)); |
||
374 | $__default["default"](selectors).each(function () { |
||
375 | var $target = $__default["default"](this); |
||
376 | var data = $target.data(DATA_KEY); |
||
377 | var config = data ? 'toggle' : $trigger.data(); |
||
378 | |||
379 | Collapse._jQueryInterface.call($target, config); |
||
380 | }); |
||
381 | }); |
||
382 | /** |
||
383 | * jQuery |
||
384 | */ |
||
385 | |||
386 | $__default["default"].fn[NAME] = Collapse._jQueryInterface; |
||
387 | $__default["default"].fn[NAME].Constructor = Collapse; |
||
388 | |||
389 | $__default["default"].fn[NAME].noConflict = function () { |
||
390 | $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; |
||
391 | return Collapse._jQueryInterface; |
||
392 | }; |
||
393 | |||
394 | return Collapse; |
||
395 | |||
396 | })); |
||
397 | //# sourceMappingURL=collapse.js.map |
||
398 |
When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically: