diff options
Diffstat (limited to 'js/dist/modal.js')
| -rw-r--r-- | js/dist/modal.js | 691 |
1 files changed, 305 insertions, 386 deletions
diff --git a/js/dist/modal.js b/js/dist/modal.js index 3c52cdb6c..7541d75af 100644 --- a/js/dist/modal.js +++ b/js/dist/modal.js @@ -1,13 +1,13 @@ /*! - * Bootstrap modal.js v5.0.0-alpha3 (https://getbootstrap.com/) - * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Bootstrap modal.js v5.0.0-beta3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js')) : - typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine)); -}(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) : + typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base)); +}(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict'; function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } @@ -15,52 +15,66 @@ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler); var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator); var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine); + var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.0.0-alpha3): util/index.js + * Bootstrap (v5.0.0-beta3): util/index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - var MILLISECONDS_MULTIPLIER = 1000; - var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) + const MILLISECONDS_MULTIPLIER = 1000; + const TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp) - var toType = function toType(obj) { + const toType = obj => { if (obj === null || obj === undefined) { - return "" + obj; + return `${obj}`; } return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); }; - var getSelector = function getSelector(element) { - var selector = element.getAttribute('data-bs-target'); + const getSelector = element => { + let selector = element.getAttribute('data-bs-target'); if (!selector || selector === '#') { - var hrefAttr = element.getAttribute('href'); + let hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, + // so everything starting with `#` or `.`. If a "real" URL is used as the selector, + // `document.querySelector` will rightfully complain it is invalid. + // See https://github.com/twbs/bootstrap/issues/32273 + + if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) { + return null; + } // Just in case some CMS puts out a full URL with the anchor appended + + + if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) { + hrefAttr = '#' + hrefAttr.split('#')[1]; + } + selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null; } return selector; }; - var getElementFromSelector = function getElementFromSelector(element) { - var selector = getSelector(element); + const getElementFromSelector = element => { + const selector = getSelector(element); return selector ? document.querySelector(selector) : null; }; - var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) { + const getTransitionDurationFromElement = element => { if (!element) { return 0; } // Get transition-duration of the element - var _window$getComputedSt = window.getComputedStyle(element), - transitionDuration = _window$getComputedSt.transitionDuration, - transitionDelay = _window$getComputedSt.transitionDelay; - - var floatTransitionDuration = Number.parseFloat(transitionDuration); - var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found + let { + transitionDuration, + transitionDelay + } = window.getComputedStyle(element); + const floatTransitionDuration = Number.parseFloat(transitionDuration); + const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found if (!floatTransitionDuration && !floatTransitionDelay) { return 0; @@ -72,18 +86,16 @@ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; }; - var triggerTransitionEnd = function triggerTransitionEnd(element) { + const triggerTransitionEnd = element => { element.dispatchEvent(new Event(TRANSITION_END)); }; - var isElement = function isElement(obj) { - return (obj[0] || obj).nodeType; - }; + const isElement = obj => (obj[0] || obj).nodeType; - var emulateTransitionEnd = function emulateTransitionEnd(element, duration) { - var called = false; - var durationPadding = 5; - var emulatedDuration = duration + durationPadding; + const emulateTransitionEnd = (element, duration) => { + let called = false; + const durationPadding = 5; + const emulatedDuration = duration + durationPadding; function listener() { called = true; @@ -91,46 +103,45 @@ } element.addEventListener(TRANSITION_END, listener); - setTimeout(function () { + setTimeout(() => { if (!called) { triggerTransitionEnd(element); } }, emulatedDuration); }; - var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) { - Object.keys(configTypes).forEach(function (property) { - var expectedTypes = configTypes[property]; - var value = config[property]; - var valueType = value && isElement(value) ? 'element' : toType(value); + const typeCheckConfig = (componentName, config, configTypes) => { + Object.keys(configTypes).forEach(property => { + const expectedTypes = configTypes[property]; + const value = config[property]; + const valueType = value && isElement(value) ? 'element' : toType(value); if (!new RegExp(expectedTypes).test(valueType)) { - throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); + throw new TypeError(`${componentName.toUpperCase()}: ` + `Option "${property}" provided type "${valueType}" ` + `but expected type "${expectedTypes}".`); } }); }; - var isVisible = function isVisible(element) { + const isVisible = element => { if (!element) { return false; } if (element.style && element.parentNode && element.parentNode.style) { - var elementStyle = getComputedStyle(element); - var parentNodeStyle = getComputedStyle(element.parentNode); + const elementStyle = getComputedStyle(element); + const parentNodeStyle = getComputedStyle(element.parentNode); return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden'; } return false; }; - var reflow = function reflow(element) { - return element.offsetHeight; - }; + const reflow = element => element.offsetHeight; - var getjQuery = function getjQuery() { - var _window = window, - jQuery = _window.jQuery; + const getjQuery = () => { + const { + jQuery + } = window; if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { return jQuery; @@ -139,7 +150,7 @@ return null; }; - var onDOMContentLoaded = function onDOMContentLoaded(callback) { + const onDOMContentLoaded = callback => { if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', callback); } else { @@ -147,149 +158,121 @@ } }; - var isRTL = document.documentElement.dir === 'rtl'; - - 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; } - /** - * ------------------------------------------------------------------------ - * Constants - * ------------------------------------------------------------------------ - */ - - var VERSION = '5.0.0-alpha3'; - - var BaseComponent = /*#__PURE__*/function () { - function BaseComponent(element) { - if (!element) { - return; - } - - this._element = element; - Data__default['default'].setData(element, this.constructor.DATA_KEY, this); - } - - var _proto = BaseComponent.prototype; + const isRTL = () => document.documentElement.dir === 'rtl'; - _proto.dispose = function dispose() { - Data__default['default'].removeData(this._element, this.constructor.DATA_KEY); - this._element = null; - } - /** Static */ - ; + const defineJQueryPlugin = (name, plugin) => { + onDOMContentLoaded(() => { + const $ = getjQuery(); + /* istanbul ignore if */ - BaseComponent.getInstance = function getInstance(element) { - return Data__default['default'].getData(element, this.DATA_KEY); - }; + if ($) { + const JQUERY_NO_CONFLICT = $.fn[name]; + $.fn[name] = plugin.jQueryInterface; + $.fn[name].Constructor = plugin; - _createClass(BaseComponent, null, [{ - key: "VERSION", - get: function get() { - return VERSION; + $.fn[name].noConflict = () => { + $.fn[name] = JQUERY_NO_CONFLICT; + return plugin.jQueryInterface; + }; } - }]); - - return BaseComponent; - }(); - - 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); } - - function _defineProperties$1(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$1(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties$1(Constructor.prototype, protoProps); if (staticProps) _defineProperties$1(Constructor, staticProps); return Constructor; } + }); + }; - function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; } + /** + * -------------------------------------------------------------------------- + * Bootstrap (v5.0.0-beta3): modal.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + * -------------------------------------------------------------------------- + */ /** * ------------------------------------------------------------------------ * Constants * ------------------------------------------------------------------------ */ - var NAME = 'modal'; - var DATA_KEY = 'bs.modal'; - var EVENT_KEY = "." + DATA_KEY; - var DATA_API_KEY = '.data-api'; - var ESCAPE_KEY = 'Escape'; - var Default = { + const NAME = 'modal'; + const DATA_KEY = 'bs.modal'; + const EVENT_KEY = `.${DATA_KEY}`; + const DATA_API_KEY = '.data-api'; + const ESCAPE_KEY = 'Escape'; + const Default = { backdrop: true, keyboard: true, focus: true }; - var DefaultType = { + const DefaultType = { backdrop: '(boolean|string)', keyboard: 'boolean', focus: 'boolean' }; - var EVENT_HIDE = "hide" + EVENT_KEY; - var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY; - var EVENT_HIDDEN = "hidden" + EVENT_KEY; - var EVENT_SHOW = "show" + EVENT_KEY; - var EVENT_SHOWN = "shown" + EVENT_KEY; - var EVENT_FOCUSIN = "focusin" + EVENT_KEY; - var EVENT_RESIZE = "resize" + EVENT_KEY; - var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY; - var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY; - var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY; - var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY; - var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY; - var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; - var CLASS_NAME_BACKDROP = 'modal-backdrop'; - var CLASS_NAME_OPEN = 'modal-open'; - var CLASS_NAME_FADE = 'fade'; - var CLASS_NAME_SHOW = 'show'; - var CLASS_NAME_STATIC = 'modal-static'; - var SELECTOR_DIALOG = '.modal-dialog'; - var SELECTOR_MODAL_BODY = '.modal-body'; - var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]'; - var SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]'; - var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; - var SELECTOR_STICKY_CONTENT = '.sticky-top'; + const EVENT_HIDE = `hide${EVENT_KEY}`; + const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`; + const EVENT_HIDDEN = `hidden${EVENT_KEY}`; + const EVENT_SHOW = `show${EVENT_KEY}`; + const EVENT_SHOWN = `shown${EVENT_KEY}`; + const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; + const EVENT_RESIZE = `resize${EVENT_KEY}`; + const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`; + const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`; + const EVENT_MOUSEUP_DISMISS = `mouseup.dismiss${EVENT_KEY}`; + const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`; + const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`; + const CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure'; + const CLASS_NAME_BACKDROP = 'modal-backdrop'; + const CLASS_NAME_OPEN = 'modal-open'; + const CLASS_NAME_FADE = 'fade'; + const CLASS_NAME_SHOW = 'show'; + const CLASS_NAME_STATIC = 'modal-static'; + const SELECTOR_DIALOG = '.modal-dialog'; + const SELECTOR_MODAL_BODY = '.modal-body'; + const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]'; + const SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]'; + const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; + const SELECTOR_STICKY_CONTENT = '.sticky-top'; /** * ------------------------------------------------------------------------ * Class Definition * ------------------------------------------------------------------------ */ - var Modal = /*#__PURE__*/function (_BaseComponent) { - _inheritsLoose(Modal, _BaseComponent); - - function Modal(element, config) { - var _this; - - _this = _BaseComponent.call(this, element) || this; - _this._config = _this._getConfig(config); - _this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, element); - _this._backdrop = null; - _this._isShown = false; - _this._isBodyOverflowing = false; - _this._ignoreBackdropClick = false; - _this._isTransitioning = false; - _this._scrollbarWidth = 0; - return _this; + class Modal extends BaseComponent__default['default'] { + constructor(element, config) { + super(element); + this._config = this._getConfig(config); + this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, this._element); + this._backdrop = null; + this._isShown = false; + this._isBodyOverflowing = false; + this._ignoreBackdropClick = false; + this._isTransitioning = false; + this._scrollbarWidth = 0; } // Getters - var _proto = Modal.prototype; + static get Default() { + return Default; + } - // Public - _proto.toggle = function toggle(relatedTarget) { - return this._isShown ? this.hide() : this.show(relatedTarget); - }; + static get DATA_KEY() { + return DATA_KEY; + } // Public - _proto.show = function show(relatedTarget) { - var _this2 = this; + toggle(relatedTarget) { + return this._isShown ? this.hide() : this.show(relatedTarget); + } + + show(relatedTarget) { if (this._isShown || this._isTransitioning) { return; } - if (this._element.classList.contains(CLASS_NAME_FADE)) { + if (this._isAnimated()) { this._isTransitioning = true; } - var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, { - relatedTarget: relatedTarget + const showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, { + relatedTarget }); if (this._isShown || showEvent.defaultPrevented) { @@ -308,25 +291,19 @@ this._setResizeEvent(); - EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) { - return _this2.hide(event); - }); - EventHandler__default['default'].on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () { - EventHandler__default['default'].one(_this2._element, EVENT_MOUSEUP_DISMISS, function (event) { - if (event.target === _this2._element) { - _this2._ignoreBackdropClick = true; + EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, event => this.hide(event)); + EventHandler__default['default'].on(this._dialog, EVENT_MOUSEDOWN_DISMISS, () => { + EventHandler__default['default'].one(this._element, EVENT_MOUSEUP_DISMISS, event => { + if (event.target === this._element) { + this._ignoreBackdropClick = true; } }); }); - this._showBackdrop(function () { - return _this2._showElement(relatedTarget); - }); - }; - - _proto.hide = function hide(event) { - var _this3 = this; + this._showBackdrop(() => this._showElement(relatedTarget)); + } + hide(event) { if (event) { event.preventDefault(); } @@ -335,7 +312,7 @@ return; } - var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE); + const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE); if (hideEvent.defaultPrevented) { return; @@ -343,9 +320,9 @@ this._isShown = false; - var transition = this._element.classList.contains(CLASS_NAME_FADE); + const isAnimated = this._isAnimated(); - if (transition) { + if (isAnimated) { this._isTransitioning = true; } @@ -360,30 +337,24 @@ EventHandler__default['default'].off(this._element, EVENT_CLICK_DISMISS); EventHandler__default['default'].off(this._dialog, EVENT_MOUSEDOWN_DISMISS); - if (transition) { - var transitionDuration = getTransitionDurationFromElement(this._element); - EventHandler__default['default'].one(this._element, TRANSITION_END, function (event) { - return _this3._hideModal(event); - }); + if (isAnimated) { + const transitionDuration = getTransitionDurationFromElement(this._element); + EventHandler__default['default'].one(this._element, 'transitionend', event => this._hideModal(event)); emulateTransitionEnd(this._element, transitionDuration); } else { this._hideModal(); } - }; - - _proto.dispose = function dispose() { - [window, this._element, this._dialog].forEach(function (htmlElement) { - return EventHandler__default['default'].off(htmlElement, EVENT_KEY); - }); + } - _BaseComponent.prototype.dispose.call(this); + dispose() { + [window, this._element, this._dialog].forEach(htmlElement => EventHandler__default['default'].off(htmlElement, EVENT_KEY)); + super.dispose(); /** * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API` * Do not move `document` in `htmlElements` array * It will remove `EVENT_CLICK_DATA_API` event that should remain */ - EventHandler__default['default'].off(document, EVENT_FOCUSIN); this._config = null; this._dialog = null; @@ -393,25 +364,25 @@ this._ignoreBackdropClick = null; this._isTransitioning = null; this._scrollbarWidth = null; - }; + } - _proto.handleUpdate = function handleUpdate() { + handleUpdate() { this._adjustDialog(); } // Private - ; - _proto._getConfig = function _getConfig(config) { - config = _extends({}, Default, config); + + _getConfig(config) { + config = { ...Default, + ...config + }; typeCheckConfig(NAME, config, DefaultType); return config; - }; - - _proto._showElement = function _showElement(relatedTarget) { - var _this4 = this; + } - var transition = this._element.classList.contains(CLASS_NAME_FADE); + _showElement(relatedTarget) { + const isAnimated = this._isAnimated(); - var modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog); + const modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog); if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { // Don't move modal's DOM position @@ -432,7 +403,7 @@ modalBody.scrollTop = 0; } - if (transition) { + if (isAnimated) { reflow(this._element); } @@ -442,71 +413,60 @@ this._enforceFocus(); } - var transitionComplete = function transitionComplete() { - if (_this4._config.focus) { - _this4._element.focus(); + const transitionComplete = () => { + if (this._config.focus) { + this._element.focus(); } - _this4._isTransitioning = false; - EventHandler__default['default'].trigger(_this4._element, EVENT_SHOWN, { - relatedTarget: relatedTarget + this._isTransitioning = false; + EventHandler__default['default'].trigger(this._element, EVENT_SHOWN, { + relatedTarget }); }; - if (transition) { - var transitionDuration = getTransitionDurationFromElement(this._dialog); - EventHandler__default['default'].one(this._dialog, TRANSITION_END, transitionComplete); + if (isAnimated) { + const transitionDuration = getTransitionDurationFromElement(this._dialog); + EventHandler__default['default'].one(this._dialog, 'transitionend', transitionComplete); emulateTransitionEnd(this._dialog, transitionDuration); } else { transitionComplete(); } - }; - - _proto._enforceFocus = function _enforceFocus() { - var _this5 = this; + } + _enforceFocus() { EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop - EventHandler__default['default'].on(document, EVENT_FOCUSIN, function (event) { - if (document !== event.target && _this5._element !== event.target && !_this5._element.contains(event.target)) { - _this5._element.focus(); + EventHandler__default['default'].on(document, EVENT_FOCUSIN, event => { + if (document !== event.target && this._element !== event.target && !this._element.contains(event.target)) { + this._element.focus(); } }); - }; - - _proto._setEscapeEvent = function _setEscapeEvent() { - var _this6 = this; + } + _setEscapeEvent() { if (this._isShown) { - EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, function (event) { - if (_this6._config.keyboard && event.key === ESCAPE_KEY) { + EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, event => { + if (this._config.keyboard && event.key === ESCAPE_KEY) { event.preventDefault(); - - _this6.hide(); - } else if (!_this6._config.keyboard && event.key === ESCAPE_KEY) { - _this6._triggerBackdropTransition(); + this.hide(); + } else if (!this._config.keyboard && event.key === ESCAPE_KEY) { + this._triggerBackdropTransition(); } }); } else { EventHandler__default['default'].off(this._element, EVENT_KEYDOWN_DISMISS); } - }; - - _proto._setResizeEvent = function _setResizeEvent() { - var _this7 = this; + } + _setResizeEvent() { if (this._isShown) { - EventHandler__default['default'].on(window, EVENT_RESIZE, function () { - return _this7._adjustDialog(); - }); + EventHandler__default['default'].on(window, EVENT_RESIZE, () => this._adjustDialog()); } else { EventHandler__default['default'].off(window, EVENT_RESIZE); } - }; - - _proto._hideModal = function _hideModal() { - var _this8 = this; + } + _hideModal() { this._element.style.display = 'none'; this._element.setAttribute('aria-hidden', true); @@ -517,40 +477,38 @@ this._isTransitioning = false; - this._showBackdrop(function () { + this._showBackdrop(() => { document.body.classList.remove(CLASS_NAME_OPEN); - _this8._resetAdjustments(); + this._resetAdjustments(); - _this8._resetScrollbar(); + this._resetScrollbar(); - EventHandler__default['default'].trigger(_this8._element, EVENT_HIDDEN); + EventHandler__default['default'].trigger(this._element, EVENT_HIDDEN); }); - }; + } - _proto._removeBackdrop = function _removeBackdrop() { + _removeBackdrop() { this._backdrop.parentNode.removeChild(this._backdrop); this._backdrop = null; - }; - - _proto._showBackdrop = function _showBackdrop(callback) { - var _this9 = this; + } - var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : ''; + _showBackdrop(callback) { + const isAnimated = this._isAnimated(); if (this._isShown && this._config.backdrop) { this._backdrop = document.createElement('div'); this._backdrop.className = CLASS_NAME_BACKDROP; - if (animate) { - this._backdrop.classList.add(animate); + if (isAnimated) { + this._backdrop.classList.add(CLASS_NAME_FADE); } document.body.appendChild(this._backdrop); - EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, function (event) { - if (_this9._ignoreBackdropClick) { - _this9._ignoreBackdropClick = false; + EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, event => { + if (this._ignoreBackdropClick) { + this._ignoreBackdropClick = false; return; } @@ -558,59 +516,60 @@ return; } - if (_this9._config.backdrop === 'static') { - _this9._triggerBackdropTransition(); + if (this._config.backdrop === 'static') { + this._triggerBackdropTransition(); } else { - _this9.hide(); + this.hide(); } }); - if (animate) { + if (isAnimated) { reflow(this._backdrop); } this._backdrop.classList.add(CLASS_NAME_SHOW); - if (!animate) { + if (!isAnimated) { callback(); return; } - var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop); - EventHandler__default['default'].one(this._backdrop, TRANSITION_END, callback); + const backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop); + EventHandler__default['default'].one(this._backdrop, 'transitionend', callback); emulateTransitionEnd(this._backdrop, backdropTransitionDuration); } else if (!this._isShown && this._backdrop) { this._backdrop.classList.remove(CLASS_NAME_SHOW); - var callbackRemove = function callbackRemove() { - _this9._removeBackdrop(); + const callbackRemove = () => { + this._removeBackdrop(); callback(); }; - if (this._element.classList.contains(CLASS_NAME_FADE)) { - var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop); - - EventHandler__default['default'].one(this._backdrop, TRANSITION_END, callbackRemove); - emulateTransitionEnd(this._backdrop, _backdropTransitionDuration); + if (isAnimated) { + const backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop); + EventHandler__default['default'].one(this._backdrop, 'transitionend', callbackRemove); + emulateTransitionEnd(this._backdrop, backdropTransitionDuration); } else { callbackRemove(); } } else { callback(); } - }; + } - _proto._triggerBackdropTransition = function _triggerBackdropTransition() { - var _this10 = this; + _isAnimated() { + return this._element.classList.contains(CLASS_NAME_FADE); + } - var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED); + _triggerBackdropTransition() { + const hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED); if (hideEvent.defaultPrevented) { return; } - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; if (!isModalOverflowing) { this._element.style.overflowY = 'hidden'; @@ -618,16 +577,16 @@ this._element.classList.add(CLASS_NAME_STATIC); - var modalTransitionDuration = getTransitionDurationFromElement(this._dialog); - EventHandler__default['default'].off(this._element, TRANSITION_END); - EventHandler__default['default'].one(this._element, TRANSITION_END, function () { - _this10._element.classList.remove(CLASS_NAME_STATIC); + const modalTransitionDuration = getTransitionDurationFromElement(this._dialog); + EventHandler__default['default'].off(this._element, 'transitionend'); + EventHandler__default['default'].one(this._element, 'transitionend', () => { + this._element.classList.remove(CLASS_NAME_STATIC); if (!isModalOverflowing) { - EventHandler__default['default'].one(_this10._element, TRANSITION_END, function () { - _this10._element.style.overflowY = ''; + EventHandler__default['default'].one(this._element, 'transitionend', () => { + this._element.style.overflowY = ''; }); - emulateTransitionEnd(_this10._element, modalTransitionDuration); + emulateTransitionEnd(this._element, modalTransitionDuration); } }); emulateTransitionEnd(this._element, modalTransitionDuration); @@ -636,107 +595,95 @@ } // ---------------------------------------------------------------------- // the following methods are used to handle overflowing modals // ---------------------------------------------------------------------- - ; - _proto._adjustDialog = function _adjustDialog() { - var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; - if (!this._isBodyOverflowing && isModalOverflowing && !isRTL || this._isBodyOverflowing && !isModalOverflowing && isRTL) { - this._element.style.paddingLeft = this._scrollbarWidth + "px"; + _adjustDialog() { + const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; + + if (!this._isBodyOverflowing && isModalOverflowing && !isRTL() || this._isBodyOverflowing && !isModalOverflowing && isRTL()) { + this._element.style.paddingLeft = `${this._scrollbarWidth}px`; } - if (this._isBodyOverflowing && !isModalOverflowing && !isRTL || !this._isBodyOverflowing && isModalOverflowing && isRTL) { - this._element.style.paddingRight = this._scrollbarWidth + "px"; + if (this._isBodyOverflowing && !isModalOverflowing && !isRTL() || !this._isBodyOverflowing && isModalOverflowing && isRTL()) { + this._element.style.paddingRight = `${this._scrollbarWidth}px`; } - }; + } - _proto._resetAdjustments = function _resetAdjustments() { + _resetAdjustments() { this._element.style.paddingLeft = ''; this._element.style.paddingRight = ''; - }; + } - _proto._checkScrollbar = function _checkScrollbar() { - var rect = document.body.getBoundingClientRect(); + _checkScrollbar() { + const rect = document.body.getBoundingClientRect(); this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth; this._scrollbarWidth = this._getScrollbarWidth(); - }; - - _proto._setScrollbar = function _setScrollbar() { - var _this11 = this; + } + _setScrollbar() { if (this._isBodyOverflowing) { - // Note: DOMNode.style.paddingRight returns the actual value or '' if not set - // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set - // Adjust fixed content padding - SelectorEngine__default['default'].find(SELECTOR_FIXED_CONTENT).forEach(function (element) { - var actualPadding = element.style.paddingRight; - var calculatedPadding = window.getComputedStyle(element)['padding-right']; - Manipulator__default['default'].setDataAttribute(element, 'padding-right', actualPadding); - element.style.paddingRight = Number.parseFloat(calculatedPadding) + _this11._scrollbarWidth + "px"; - }); // Adjust sticky content margin - - SelectorEngine__default['default'].find(SELECTOR_STICKY_CONTENT).forEach(function (element) { - var actualMargin = element.style.marginRight; - var calculatedMargin = window.getComputedStyle(element)['margin-right']; - Manipulator__default['default'].setDataAttribute(element, 'margin-right', actualMargin); - element.style.marginRight = Number.parseFloat(calculatedMargin) - _this11._scrollbarWidth + "px"; - }); // Adjust body padding - - var actualPadding = document.body.style.paddingRight; - var calculatedPadding = window.getComputedStyle(document.body)['padding-right']; - Manipulator__default['default'].setDataAttribute(document.body, 'padding-right', actualPadding); - document.body.style.paddingRight = Number.parseFloat(calculatedPadding) + this._scrollbarWidth + "px"; + this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', calculatedValue => calculatedValue + this._scrollbarWidth); + + this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', calculatedValue => calculatedValue - this._scrollbarWidth); + + this._setElementAttributes('body', 'paddingRight', calculatedValue => calculatedValue + this._scrollbarWidth); } document.body.classList.add(CLASS_NAME_OPEN); - }; - - _proto._resetScrollbar = function _resetScrollbar() { - // Restore fixed content padding - SelectorEngine__default['default'].find(SELECTOR_FIXED_CONTENT).forEach(function (element) { - var padding = Manipulator__default['default'].getDataAttribute(element, 'padding-right'); + } - if (typeof padding !== 'undefined') { - Manipulator__default['default'].removeDataAttribute(element, 'padding-right'); - element.style.paddingRight = padding; + _setElementAttributes(selector, styleProp, callback) { + SelectorEngine__default['default'].find(selector).forEach(element => { + if (element !== document.body && window.innerWidth > element.clientWidth + this._scrollbarWidth) { + return; } - }); // Restore sticky content and navbar-toggler margin - SelectorEngine__default['default'].find("" + SELECTOR_STICKY_CONTENT).forEach(function (element) { - var margin = Manipulator__default['default'].getDataAttribute(element, 'margin-right'); + const actualValue = element.style[styleProp]; + const calculatedValue = window.getComputedStyle(element)[styleProp]; + Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue); + element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px'; + }); + } - if (typeof margin !== 'undefined') { - Manipulator__default['default'].removeDataAttribute(element, 'margin-right'); - element.style.marginRight = margin; - } - }); // Restore body padding + _resetScrollbar() { + this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight'); - var padding = Manipulator__default['default'].getDataAttribute(document.body, 'padding-right'); + this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight'); - if (typeof padding === 'undefined') { - document.body.style.paddingRight = ''; - } else { - Manipulator__default['default'].removeDataAttribute(document.body, 'padding-right'); - document.body.style.paddingRight = padding; - } - }; + this._resetElementAttributes('body', 'paddingRight'); + } + + _resetElementAttributes(selector, styleProp) { + SelectorEngine__default['default'].find(selector).forEach(element => { + const value = Manipulator__default['default'].getDataAttribute(element, styleProp); - _proto._getScrollbarWidth = function _getScrollbarWidth() { + if (typeof value === 'undefined' && element === document.body) { + element.style[styleProp] = ''; + } else { + Manipulator__default['default'].removeDataAttribute(element, styleProp); + element.style[styleProp] = value; + } + }); + } + + _getScrollbarWidth() { // thx d.walsh - var scrollDiv = document.createElement('div'); + const scrollDiv = document.createElement('div'); scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER; document.body.appendChild(scrollDiv); - var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; + const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; document.body.removeChild(scrollDiv); return scrollbarWidth; } // Static - ; - Modal.jQueryInterface = function jQueryInterface(config, relatedTarget) { - return this.each(function () { - var data = Data__default['default'].getData(this, DATA_KEY); - var _config = _extends({}, Default, Manipulator__default['default'].getDataAttributes(this), typeof config === 'object' && config ? config : {}); + static jQueryInterface(config, relatedTarget) { + return this.each(function () { + let data = Data__default['default'].get(this, DATA_KEY); + const _config = { ...Default, + ...Manipulator__default['default'].getDataAttributes(this), + ...(typeof config === 'object' && config ? config : {}) + }; if (!data) { data = new Modal(this, _config); @@ -744,28 +691,15 @@ if (typeof config === 'string') { if (typeof data[config] === 'undefined') { - throw new TypeError("No method named \"" + config + "\""); + throw new TypeError(`No method named "${config}"`); } data[config](relatedTarget); } }); - }; - - _createClass$1(Modal, null, [{ - key: "Default", - get: function get() { - return Default; - } - }, { - key: "DATA_KEY", - get: function get() { - return DATA_KEY; - } - }]); + } - return Modal; - }(BaseComponent); + } /** * ------------------------------------------------------------------------ * Data Api implementation @@ -774,35 +708,34 @@ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { - var _this12 = this; - - var target = getElementFromSelector(this); + const target = getElementFromSelector(this); if (this.tagName === 'A' || this.tagName === 'AREA') { event.preventDefault(); } - EventHandler__default['default'].one(target, EVENT_SHOW, function (showEvent) { + EventHandler__default['default'].one(target, EVENT_SHOW, showEvent => { if (showEvent.defaultPrevented) { // only register focus restorer if modal will actually get shown return; } - EventHandler__default['default'].one(target, EVENT_HIDDEN, function () { - if (isVisible(_this12)) { - _this12.focus(); + EventHandler__default['default'].one(target, EVENT_HIDDEN, () => { + if (isVisible(this)) { + this.focus(); } }); }); - var data = Data__default['default'].getData(target, DATA_KEY); + let data = Data__default['default'].get(target, DATA_KEY); if (!data) { - var config = _extends({}, Manipulator__default['default'].getDataAttributes(target), Manipulator__default['default'].getDataAttributes(this)); - + const config = { ...Manipulator__default['default'].getDataAttributes(target), + ...Manipulator__default['default'].getDataAttributes(this) + }; data = new Modal(target, config); } - data.show(this); + data.toggle(this); }); /** * ------------------------------------------------------------------------ @@ -811,21 +744,7 @@ * add .Modal to jQuery only if jQuery is present */ - onDOMContentLoaded(function () { - var $ = getjQuery(); - /* istanbul ignore if */ - - if ($) { - var JQUERY_NO_CONFLICT = $.fn[NAME]; - $.fn[NAME] = Modal.jQueryInterface; - $.fn[NAME].Constructor = Modal; - - $.fn[NAME].noConflict = function () { - $.fn[NAME] = JQUERY_NO_CONFLICT; - return Modal.jQueryInterface; - }; - } - }); + defineJQueryPlugin(NAME, Modal); return Modal; |
