bootstrap 4.5.3 → 5.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (171) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +55 -0
  3. data/README.md +28 -5
  4. data/assets/javascripts/bootstrap/alert.js +54 -133
  5. data/assets/javascripts/bootstrap/base-component.js +99 -0
  6. data/assets/javascripts/bootstrap/button.js +44 -183
  7. data/assets/javascripts/bootstrap/carousel.js +308 -450
  8. data/assets/javascripts/bootstrap/collapse.js +180 -243
  9. data/assets/javascripts/bootstrap/dom/data.js +66 -0
  10. data/assets/javascripts/bootstrap/dom/event-handler.js +283 -0
  11. data/assets/javascripts/bootstrap/dom/manipulator.js +84 -0
  12. data/assets/javascripts/bootstrap/dom/selector-engine.js +85 -0
  13. data/assets/javascripts/bootstrap/dropdown.js +320 -387
  14. data/assets/javascripts/bootstrap/modal.js +238 -478
  15. data/assets/javascripts/bootstrap/offcanvas.js +297 -0
  16. data/assets/javascripts/bootstrap/popover.js +58 -163
  17. data/assets/javascripts/bootstrap/scrollspy.js +223 -228
  18. data/assets/javascripts/bootstrap/tab.js +251 -166
  19. data/assets/javascripts/bootstrap/toast.js +147 -149
  20. data/assets/javascripts/bootstrap/tooltip.js +434 -646
  21. data/assets/javascripts/bootstrap/util/backdrop.js +165 -0
  22. data/assets/javascripts/bootstrap/util/component-functions.js +46 -0
  23. data/assets/javascripts/bootstrap/util/config.js +79 -0
  24. data/assets/javascripts/bootstrap/util/focustrap.js +129 -0
  25. data/assets/javascripts/bootstrap/util/index.js +350 -0
  26. data/assets/javascripts/bootstrap/util/sanitizer.js +122 -0
  27. data/assets/javascripts/bootstrap/util/scrollbar.js +138 -0
  28. data/assets/javascripts/bootstrap/util/swipe.js +155 -0
  29. data/assets/javascripts/bootstrap/util/template-factory.js +177 -0
  30. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  31. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  32. data/assets/javascripts/bootstrap-sprockets.js +24 -8
  33. data/assets/javascripts/bootstrap.js +4037 -3206
  34. data/assets/javascripts/bootstrap.min.js +3 -3
  35. data/assets/stylesheets/_bootstrap-grid.scss +56 -21
  36. data/assets/stylesheets/_bootstrap-reboot.scss +4 -7
  37. data/assets/stylesheets/_bootstrap.scss +20 -13
  38. data/assets/stylesheets/bootstrap/_accordion.scss +149 -0
  39. data/assets/stylesheets/bootstrap/_alert.scss +33 -14
  40. data/assets/stylesheets/bootstrap/_badge.scss +15 -31
  41. data/assets/stylesheets/bootstrap/_breadcrumb.scss +23 -27
  42. data/assets/stylesheets/bootstrap/_button-group.scss +25 -46
  43. data/assets/stylesheets/bootstrap/_buttons.scss +136 -71
  44. data/assets/stylesheets/bootstrap/_card.scss +61 -113
  45. data/assets/stylesheets/bootstrap/_carousel.scss +64 -35
  46. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  47. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  48. data/assets/stylesheets/bootstrap/_dropdown.scss +128 -71
  49. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  50. data/assets/stylesheets/bootstrap/_functions.scss +181 -23
  51. data/assets/stylesheets/bootstrap/_grid.scss +13 -53
  52. data/assets/stylesheets/bootstrap/_helpers.scss +10 -0
  53. data/assets/stylesheets/bootstrap/_images.scss +1 -1
  54. data/assets/stylesheets/bootstrap/_list-group.scss +72 -34
  55. data/assets/stylesheets/bootstrap/_maps.scss +54 -0
  56. data/assets/stylesheets/bootstrap/_mixins.scss +9 -13
  57. data/assets/stylesheets/bootstrap/_modal.scss +107 -110
  58. data/assets/stylesheets/bootstrap/_nav.scss +72 -23
  59. data/assets/stylesheets/bootstrap/_navbar.scss +127 -173
  60. data/assets/stylesheets/bootstrap/_offcanvas.scss +144 -0
  61. data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
  62. data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
  63. data/assets/stylesheets/bootstrap/_popover.scss +99 -73
  64. data/assets/stylesheets/bootstrap/_progress.scss +26 -14
  65. data/assets/stylesheets/bootstrap/_reboot.scss +326 -200
  66. data/assets/stylesheets/bootstrap/_root.scss +62 -9
  67. data/assets/stylesheets/bootstrap/_spinners.scss +51 -22
  68. data/assets/stylesheets/bootstrap/_tables.scss +94 -115
  69. data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
  70. data/assets/stylesheets/bootstrap/_tooltip.scss +68 -63
  71. data/assets/stylesheets/bootstrap/_transitions.scss +8 -1
  72. data/assets/stylesheets/bootstrap/_type.scss +40 -59
  73. data/assets/stylesheets/bootstrap/_utilities.scss +647 -18
  74. data/assets/stylesheets/bootstrap/_variables.scss +1018 -526
  75. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  76. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +75 -0
  77. data/assets/stylesheets/bootstrap/forms/_form-check.scss +175 -0
  78. data/assets/stylesheets/bootstrap/forms/_form-control.scss +194 -0
  79. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  80. data/assets/stylesheets/bootstrap/forms/_form-select.scss +71 -0
  81. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  82. data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
  83. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  84. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  85. data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +10 -0
  86. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  87. data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
  88. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  89. data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
  90. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  91. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  92. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  93. data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
  94. data/assets/stylesheets/bootstrap/mixins/_alert.scss +8 -6
  95. data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
  96. data/assets/stylesheets/bootstrap/mixins/_banner.scss +9 -0
  97. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
  98. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  99. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
  100. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
  101. data/assets/stylesheets/bootstrap/mixins/_caret.scss +10 -8
  102. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  103. data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
  104. data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
  105. data/assets/stylesheets/bootstrap/mixins/_forms.scss +48 -74
  106. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  107. data/assets/stylesheets/bootstrap/mixins/_grid.scss +119 -37
  108. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  109. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +5 -2
  110. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  111. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
  112. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +3 -3
  113. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
  114. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  115. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
  116. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  117. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  118. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +278 -128
  119. data/bootstrap.gemspec +3 -5
  120. data/lib/bootstrap/version.rb +2 -2
  121. data/tasks/updater/js.rb +31 -7
  122. data/tasks/updater/network.rb +9 -3
  123. data/tasks/updater.rb +2 -2
  124. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  125. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  126. data/test/dummy_rails/app/views/pages/root.html +89 -0
  127. data/test/dummy_rails/config/application.rb +0 -3
  128. data/test/gemfiles/rails_5_2.gemfile +8 -0
  129. data/test/gemfiles/rails_6_1.gemfile +7 -0
  130. data/test/gemfiles/rails_7_0.gemfile +7 -0
  131. data/test/test_helper.rb +3 -2
  132. metadata +70 -78
  133. data/.travis.yml +0 -31
  134. data/assets/javascripts/bootstrap/util.js +0 -192
  135. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  136. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -524
  137. data/assets/stylesheets/bootstrap/_input-group.scss +0 -192
  138. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  139. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  140. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  141. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  142. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  143. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  144. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  145. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  146. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  147. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  148. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  149. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  150. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  151. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  152. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  153. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  154. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  155. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  156. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  157. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  158. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  159. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  160. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  161. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  162. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  163. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  164. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  165. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  166. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  167. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  168. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  169. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  170. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
  171. /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,274 +1,182 @@
1
1
  /*!
2
- * Bootstrap modal.js v4.5.3 (https://getbootstrap.com/)
3
- * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
2
+ * Bootstrap modal.js v5.2.3 (https://getbootstrap.com/)
3
+ * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
4
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
5
5
  */
6
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.js'], factory) :
9
- (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.jQuery, global.Util));
10
- }(this, (function ($, Util) { 'use strict';
7
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('./util/index'), require('./dom/event-handler'), require('./dom/selector-engine'), require('./util/scrollbar'), require('./base-component'), require('./util/backdrop'), require('./util/focustrap'), require('./util/component-functions')) :
8
+ typeof define === 'function' && define.amd ? define(['./util/index', './dom/event-handler', './dom/selector-engine', './util/scrollbar', './base-component', './util/backdrop', './util/focustrap', './util/component-functions'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Index, global.EventHandler, global.SelectorEngine, global.Scrollbar, global.BaseComponent, global.Backdrop, global.Focustrap, global.ComponentFunctions));
10
+ })(this, (function (index, EventHandler, SelectorEngine, ScrollBarHelper, BaseComponent, Backdrop, FocusTrap, componentFunctions) { 'use strict';
11
11
 
12
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
12
+ const _interopDefaultLegacy = e => e && typeof e === 'object' && 'default' in e ? e : { default: e };
13
13
 
14
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
15
- var Util__default = /*#__PURE__*/_interopDefaultLegacy(Util);
14
+ const EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
15
+ const SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
16
+ const ScrollBarHelper__default = /*#__PURE__*/_interopDefaultLegacy(ScrollBarHelper);
17
+ const BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
18
+ const Backdrop__default = /*#__PURE__*/_interopDefaultLegacy(Backdrop);
19
+ const FocusTrap__default = /*#__PURE__*/_interopDefaultLegacy(FocusTrap);
16
20
 
17
- 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); }
18
-
19
- 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); } }
20
-
21
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
22
21
  /**
23
- * ------------------------------------------------------------------------
22
+ * --------------------------------------------------------------------------
23
+ * Bootstrap (v5.2.3): modal.js
24
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
25
+ * --------------------------------------------------------------------------
26
+ */
27
+ /**
24
28
  * Constants
25
- * ------------------------------------------------------------------------
26
29
  */
27
30
 
28
- var NAME = 'modal';
29
- var VERSION = '4.5.3';
30
- var DATA_KEY = 'bs.modal';
31
- var EVENT_KEY = "." + DATA_KEY;
32
- var DATA_API_KEY = '.data-api';
33
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
34
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
35
-
36
- var Default = {
31
+ const NAME = 'modal';
32
+ const DATA_KEY = 'bs.modal';
33
+ const EVENT_KEY = `.${DATA_KEY}`;
34
+ const DATA_API_KEY = '.data-api';
35
+ const ESCAPE_KEY = 'Escape';
36
+ const EVENT_HIDE = `hide${EVENT_KEY}`;
37
+ const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY}`;
38
+ const EVENT_HIDDEN = `hidden${EVENT_KEY}`;
39
+ const EVENT_SHOW = `show${EVENT_KEY}`;
40
+ const EVENT_SHOWN = `shown${EVENT_KEY}`;
41
+ const EVENT_RESIZE = `resize${EVENT_KEY}`;
42
+ const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY}`;
43
+ const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY}`;
44
+ const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY}`;
45
+ const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}`;
46
+ const CLASS_NAME_OPEN = 'modal-open';
47
+ const CLASS_NAME_FADE = 'fade';
48
+ const CLASS_NAME_SHOW = 'show';
49
+ const CLASS_NAME_STATIC = 'modal-static';
50
+ const OPEN_SELECTOR = '.modal.show';
51
+ const SELECTOR_DIALOG = '.modal-dialog';
52
+ const SELECTOR_MODAL_BODY = '.modal-body';
53
+ const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
54
+ const Default = {
37
55
  backdrop: true,
38
- keyboard: true,
39
56
  focus: true,
40
- show: true
57
+ keyboard: true
41
58
  };
42
- var DefaultType = {
59
+ const DefaultType = {
43
60
  backdrop: '(boolean|string)',
44
- keyboard: 'boolean',
45
61
  focus: 'boolean',
46
- show: 'boolean'
62
+ keyboard: 'boolean'
47
63
  };
48
- var EVENT_HIDE = "hide" + EVENT_KEY;
49
- var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
50
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
51
- var EVENT_SHOW = "show" + EVENT_KEY;
52
- var EVENT_SHOWN = "shown" + EVENT_KEY;
53
- var EVENT_FOCUSIN = "focusin" + EVENT_KEY;
54
- var EVENT_RESIZE = "resize" + EVENT_KEY;
55
- var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
56
- var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY;
57
- var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
58
- var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
59
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
60
- var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
61
- var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
62
- var CLASS_NAME_BACKDROP = 'modal-backdrop';
63
- var CLASS_NAME_OPEN = 'modal-open';
64
- var CLASS_NAME_FADE = 'fade';
65
- var CLASS_NAME_SHOW = 'show';
66
- var CLASS_NAME_STATIC = 'modal-static';
67
- var SELECTOR_DIALOG = '.modal-dialog';
68
- var SELECTOR_MODAL_BODY = '.modal-body';
69
- var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
70
- var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
71
- var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
72
- var SELECTOR_STICKY_CONTENT = '.sticky-top';
73
64
  /**
74
- * ------------------------------------------------------------------------
75
- * Class Definition
76
- * ------------------------------------------------------------------------
65
+ * Class definition
77
66
  */
78
67
 
79
- var Modal = /*#__PURE__*/function () {
80
- function Modal(element, config) {
81
- this._config = this._getConfig(config);
82
- this._element = element;
83
- this._dialog = element.querySelector(SELECTOR_DIALOG);
84
- this._backdrop = null;
68
+ class Modal extends BaseComponent__default.default {
69
+ constructor(element, config) {
70
+ super(element, config);
71
+ this._dialog = SelectorEngine__default.default.findOne(SELECTOR_DIALOG, this._element);
72
+ this._backdrop = this._initializeBackDrop();
73
+ this._focustrap = this._initializeFocusTrap();
85
74
  this._isShown = false;
86
- this._isBodyOverflowing = false;
87
- this._ignoreBackdropClick = false;
88
75
  this._isTransitioning = false;
89
- this._scrollbarWidth = 0;
76
+ this._scrollBar = new ScrollBarHelper__default.default();
77
+
78
+ this._addEventListeners();
90
79
  } // Getters
91
80
 
92
81
 
93
- var _proto = Modal.prototype;
82
+ static get Default() {
83
+ return Default;
84
+ }
94
85
 
95
- // Public
96
- _proto.toggle = function toggle(relatedTarget) {
97
- return this._isShown ? this.hide() : this.show(relatedTarget);
98
- };
86
+ static get DefaultType() {
87
+ return DefaultType;
88
+ }
99
89
 
100
- _proto.show = function show(relatedTarget) {
101
- var _this = this;
90
+ static get NAME() {
91
+ return NAME;
92
+ } // Public
102
93
 
94
+
95
+ toggle(relatedTarget) {
96
+ return this._isShown ? this.hide() : this.show(relatedTarget);
97
+ }
98
+
99
+ show(relatedTarget) {
103
100
  if (this._isShown || this._isTransitioning) {
104
101
  return;
105
102
  }
106
103
 
107
- if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
108
- this._isTransitioning = true;
109
- }
110
-
111
- var showEvent = $__default['default'].Event(EVENT_SHOW, {
112
- relatedTarget: relatedTarget
104
+ const showEvent = EventHandler__default.default.trigger(this._element, EVENT_SHOW, {
105
+ relatedTarget
113
106
  });
114
- $__default['default'](this._element).trigger(showEvent);
115
107
 
116
- if (this._isShown || showEvent.isDefaultPrevented()) {
108
+ if (showEvent.defaultPrevented) {
117
109
  return;
118
110
  }
119
111
 
120
112
  this._isShown = true;
113
+ this._isTransitioning = true;
121
114
 
122
- this._checkScrollbar();
115
+ this._scrollBar.hide();
123
116
 
124
- this._setScrollbar();
117
+ document.body.classList.add(CLASS_NAME_OPEN);
125
118
 
126
119
  this._adjustDialog();
127
120
 
128
- this._setEscapeEvent();
129
-
130
- this._setResizeEvent();
131
-
132
- $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
133
- return _this.hide(event);
134
- });
135
- $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
136
- $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
137
- if ($__default['default'](event.target).is(_this._element)) {
138
- _this._ignoreBackdropClick = true;
139
- }
140
- });
141
- });
142
-
143
- this._showBackdrop(function () {
144
- return _this._showElement(relatedTarget);
145
- });
146
- };
147
-
148
- _proto.hide = function hide(event) {
149
- var _this2 = this;
150
-
151
- if (event) {
152
- event.preventDefault();
153
- }
121
+ this._backdrop.show(() => this._showElement(relatedTarget));
122
+ }
154
123
 
124
+ hide() {
155
125
  if (!this._isShown || this._isTransitioning) {
156
126
  return;
157
127
  }
158
128
 
159
- var hideEvent = $__default['default'].Event(EVENT_HIDE);
160
- $__default['default'](this._element).trigger(hideEvent);
129
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE);
161
130
 
162
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
131
+ if (hideEvent.defaultPrevented) {
163
132
  return;
164
133
  }
165
134
 
166
135
  this._isShown = false;
167
- var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
168
-
169
- if (transition) {
170
- this._isTransitioning = true;
171
- }
136
+ this._isTransitioning = true;
172
137
 
173
- this._setEscapeEvent();
138
+ this._focustrap.deactivate();
174
139
 
175
- this._setResizeEvent();
140
+ this._element.classList.remove(CLASS_NAME_SHOW);
176
141
 
177
- $__default['default'](document).off(EVENT_FOCUSIN);
178
- $__default['default'](this._element).removeClass(CLASS_NAME_SHOW);
179
- $__default['default'](this._element).off(EVENT_CLICK_DISMISS);
180
- $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
142
+ this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
143
+ }
181
144
 
182
- if (transition) {
183
- var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
184
- $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function (event) {
185
- return _this2._hideModal(event);
186
- }).emulateTransitionEnd(transitionDuration);
187
- } else {
188
- this._hideModal();
145
+ dispose() {
146
+ for (const htmlElement of [window, this._dialog]) {
147
+ EventHandler__default.default.off(htmlElement, EVENT_KEY);
189
148
  }
190
- };
191
-
192
- _proto.dispose = function dispose() {
193
- [window, this._element, this._dialog].forEach(function (htmlElement) {
194
- return $__default['default'](htmlElement).off(EVENT_KEY);
195
- });
196
- /**
197
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
198
- * Do not move `document` in `htmlElements` array
199
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
200
- */
201
-
202
- $__default['default'](document).off(EVENT_FOCUSIN);
203
- $__default['default'].removeData(this._element, DATA_KEY);
204
- this._config = null;
205
- this._element = null;
206
- this._dialog = null;
207
- this._backdrop = null;
208
- this._isShown = null;
209
- this._isBodyOverflowing = null;
210
- this._ignoreBackdropClick = null;
211
- this._isTransitioning = null;
212
- this._scrollbarWidth = null;
213
- };
214
-
215
- _proto.handleUpdate = function handleUpdate() {
216
- this._adjustDialog();
217
- } // Private
218
- ;
219
-
220
- _proto._getConfig = function _getConfig(config) {
221
- config = _extends({}, Default, config);
222
- Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
223
- return config;
224
- };
225
-
226
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
227
- var _this3 = this;
228
149
 
229
- if (this._config.backdrop === 'static') {
230
- var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);
231
- $__default['default'](this._element).trigger(hideEventPrevented);
232
-
233
- if (hideEventPrevented.isDefaultPrevented()) {
234
- return;
235
- }
236
-
237
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
238
-
239
- if (!isModalOverflowing) {
240
- this._element.style.overflowY = 'hidden';
241
- }
150
+ this._backdrop.dispose();
242
151
 
243
- this._element.classList.add(CLASS_NAME_STATIC);
152
+ this._focustrap.deactivate();
244
153
 
245
- var modalTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
246
- $__default['default'](this._element).off(Util__default['default'].TRANSITION_END);
247
- $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function () {
248
- _this3._element.classList.remove(CLASS_NAME_STATIC);
154
+ super.dispose();
155
+ }
249
156
 
250
- if (!isModalOverflowing) {
251
- $__default['default'](_this3._element).one(Util__default['default'].TRANSITION_END, function () {
252
- _this3._element.style.overflowY = '';
253
- }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
254
- }
255
- }).emulateTransitionEnd(modalTransitionDuration);
157
+ handleUpdate() {
158
+ this._adjustDialog();
159
+ } // Private
256
160
 
257
- this._element.focus();
258
- } else {
259
- this.hide();
260
- }
261
- };
262
161
 
263
- _proto._showElement = function _showElement(relatedTarget) {
264
- var _this4 = this;
162
+ _initializeBackDrop() {
163
+ return new Backdrop__default.default({
164
+ isVisible: Boolean(this._config.backdrop),
165
+ // 'static' option will be translated to true, and booleans will keep their value,
166
+ isAnimated: this._isAnimated()
167
+ });
168
+ }
265
169
 
266
- var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
267
- var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
170
+ _initializeFocusTrap() {
171
+ return new FocusTrap__default.default({
172
+ trapElement: this._element
173
+ });
174
+ }
268
175
 
269
- if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
270
- // Don't move modal's DOM position
271
- document.body.appendChild(this._element);
176
+ _showElement(relatedTarget) {
177
+ // try to append dynamic modal
178
+ if (!document.body.contains(this._element)) {
179
+ document.body.append(this._element);
272
180
  }
273
181
 
274
182
  this._element.style.display = 'block';
@@ -279,87 +187,71 @@
279
187
 
280
188
  this._element.setAttribute('role', 'dialog');
281
189
 
282
- if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
283
- modalBody.scrollTop = 0;
284
- } else {
285
- this._element.scrollTop = 0;
286
- }
190
+ this._element.scrollTop = 0;
191
+ const modalBody = SelectorEngine__default.default.findOne(SELECTOR_MODAL_BODY, this._dialog);
287
192
 
288
- if (transition) {
289
- Util__default['default'].reflow(this._element);
193
+ if (modalBody) {
194
+ modalBody.scrollTop = 0;
290
195
  }
291
196
 
292
- $__default['default'](this._element).addClass(CLASS_NAME_SHOW);
197
+ index.reflow(this._element);
293
198
 
294
- if (this._config.focus) {
295
- this._enforceFocus();
296
- }
297
-
298
- var shownEvent = $__default['default'].Event(EVENT_SHOWN, {
299
- relatedTarget: relatedTarget
300
- });
199
+ this._element.classList.add(CLASS_NAME_SHOW);
301
200
 
302
- var transitionComplete = function transitionComplete() {
303
- if (_this4._config.focus) {
304
- _this4._element.focus();
201
+ const transitionComplete = () => {
202
+ if (this._config.focus) {
203
+ this._focustrap.activate();
305
204
  }
306
205
 
307
- _this4._isTransitioning = false;
308
- $__default['default'](_this4._element).trigger(shownEvent);
206
+ this._isTransitioning = false;
207
+ EventHandler__default.default.trigger(this._element, EVENT_SHOWN, {
208
+ relatedTarget
209
+ });
309
210
  };
310
211
 
311
- if (transition) {
312
- var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
313
- $__default['default'](this._dialog).one(Util__default['default'].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
314
- } else {
315
- transitionComplete();
316
- }
317
- };
212
+ this._queueCallback(transitionComplete, this._dialog, this._isAnimated());
213
+ }
318
214
 
319
- _proto._enforceFocus = function _enforceFocus() {
320
- var _this5 = this;
215
+ _addEventListeners() {
216
+ EventHandler__default.default.on(this._element, EVENT_KEYDOWN_DISMISS, event => {
217
+ if (event.key !== ESCAPE_KEY) {
218
+ return;
219
+ }
321
220
 
322
- $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
323
- .on(EVENT_FOCUSIN, function (event) {
324
- if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {
325
- _this5._element.focus();
221
+ if (this._config.keyboard) {
222
+ event.preventDefault();
223
+ this.hide();
224
+ return;
326
225
  }
327
- });
328
- };
329
226
 
330
- _proto._setEscapeEvent = function _setEscapeEvent() {
331
- var _this6 = this;
227
+ this._triggerBackdropTransition();
228
+ });
229
+ EventHandler__default.default.on(window, EVENT_RESIZE, () => {
230
+ if (this._isShown && !this._isTransitioning) {
231
+ this._adjustDialog();
232
+ }
233
+ });
234
+ EventHandler__default.default.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => {
235
+ // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks
236
+ EventHandler__default.default.one(this._element, EVENT_CLICK_DISMISS, event2 => {
237
+ if (this._element !== event.target || this._element !== event2.target) {
238
+ return;
239
+ }
332
240
 
333
- if (this._isShown) {
334
- $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
335
- if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
336
- event.preventDefault();
241
+ if (this._config.backdrop === 'static') {
242
+ this._triggerBackdropTransition();
337
243
 
338
- _this6.hide();
339
- } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
340
- _this6._triggerBackdropTransition();
244
+ return;
341
245
  }
342
- });
343
- } else if (!this._isShown) {
344
- $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);
345
- }
346
- };
347
-
348
- _proto._setResizeEvent = function _setResizeEvent() {
349
- var _this7 = this;
350
246
 
351
- if (this._isShown) {
352
- $__default['default'](window).on(EVENT_RESIZE, function (event) {
353
- return _this7.handleUpdate(event);
247
+ if (this._config.backdrop) {
248
+ this.hide();
249
+ }
354
250
  });
355
- } else {
356
- $__default['default'](window).off(EVENT_RESIZE);
357
- }
358
- };
359
-
360
- _proto._hideModal = function _hideModal() {
361
- var _this8 = this;
251
+ });
252
+ }
362
253
 
254
+ _hideModal() {
363
255
  this._element.style.display = 'none';
364
256
 
365
257
  this._element.setAttribute('aria-hidden', true);
@@ -370,270 +262,138 @@
370
262
 
371
263
  this._isTransitioning = false;
372
264
 
373
- this._showBackdrop(function () {
374
- $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);
265
+ this._backdrop.hide(() => {
266
+ document.body.classList.remove(CLASS_NAME_OPEN);
375
267
 
376
- _this8._resetAdjustments();
268
+ this._resetAdjustments();
377
269
 
378
- _this8._resetScrollbar();
270
+ this._scrollBar.reset();
379
271
 
380
- $__default['default'](_this8._element).trigger(EVENT_HIDDEN);
272
+ EventHandler__default.default.trigger(this._element, EVENT_HIDDEN);
381
273
  });
382
- };
383
-
384
- _proto._removeBackdrop = function _removeBackdrop() {
385
- if (this._backdrop) {
386
- $__default['default'](this._backdrop).remove();
387
- this._backdrop = null;
388
- }
389
- };
390
-
391
- _proto._showBackdrop = function _showBackdrop(callback) {
392
- var _this9 = this;
274
+ }
393
275
 
394
- var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
276
+ _isAnimated() {
277
+ return this._element.classList.contains(CLASS_NAME_FADE);
278
+ }
395
279
 
396
- if (this._isShown && this._config.backdrop) {
397
- this._backdrop = document.createElement('div');
398
- this._backdrop.className = CLASS_NAME_BACKDROP;
280
+ _triggerBackdropTransition() {
281
+ const hideEvent = EventHandler__default.default.trigger(this._element, EVENT_HIDE_PREVENTED);
399
282
 
400
- if (animate) {
401
- this._backdrop.classList.add(animate);
402
- }
283
+ if (hideEvent.defaultPrevented) {
284
+ return;
285
+ }
403
286
 
404
- $__default['default'](this._backdrop).appendTo(document.body);
405
- $__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {
406
- if (_this9._ignoreBackdropClick) {
407
- _this9._ignoreBackdropClick = false;
408
- return;
409
- }
287
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
288
+ const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed
410
289
 
411
- if (event.target !== event.currentTarget) {
412
- return;
413
- }
290
+ if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) {
291
+ return;
292
+ }
414
293
 
415
- _this9._triggerBackdropTransition();
416
- });
294
+ if (!isModalOverflowing) {
295
+ this._element.style.overflowY = 'hidden';
296
+ }
417
297
 
418
- if (animate) {
419
- Util__default['default'].reflow(this._backdrop);
420
- }
298
+ this._element.classList.add(CLASS_NAME_STATIC);
421
299
 
422
- $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW);
300
+ this._queueCallback(() => {
301
+ this._element.classList.remove(CLASS_NAME_STATIC);
423
302
 
424
- if (!callback) {
425
- return;
426
- }
303
+ this._queueCallback(() => {
304
+ this._element.style.overflowY = initialOverflowY;
305
+ }, this._dialog);
306
+ }, this._dialog);
427
307
 
428
- if (!animate) {
429
- callback();
430
- return;
431
- }
432
-
433
- var backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
434
- $__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
435
- } else if (!this._isShown && this._backdrop) {
436
- $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW);
437
-
438
- var callbackRemove = function callbackRemove() {
439
- _this9._removeBackdrop();
308
+ this._element.focus();
309
+ }
310
+ /**
311
+ * The following methods are used to handle overflowing modals
312
+ */
440
313
 
441
- if (callback) {
442
- callback();
443
- }
444
- };
445
314
 
446
- if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
447
- var _backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
315
+ _adjustDialog() {
316
+ const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
448
317
 
449
- $__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
450
- } else {
451
- callbackRemove();
452
- }
453
- } else if (callback) {
454
- callback();
455
- }
456
- } // ----------------------------------------------------------------------
457
- // the following methods are used to handle overflowing modals
458
- // todo (fat): these should probably be refactored out of modal.js
459
- // ----------------------------------------------------------------------
460
- ;
318
+ const scrollbarWidth = this._scrollBar.getWidth();
461
319
 
462
- _proto._adjustDialog = function _adjustDialog() {
463
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
320
+ const isBodyOverflowing = scrollbarWidth > 0;
464
321
 
465
- if (!this._isBodyOverflowing && isModalOverflowing) {
466
- this._element.style.paddingLeft = this._scrollbarWidth + "px";
322
+ if (isBodyOverflowing && !isModalOverflowing) {
323
+ const property = index.isRTL() ? 'paddingLeft' : 'paddingRight';
324
+ this._element.style[property] = `${scrollbarWidth}px`;
467
325
  }
468
326
 
469
- if (this._isBodyOverflowing && !isModalOverflowing) {
470
- this._element.style.paddingRight = this._scrollbarWidth + "px";
327
+ if (!isBodyOverflowing && isModalOverflowing) {
328
+ const property = index.isRTL() ? 'paddingRight' : 'paddingLeft';
329
+ this._element.style[property] = `${scrollbarWidth}px`;
471
330
  }
472
- };
331
+ }
473
332
 
474
- _proto._resetAdjustments = function _resetAdjustments() {
333
+ _resetAdjustments() {
475
334
  this._element.style.paddingLeft = '';
476
335
  this._element.style.paddingRight = '';
477
- };
478
-
479
- _proto._checkScrollbar = function _checkScrollbar() {
480
- var rect = document.body.getBoundingClientRect();
481
- this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
482
- this._scrollbarWidth = this._getScrollbarWidth();
483
- };
484
-
485
- _proto._setScrollbar = function _setScrollbar() {
486
- var _this10 = this;
487
-
488
- if (this._isBodyOverflowing) {
489
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
490
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
491
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
492
- var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
493
-
494
- $__default['default'](fixedContent).each(function (index, element) {
495
- var actualPadding = element.style.paddingRight;
496
- var calculatedPadding = $__default['default'](element).css('padding-right');
497
- $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
498
- }); // Adjust sticky content margin
499
-
500
- $__default['default'](stickyContent).each(function (index, element) {
501
- var actualMargin = element.style.marginRight;
502
- var calculatedMargin = $__default['default'](element).css('margin-right');
503
- $__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
504
- }); // Adjust body padding
505
-
506
- var actualPadding = document.body.style.paddingRight;
507
- var calculatedPadding = $__default['default'](document.body).css('padding-right');
508
- $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
509
- }
510
-
511
- $__default['default'](document.body).addClass(CLASS_NAME_OPEN);
512
- };
513
-
514
- _proto._resetScrollbar = function _resetScrollbar() {
515
- // Restore fixed content padding
516
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
517
- $__default['default'](fixedContent).each(function (index, element) {
518
- var padding = $__default['default'](element).data('padding-right');
519
- $__default['default'](element).removeData('padding-right');
520
- element.style.paddingRight = padding ? padding : '';
521
- }); // Restore sticky content
522
-
523
- var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
524
- $__default['default'](elements).each(function (index, element) {
525
- var margin = $__default['default'](element).data('margin-right');
526
-
527
- if (typeof margin !== 'undefined') {
528
- $__default['default'](element).css('margin-right', margin).removeData('margin-right');
529
- }
530
- }); // Restore body padding
531
-
532
- var padding = $__default['default'](document.body).data('padding-right');
533
- $__default['default'](document.body).removeData('padding-right');
534
- document.body.style.paddingRight = padding ? padding : '';
535
- };
536
-
537
- _proto._getScrollbarWidth = function _getScrollbarWidth() {
538
- // thx d.walsh
539
- var scrollDiv = document.createElement('div');
540
- scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
541
- document.body.appendChild(scrollDiv);
542
- var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
543
- document.body.removeChild(scrollDiv);
544
- return scrollbarWidth;
545
336
  } // Static
546
- ;
547
337
 
548
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
549
- return this.each(function () {
550
- var data = $__default['default'](this).data(DATA_KEY);
551
338
 
552
- var _config = _extends({}, Default, $__default['default'](this).data(), typeof config === 'object' && config ? config : {});
339
+ static jQueryInterface(config, relatedTarget) {
340
+ return this.each(function () {
341
+ const data = Modal.getOrCreateInstance(this, config);
553
342
 
554
- if (!data) {
555
- data = new Modal(this, _config);
556
- $__default['default'](this).data(DATA_KEY, data);
343
+ if (typeof config !== 'string') {
344
+ return;
557
345
  }
558
346
 
559
- if (typeof config === 'string') {
560
- if (typeof data[config] === 'undefined') {
561
- throw new TypeError("No method named \"" + config + "\"");
562
- }
563
-
564
- data[config](relatedTarget);
565
- } else if (_config.show) {
566
- data.show(relatedTarget);
347
+ if (typeof data[config] === 'undefined') {
348
+ throw new TypeError(`No method named "${config}"`);
567
349
  }
568
- });
569
- };
570
350
 
571
- _createClass(Modal, null, [{
572
- key: "VERSION",
573
- get: function get() {
574
- return VERSION;
575
- }
576
- }, {
577
- key: "Default",
578
- get: function get() {
579
- return Default;
580
- }
581
- }]);
351
+ data[config](relatedTarget);
352
+ });
353
+ }
582
354
 
583
- return Modal;
584
- }();
355
+ }
585
356
  /**
586
- * ------------------------------------------------------------------------
587
- * Data Api implementation
588
- * ------------------------------------------------------------------------
357
+ * Data API implementation
589
358
  */
590
359
 
591
360
 
592
- $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
593
- var _this11 = this;
594
-
595
- var target;
596
- var selector = Util__default['default'].getSelectorFromElement(this);
361
+ EventHandler__default.default.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
362
+ const target = index.getElementFromSelector(this);
597
363
 
598
- if (selector) {
599
- target = document.querySelector(selector);
600
- }
601
-
602
- var config = $__default['default'](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());
603
-
604
- if (this.tagName === 'A' || this.tagName === 'AREA') {
364
+ if (['A', 'AREA'].includes(this.tagName)) {
605
365
  event.preventDefault();
606
366
  }
607
367
 
608
- var $target = $__default['default'](target).one(EVENT_SHOW, function (showEvent) {
609
- if (showEvent.isDefaultPrevented()) {
610
- // Only register focus restorer if modal will actually get shown
368
+ EventHandler__default.default.one(target, EVENT_SHOW, showEvent => {
369
+ if (showEvent.defaultPrevented) {
370
+ // only register focus restorer if modal will actually get shown
611
371
  return;
612
372
  }
613
373
 
614
- $target.one(EVENT_HIDDEN, function () {
615
- if ($__default['default'](_this11).is(':visible')) {
616
- _this11.focus();
374
+ EventHandler__default.default.one(target, EVENT_HIDDEN, () => {
375
+ if (index.isVisible(this)) {
376
+ this.focus();
617
377
  }
618
378
  });
619
- });
379
+ }); // avoid conflict when clicking modal toggler while another one is open
380
+
381
+ const alreadyOpen = SelectorEngine__default.default.findOne(OPEN_SELECTOR);
620
382
 
621
- Modal._jQueryInterface.call($__default['default'](target), config, this);
383
+ if (alreadyOpen) {
384
+ Modal.getInstance(alreadyOpen).hide();
385
+ }
386
+
387
+ const data = Modal.getOrCreateInstance(target);
388
+ data.toggle(this);
622
389
  });
390
+ componentFunctions.enableDismissTrigger(Modal);
623
391
  /**
624
- * ------------------------------------------------------------------------
625
392
  * jQuery
626
- * ------------------------------------------------------------------------
627
393
  */
628
394
 
629
- $__default['default'].fn[NAME] = Modal._jQueryInterface;
630
- $__default['default'].fn[NAME].Constructor = Modal;
631
-
632
- $__default['default'].fn[NAME].noConflict = function () {
633
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
634
- return Modal._jQueryInterface;
635
- };
395
+ index.defineJQueryPlugin(Modal);
636
396
 
637
397
  return Modal;
638
398
 
639
- })));
399
+ }));