1 | /*! |
||
2 | * Bootstrap modal.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.Modal = 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 = 'modal'; |
||
58 | var VERSION = '4.6.2'; |
||
59 | var DATA_KEY = 'bs.modal'; |
||
60 | var EVENT_KEY = "." + DATA_KEY; |
||
61 | var DATA_API_KEY = '.data-api'; |
||
62 | var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME]; |
||
63 | var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key |
||
64 | |||
65 | var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable'; |
||
66 | var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; |
||
67 | var CLASS_NAME_BACKDROP = 'modal-backdrop'; |
||
68 | var CLASS_NAME_OPEN = 'modal-open'; |
||
69 | var CLASS_NAME_FADE = 'fade'; |
||
70 | var CLASS_NAME_SHOW = 'show'; |
||
71 | var CLASS_NAME_STATIC = 'modal-static'; |
||
72 | var EVENT_HIDE = "hide" + EVENT_KEY; |
||
73 | var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY; |
||
74 | var EVENT_HIDDEN = "hidden" + EVENT_KEY; |
||
75 | var EVENT_SHOW = "show" + EVENT_KEY; |
||
76 | var EVENT_SHOWN = "shown" + EVENT_KEY; |
||
77 | var EVENT_FOCUSIN = "focusin" + EVENT_KEY; |
||
78 | var EVENT_RESIZE = "resize" + EVENT_KEY; |
||
79 | var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; |
||
80 | var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY; |
||
81 | var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY; |
||
82 | var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY; |
||
83 | var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; |
||
84 | var SELECTOR_DIALOG = '.modal-dialog'; |
||
85 | var SELECTOR_MODAL_BODY = '.modal-body'; |
||
86 | var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]'; |
||
87 | var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]'; |
||
88 | var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; |
||
89 | var SELECTOR_STICKY_CONTENT = '.sticky-top'; |
||
90 | var Default = { |
||
91 | backdrop: true, |
||
92 | keyboard: true, |
||
93 | focus: true, |
||
94 | show: true |
||
95 | }; |
||
96 | var DefaultType = { |
||
97 | backdrop: '(boolean|string)', |
||
98 | keyboard: 'boolean', |
||
99 | focus: 'boolean', |
||
100 | show: 'boolean' |
||
101 | }; |
||
102 | /** |
||
103 | * Class definition |
||
104 | */ |
||
105 | |||
106 | var Modal = /*#__PURE__*/function () { |
||
107 | function Modal(element, config) { |
||
108 | this._config = this._getConfig(config); |
||
109 | this._element = element; |
||
110 | this._dialog = element.querySelector(SELECTOR_DIALOG); |
||
111 | this._backdrop = null; |
||
112 | this._isShown = false; |
||
113 | this._isBodyOverflowing = false; |
||
114 | this._ignoreBackdropClick = false; |
||
115 | this._isTransitioning = false; |
||
116 | this._scrollbarWidth = 0; |
||
117 | } // Getters |
||
118 | |||
119 | |||
120 | var _proto = Modal.prototype; |
||
121 | |||
122 | // Public |
||
123 | _proto.toggle = function toggle(relatedTarget) { |
||
124 | return this._isShown ? this.hide() : this.show(relatedTarget); |
||
125 | }; |
||
126 | |||
127 | _proto.show = function show(relatedTarget) { |
||
128 | var _this = this; |
||
129 | |||
130 | if (this._isShown || this._isTransitioning) { |
||
131 | return; |
||
132 | } |
||
133 | |||
134 | var showEvent = $__default["default"].Event(EVENT_SHOW, { |
||
135 | relatedTarget: relatedTarget |
||
136 | }); |
||
137 | $__default["default"](this._element).trigger(showEvent); |
||
138 | |||
139 | if (showEvent.isDefaultPrevented()) { |
||
140 | return; |
||
141 | } |
||
142 | |||
143 | this._isShown = true; |
||
144 | |||
145 | if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) { |
||
146 | this._isTransitioning = true; |
||
147 | } |
||
148 | |||
149 | this._checkScrollbar(); |
||
150 | |||
151 | this._setScrollbar(); |
||
152 | |||
153 | this._adjustDialog(); |
||
154 | |||
155 | this._setEscapeEvent(); |
||
156 | |||
157 | this._setResizeEvent(); |
||
158 | |||
159 | $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) { |
||
160 | return _this.hide(event); |
||
161 | }); |
||
162 | $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () { |
||
163 | $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) { |
||
164 | if ($__default["default"](event.target).is(_this._element)) { |
||
165 | _this._ignoreBackdropClick = true; |
||
166 | } |
||
167 | }); |
||
168 | }); |
||
169 | |||
170 | this._showBackdrop(function () { |
||
171 | return _this._showElement(relatedTarget); |
||
172 | }); |
||
173 | }; |
||
174 | |||
175 | _proto.hide = function hide(event) { |
||
176 | var _this2 = this; |
||
177 | |||
178 | if (event) { |
||
179 | event.preventDefault(); |
||
180 | } |
||
181 | |||
182 | if (!this._isShown || this._isTransitioning) { |
||
183 | return; |
||
184 | } |
||
185 | |||
186 | var hideEvent = $__default["default"].Event(EVENT_HIDE); |
||
187 | $__default["default"](this._element).trigger(hideEvent); |
||
188 | |||
189 | if (!this._isShown || hideEvent.isDefaultPrevented()) { |
||
190 | return; |
||
191 | } |
||
192 | |||
193 | this._isShown = false; |
||
194 | var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE); |
||
195 | |||
196 | if (transition) { |
||
197 | this._isTransitioning = true; |
||
198 | } |
||
199 | |||
200 | this._setEscapeEvent(); |
||
201 | |||
202 | this._setResizeEvent(); |
||
203 | |||
204 | $__default["default"](document).off(EVENT_FOCUSIN); |
||
205 | $__default["default"](this._element).removeClass(CLASS_NAME_SHOW); |
||
206 | $__default["default"](this._element).off(EVENT_CLICK_DISMISS); |
||
207 | $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS); |
||
208 | |||
209 | if (transition) { |
||
210 | var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._element); |
||
211 | $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function (event) { |
||
212 | return _this2._hideModal(event); |
||
213 | }).emulateTransitionEnd(transitionDuration); |
||
214 | } else { |
||
215 | this._hideModal(); |
||
216 | } |
||
217 | }; |
||
218 | |||
219 | _proto.dispose = function dispose() { |
||
220 | [window, this._element, this._dialog].forEach(function (htmlElement) { |
||
221 | return $__default["default"](htmlElement).off(EVENT_KEY); |
||
222 | }); |
||
223 | /** |
||
224 | * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` |
||
225 | * Do not move `document` in `htmlElements` array |
||
226 | * It will remove `EVENT_CLICK_DATA_API` event that should remain |
||
227 | */ |
||
228 | |||
229 | $__default["default"](document).off(EVENT_FOCUSIN); |
||
230 | $__default["default"].removeData(this._element, DATA_KEY); |
||
231 | this._config = null; |
||
232 | this._element = null; |
||
233 | this._dialog = null; |
||
234 | this._backdrop = null; |
||
235 | this._isShown = null; |
||
236 | this._isBodyOverflowing = null; |
||
237 | this._ignoreBackdropClick = null; |
||
238 | this._isTransitioning = null; |
||
239 | this._scrollbarWidth = null; |
||
240 | }; |
||
241 | |||
242 | _proto.handleUpdate = function handleUpdate() { |
||
243 | this._adjustDialog(); |
||
244 | } // Private |
||
245 | ; |
||
246 | |||
247 | _proto._getConfig = function _getConfig(config) { |
||
248 | config = _extends({}, Default, config); |
||
249 | Util__default["default"].typeCheckConfig(NAME, config, DefaultType); |
||
250 | return config; |
||
251 | }; |
||
252 | |||
253 | _proto._triggerBackdropTransition = function _triggerBackdropTransition() { |
||
254 | var _this3 = this; |
||
255 | |||
256 | var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED); |
||
257 | $__default["default"](this._element).trigger(hideEventPrevented); |
||
258 | |||
259 | if (hideEventPrevented.isDefaultPrevented()) { |
||
260 | return; |
||
261 | } |
||
262 | |||
263 | var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; |
||
264 | |||
265 | if (!isModalOverflowing) { |
||
266 | this._element.style.overflowY = 'hidden'; |
||
267 | } |
||
268 | |||
269 | this._element.classList.add(CLASS_NAME_STATIC); |
||
270 | |||
271 | var modalTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog); |
||
272 | $__default["default"](this._element).off(Util__default["default"].TRANSITION_END); |
||
273 | $__default["default"](this._element).one(Util__default["default"].TRANSITION_END, function () { |
||
274 | _this3._element.classList.remove(CLASS_NAME_STATIC); |
||
275 | |||
276 | if (!isModalOverflowing) { |
||
277 | $__default["default"](_this3._element).one(Util__default["default"].TRANSITION_END, function () { |
||
278 | _this3._element.style.overflowY = ''; |
||
279 | }).emulateTransitionEnd(_this3._element, modalTransitionDuration); |
||
280 | } |
||
281 | }).emulateTransitionEnd(modalTransitionDuration); |
||
282 | |||
283 | this._element.focus(); |
||
284 | }; |
||
285 | |||
286 | _proto._showElement = function _showElement(relatedTarget) { |
||
287 | var _this4 = this; |
||
288 | |||
289 | var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE); |
||
290 | var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null; |
||
291 | |||
292 | if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { |
||
293 | // Don't move modal's DOM position |
||
294 | document.body.appendChild(this._element); |
||
295 | } |
||
296 | |||
297 | this._element.style.display = 'block'; |
||
298 | |||
299 | this._element.removeAttribute('aria-hidden'); |
||
300 | |||
301 | this._element.setAttribute('aria-modal', true); |
||
302 | |||
303 | this._element.setAttribute('role', 'dialog'); |
||
304 | |||
305 | if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) { |
||
306 | modalBody.scrollTop = 0; |
||
307 | } else { |
||
308 | this._element.scrollTop = 0; |
||
309 | } |
||
310 | |||
311 | if (transition) { |
||
312 | Util__default["default"].reflow(this._element); |
||
313 | } |
||
314 | |||
315 | $__default["default"](this._element).addClass(CLASS_NAME_SHOW); |
||
316 | |||
317 | if (this._config.focus) { |
||
318 | this._enforceFocus(); |
||
319 | } |
||
320 | |||
321 | var shownEvent = $__default["default"].Event(EVENT_SHOWN, { |
||
322 | relatedTarget: relatedTarget |
||
323 | }); |
||
324 | |||
325 | var transitionComplete = function transitionComplete() { |
||
326 | if (_this4._config.focus) { |
||
327 | _this4._element.focus(); |
||
328 | } |
||
329 | |||
330 | _this4._isTransitioning = false; |
||
331 | $__default["default"](_this4._element).trigger(shownEvent); |
||
332 | }; |
||
333 | |||
334 | if (transition) { |
||
335 | var transitionDuration = Util__default["default"].getTransitionDurationFromElement(this._dialog); |
||
336 | $__default["default"](this._dialog).one(Util__default["default"].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); |
||
337 | } else { |
||
338 | transitionComplete(); |
||
339 | } |
||
340 | }; |
||
341 | |||
342 | _proto._enforceFocus = function _enforceFocus() { |
||
343 | var _this5 = this; |
||
344 | |||
345 | $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop |
||
346 | .on(EVENT_FOCUSIN, function (event) { |
||
347 | if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) { |
||
348 | _this5._element.focus(); |
||
349 | } |
||
350 | }); |
||
351 | }; |
||
352 | |||
353 | _proto._setEscapeEvent = function _setEscapeEvent() { |
||
354 | var _this6 = this; |
||
355 | |||
356 | if (this._isShown) { |
||
357 | $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) { |
||
358 | if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { |
||
359 | event.preventDefault(); |
||
360 | |||
361 | _this6.hide(); |
||
362 | } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) { |
||
363 | _this6._triggerBackdropTransition(); |
||
364 | } |
||
365 | }); |
||
366 | } else if (!this._isShown) { |
||
367 | $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS); |
||
368 | } |
||
369 | }; |
||
370 | |||
371 | _proto._setResizeEvent = function _setResizeEvent() { |
||
372 | var _this7 = this; |
||
373 | |||
374 | if (this._isShown) { |
||
375 | $__default["default"](window).on(EVENT_RESIZE, function (event) { |
||
376 | return _this7.handleUpdate(event); |
||
377 | }); |
||
378 | } else { |
||
379 | $__default["default"](window).off(EVENT_RESIZE); |
||
380 | } |
||
381 | }; |
||
382 | |||
383 | _proto._hideModal = function _hideModal() { |
||
384 | var _this8 = this; |
||
385 | |||
386 | this._element.style.display = 'none'; |
||
387 | |||
388 | this._element.setAttribute('aria-hidden', true); |
||
389 | |||
390 | this._element.removeAttribute('aria-modal'); |
||
391 | |||
392 | this._element.removeAttribute('role'); |
||
393 | |||
394 | this._isTransitioning = false; |
||
395 | |||
396 | this._showBackdrop(function () { |
||
397 | $__default["default"](document.body).removeClass(CLASS_NAME_OPEN); |
||
398 | |||
399 | _this8._resetAdjustments(); |
||
400 | |||
401 | _this8._resetScrollbar(); |
||
402 | |||
403 | $__default["default"](_this8._element).trigger(EVENT_HIDDEN); |
||
404 | }); |
||
405 | }; |
||
406 | |||
407 | _proto._removeBackdrop = function _removeBackdrop() { |
||
408 | if (this._backdrop) { |
||
409 | $__default["default"](this._backdrop).remove(); |
||
410 | this._backdrop = null; |
||
411 | } |
||
412 | }; |
||
413 | |||
414 | _proto._showBackdrop = function _showBackdrop(callback) { |
||
415 | var _this9 = this; |
||
416 | |||
417 | var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : ''; |
||
418 | |||
419 | if (this._isShown && this._config.backdrop) { |
||
420 | this._backdrop = document.createElement('div'); |
||
421 | this._backdrop.className = CLASS_NAME_BACKDROP; |
||
422 | |||
423 | if (animate) { |
||
424 | this._backdrop.classList.add(animate); |
||
425 | } |
||
426 | |||
427 | $__default["default"](this._backdrop).appendTo(document.body); |
||
428 | $__default["default"](this._element).on(EVENT_CLICK_DISMISS, function (event) { |
||
429 | if (_this9._ignoreBackdropClick) { |
||
430 | _this9._ignoreBackdropClick = false; |
||
431 | return; |
||
432 | } |
||
433 | |||
434 | if (event.target !== event.currentTarget) { |
||
435 | return; |
||
436 | } |
||
437 | |||
438 | if (_this9._config.backdrop === 'static') { |
||
439 | _this9._triggerBackdropTransition(); |
||
440 | } else { |
||
441 | _this9.hide(); |
||
442 | } |
||
443 | }); |
||
444 | |||
445 | if (animate) { |
||
446 | Util__default["default"].reflow(this._backdrop); |
||
447 | } |
||
448 | |||
449 | $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW); |
||
450 | |||
451 | if (!callback) { |
||
452 | return; |
||
453 | } |
||
454 | |||
455 | if (!animate) { |
||
456 | callback(); |
||
457 | return; |
||
458 | } |
||
459 | |||
460 | var backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop); |
||
461 | $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); |
||
462 | } else if (!this._isShown && this._backdrop) { |
||
463 | $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW); |
||
464 | |||
465 | var callbackRemove = function callbackRemove() { |
||
466 | _this9._removeBackdrop(); |
||
467 | |||
468 | if (callback) { |
||
469 | callback(); |
||
470 | } |
||
471 | }; |
||
472 | |||
473 | if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE)) { |
||
474 | var _backdropTransitionDuration = Util__default["default"].getTransitionDurationFromElement(this._backdrop); |
||
475 | |||
476 | $__default["default"](this._backdrop).one(Util__default["default"].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); |
||
477 | } else { |
||
478 | callbackRemove(); |
||
479 | } |
||
480 | } else if (callback) { |
||
481 | callback(); |
||
482 | } |
||
483 | } // ---------------------------------------------------------------------- |
||
484 | // the following methods are used to handle overflowing modals |
||
485 | // todo (fat): these should probably be refactored out of modal.js |
||
486 | // ---------------------------------------------------------------------- |
||
487 | ; |
||
488 | |||
489 | _proto._adjustDialog = function _adjustDialog() { |
||
490 | var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; |
||
491 | |||
492 | if (!this._isBodyOverflowing && isModalOverflowing) { |
||
493 | this._element.style.paddingLeft = this._scrollbarWidth + "px"; |
||
494 | } |
||
495 | |||
496 | if (this._isBodyOverflowing && !isModalOverflowing) { |
||
497 | this._element.style.paddingRight = this._scrollbarWidth + "px"; |
||
498 | } |
||
499 | }; |
||
500 | |||
501 | _proto._resetAdjustments = function _resetAdjustments() { |
||
502 | this._element.style.paddingLeft = ''; |
||
503 | this._element.style.paddingRight = ''; |
||
504 | }; |
||
505 | |||
506 | _proto._checkScrollbar = function _checkScrollbar() { |
||
507 | var rect = document.body.getBoundingClientRect(); |
||
508 | this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; |
||
509 | this._scrollbarWidth = this._getScrollbarWidth(); |
||
510 | }; |
||
511 | |||
512 | _proto._setScrollbar = function _setScrollbar() { |
||
513 | var _this10 = this; |
||
514 | |||
515 | if (this._isBodyOverflowing) { |
||
516 | // Note: DOMNode.style.paddingRight returns the actual value or '' if not set |
||
517 | // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set |
||
518 | var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); |
||
519 | var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding |
||
520 | |||
521 | $__default["default"](fixedContent).each(function (index, element) { |
||
522 | var actualPadding = element.style.paddingRight; |
||
523 | var calculatedPadding = $__default["default"](element).css('padding-right'); |
||
524 | $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px"); |
||
525 | }); // Adjust sticky content margin |
||
526 | |||
527 | $__default["default"](stickyContent).each(function (index, element) { |
||
528 | var actualMargin = element.style.marginRight; |
||
529 | var calculatedMargin = $__default["default"](element).css('margin-right'); |
||
530 | $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px"); |
||
531 | }); // Adjust body padding |
||
532 | |||
533 | var actualPadding = document.body.style.paddingRight; |
||
534 | var calculatedPadding = $__default["default"](document.body).css('padding-right'); |
||
535 | $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); |
||
536 | } |
||
537 | |||
538 | $__default["default"](document.body).addClass(CLASS_NAME_OPEN); |
||
539 | }; |
||
540 | |||
541 | _proto._resetScrollbar = function _resetScrollbar() { |
||
542 | // Restore fixed content padding |
||
543 | var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT)); |
||
544 | $__default["default"](fixedContent).each(function (index, element) { |
||
545 | var padding = $__default["default"](element).data('padding-right'); |
||
546 | $__default["default"](element).removeData('padding-right'); |
||
547 | element.style.paddingRight = padding ? padding : ''; |
||
548 | }); // Restore sticky content |
||
549 | |||
550 | var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT)); |
||
551 | $__default["default"](elements).each(function (index, element) { |
||
552 | var margin = $__default["default"](element).data('margin-right'); |
||
553 | |||
554 | if (typeof margin !== 'undefined') { |
||
555 | $__default["default"](element).css('margin-right', margin).removeData('margin-right'); |
||
556 | } |
||
557 | }); // Restore body padding |
||
558 | |||
559 | var padding = $__default["default"](document.body).data('padding-right'); |
||
560 | $__default["default"](document.body).removeData('padding-right'); |
||
561 | document.body.style.paddingRight = padding ? padding : ''; |
||
562 | }; |
||
563 | |||
564 | _proto._getScrollbarWidth = function _getScrollbarWidth() { |
||
565 | // thx d.walsh |
||
566 | var scrollDiv = document.createElement('div'); |
||
567 | scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; |
||
568 | document.body.appendChild(scrollDiv); |
||
569 | var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; |
||
570 | document.body.removeChild(scrollDiv); |
||
571 | return scrollbarWidth; |
||
572 | } // Static |
||
573 | ; |
||
574 | |||
575 | Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { |
||
576 | return this.each(function () { |
||
577 | var data = $__default["default"](this).data(DATA_KEY); |
||
578 | |||
579 | var _config = _extends({}, Default, $__default["default"](this).data(), typeof config === 'object' && config ? config : {}); |
||
580 | |||
581 | if (!data) { |
||
582 | data = new Modal(this, _config); |
||
583 | $__default["default"](this).data(DATA_KEY, data); |
||
584 | } |
||
585 | |||
586 | if (typeof config === 'string') { |
||
587 | if (typeof data[config] === 'undefined') { |
||
588 | throw new TypeError("No method named \"" + config + "\""); |
||
589 | } |
||
590 | |||
591 | data[config](relatedTarget); |
||
592 | } else if (_config.show) { |
||
593 | data.show(relatedTarget); |
||
594 | } |
||
595 | }); |
||
596 | }; |
||
597 | |||
598 | _createClass(Modal, null, [{ |
||
599 | key: "VERSION", |
||
600 | get: function get() { |
||
601 | return VERSION; |
||
602 | } |
||
603 | }, { |
||
604 | key: "Default", |
||
605 | get: function get() { |
||
606 | return Default; |
||
607 | } |
||
608 | }]); |
||
609 | |||
610 | return Modal; |
||
611 | }(); |
||
612 | /** |
||
613 | * Data API implementation |
||
614 | */ |
||
615 | |||
616 | |||
617 | $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { |
||
618 | var _this11 = this; |
||
619 | |||
620 | var target; |
||
621 | var selector = Util__default["default"].getSelectorFromElement(this); |
||
622 | |||
623 | if (selector) { |
||
624 | target = document.querySelector(selector); |
||
625 | } |
||
626 | |||
627 | var config = $__default["default"](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data()); |
||
628 | |||
629 | if (this.tagName === 'A' || this.tagName === 'AREA') { |
||
630 | event.preventDefault(); |
||
631 | } |
||
632 | |||
633 | var $target = $__default["default"](target).one(EVENT_SHOW, function (showEvent) { |
||
634 | if (showEvent.isDefaultPrevented()) { |
||
635 | // Only register focus restorer if modal will actually get shown |
||
636 | return; |
||
637 | } |
||
638 | |||
639 | $target.one(EVENT_HIDDEN, function () { |
||
640 | if ($__default["default"](_this11).is(':visible')) { |
||
641 | _this11.focus(); |
||
642 | } |
||
643 | }); |
||
644 | }); |
||
645 | |||
646 | Modal._jQueryInterface.call($__default["default"](target), config, this); |
||
647 | }); |
||
648 | /** |
||
649 | * jQuery |
||
650 | */ |
||
651 | |||
652 | $__default["default"].fn[NAME] = Modal._jQueryInterface; |
||
653 | $__default["default"].fn[NAME].Constructor = Modal; |
||
654 | |||
655 | $__default["default"].fn[NAME].noConflict = function () { |
||
656 | $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT; |
||
657 | return Modal._jQueryInterface; |
||
658 | }; |
||
659 | |||
660 | return Modal; |
||
661 | |||
662 | })); |
||
663 | //# sourceMappingURL=modal.js.map |
||
664 |
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: