bootstrap 4.3.0 → 5.0.0.alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +15 -1
  3. data/CHANGELOG.md +2 -14
  4. data/README.md +1 -1
  5. data/assets/javascripts/bootstrap-sprockets.js +5 -1
  6. data/assets/javascripts/bootstrap.js +2292 -1514
  7. data/assets/javascripts/bootstrap.min.js +4 -4
  8. data/assets/javascripts/bootstrap/alert.js +148 -85
  9. data/assets/javascripts/bootstrap/button.js +69 -110
  10. data/assets/javascripts/bootstrap/carousel.js +320 -239
  11. data/assets/javascripts/bootstrap/collapse.js +300 -177
  12. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  13. data/assets/javascripts/bootstrap/dom/event-handler.js +311 -0
  14. data/assets/javascripts/bootstrap/dom/manipulator.js +100 -0
  15. data/assets/javascripts/bootstrap/dom/polyfill.js +110 -0
  16. data/assets/javascripts/bootstrap/dom/selector-engine.js +98 -0
  17. data/assets/javascripts/bootstrap/dropdown.js +282 -265
  18. data/assets/javascripts/bootstrap/modal.js +348 -231
  19. data/assets/javascripts/bootstrap/popover.js +80 -105
  20. data/assets/javascripts/bootstrap/scrollspy.js +173 -138
  21. data/assets/javascripts/bootstrap/tab.js +180 -115
  22. data/assets/javascripts/bootstrap/toast.js +188 -132
  23. data/assets/javascripts/bootstrap/tooltip.js +508 -230
  24. data/assets/stylesheets/_bootstrap-grid.scss +54 -18
  25. data/assets/stylesheets/_bootstrap-reboot.scss +7 -4
  26. data/assets/stylesheets/_bootstrap.scss +17 -11
  27. data/assets/stylesheets/bootstrap/_alert.scss +3 -3
  28. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  29. data/assets/stylesheets/bootstrap/_breadcrumb.scss +7 -18
  30. data/assets/stylesheets/bootstrap/_button-group.scss +16 -38
  31. data/assets/stylesheets/bootstrap/_buttons.scss +26 -39
  32. data/assets/stylesheets/bootstrap/_card.scss +48 -97
  33. data/assets/stylesheets/bootstrap/_carousel.scss +16 -18
  34. data/assets/stylesheets/bootstrap/_close.scss +9 -14
  35. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  36. data/assets/stylesheets/bootstrap/_dropdown.scss +13 -9
  37. data/assets/stylesheets/bootstrap/_forms.scss +9 -330
  38. data/assets/stylesheets/bootstrap/_functions.scss +141 -24
  39. data/assets/stylesheets/bootstrap/_grid.scss +4 -34
  40. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  41. data/assets/stylesheets/bootstrap/_images.scss +2 -2
  42. data/assets/stylesheets/bootstrap/_list-group.scss +41 -33
  43. data/assets/stylesheets/bootstrap/_mixins.scss +9 -15
  44. data/assets/stylesheets/bootstrap/_modal.scss +54 -48
  45. data/assets/stylesheets/bootstrap/_nav.scss +12 -9
  46. data/assets/stylesheets/bootstrap/_navbar.scss +54 -56
  47. data/assets/stylesheets/bootstrap/_pagination.scss +10 -22
  48. data/assets/stylesheets/bootstrap/_popover.scss +13 -14
  49. data/assets/stylesheets/bootstrap/_progress.scss +6 -4
  50. data/assets/stylesheets/bootstrap/_reboot.scss +318 -185
  51. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  52. data/assets/stylesheets/bootstrap/_spinners.scss +3 -2
  53. data/assets/stylesheets/bootstrap/_tables.scss +80 -114
  54. data/assets/stylesheets/bootstrap/_tooltip.scss +5 -5
  55. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  56. data/assets/stylesheets/bootstrap/_type.scss +40 -61
  57. data/assets/stylesheets/bootstrap/_utilities.scss +503 -17
  58. data/assets/stylesheets/bootstrap/_variables.scss +567 -430
  59. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  60. data/assets/stylesheets/bootstrap/forms/_form-check.scss +142 -0
  61. data/assets/stylesheets/bootstrap/forms/_form-control.scss +116 -0
  62. data/assets/stylesheets/bootstrap/forms/_form-file.scss +91 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-range.scss +136 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-select.scss +82 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  66. data/assets/stylesheets/bootstrap/forms/_input-group.scss +140 -0
  67. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  68. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  69. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  70. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  71. data/assets/stylesheets/bootstrap/helpers/_embed.scss +31 -0
  72. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  73. data/assets/stylesheets/bootstrap/helpers/_screenreaders.scss +8 -0
  74. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  75. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  76. data/assets/stylesheets/bootstrap/mixins/_alert.scss +0 -4
  77. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +26 -13
  78. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +11 -8
  79. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +68 -50
  80. data/assets/stylesheets/bootstrap/mixins/_caret.scss +4 -4
  81. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  82. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  83. data/assets/stylesheets/bootstrap/mixins/_forms.scss +47 -106
  84. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +9 -11
  85. data/assets/stylesheets/bootstrap/mixins/_grid.scss +99 -29
  86. data/assets/stylesheets/bootstrap/mixins/_image.scss +0 -20
  87. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +2 -1
  88. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  89. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +1 -1
  90. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +14 -19
  91. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  92. data/assets/stylesheets/bootstrap/mixins/_transition.scss +17 -7
  93. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +49 -0
  94. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  95. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +230 -130
  96. data/bootstrap.gemspec +1 -1
  97. data/lib/bootstrap/version.rb +2 -2
  98. data/tasks/updater/js.rb +3 -3
  99. data/tasks/updater/network.rb +2 -2
  100. data/test/dummy_rails/app/assets/config/manifest.js +3 -0
  101. data/test/dummy_rails/app/assets/stylesheets/.browserslistrc +1 -0
  102. data/test/gemfiles/rails_6_0.gemfile +7 -0
  103. data/test/support/dummy_rails_integration.rb +3 -1
  104. data/test/test_helper.rb +18 -13
  105. metadata +40 -42
  106. data/assets/javascripts/bootstrap/util.js +0 -171
  107. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  108. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -507
  109. data/assets/stylesheets/bootstrap/_input-group.scss +0 -193
  110. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  111. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  112. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  113. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -21
  114. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  115. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  116. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -66
  117. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  118. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -10
  119. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  120. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  121. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -16
  122. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  123. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  124. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  125. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  126. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  127. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  128. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  129. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  130. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  131. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  132. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  133. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  134. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  135. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  136. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  137. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  138. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  139. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
@@ -1,67 +1,151 @@
1
1
  /*!
2
- * Bootstrap modal.js v4.3.0 (https://getbootstrap.com/)
3
- * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
2
+ * Bootstrap modal.js v5.0.0-alpha1 (https://getbootstrap.com/)
3
+ * Copyright 2011-2020 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
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 = global || self, global.Modal = factory(global.jQuery, global.Util));
10
- }(this, function ($, Util) { 'use strict';
11
-
12
- $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
13
- Util = Util && Util.hasOwnProperty('default') ? Util['default'] : Util;
14
-
15
- function _defineProperties(target, props) {
16
- for (var i = 0; i < props.length; i++) {
17
- var descriptor = props[i];
18
- descriptor.enumerable = descriptor.enumerable || false;
19
- descriptor.configurable = true;
20
- if ("value" in descriptor) descriptor.writable = true;
21
- Object.defineProperty(target, descriptor.key, descriptor);
7
+ 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')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data.js', './dom/event-handler.js', './dom/manipulator.js', './dom/selector-engine.js'], factory) :
9
+ (global = global || self, global.Modal = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine));
10
+ }(this, (function (Data, EventHandler, Manipulator, SelectorEngine) { 'use strict';
11
+
12
+ Data = Data && Object.prototype.hasOwnProperty.call(Data, 'default') ? Data['default'] : Data;
13
+ EventHandler = EventHandler && Object.prototype.hasOwnProperty.call(EventHandler, 'default') ? EventHandler['default'] : EventHandler;
14
+ Manipulator = Manipulator && Object.prototype.hasOwnProperty.call(Manipulator, 'default') ? Manipulator['default'] : Manipulator;
15
+ SelectorEngine = SelectorEngine && Object.prototype.hasOwnProperty.call(SelectorEngine, 'default') ? SelectorEngine['default'] : SelectorEngine;
16
+
17
+ /**
18
+ * --------------------------------------------------------------------------
19
+ * Bootstrap (v5.0.0-alpha1): util/index.js
20
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
21
+ * --------------------------------------------------------------------------
22
+ */
23
+ var MILLISECONDS_MULTIPLIER = 1000;
24
+ var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
25
+
26
+ var toType = function toType(obj) {
27
+ if (obj === null || obj === undefined) {
28
+ return "" + obj;
22
29
  }
23
- }
24
30
 
25
- function _createClass(Constructor, protoProps, staticProps) {
26
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
27
- if (staticProps) _defineProperties(Constructor, staticProps);
28
- return Constructor;
29
- }
31
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
32
+ };
30
33
 
31
- function _defineProperty(obj, key, value) {
32
- if (key in obj) {
33
- Object.defineProperty(obj, key, {
34
- value: value,
35
- enumerable: true,
36
- configurable: true,
37
- writable: true
38
- });
39
- } else {
40
- obj[key] = value;
34
+ var getSelector = function getSelector(element) {
35
+ var selector = element.getAttribute('data-target');
36
+
37
+ if (!selector || selector === '#') {
38
+ var hrefAttr = element.getAttribute('href');
39
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
41
40
  }
42
41
 
43
- return obj;
44
- }
42
+ return selector;
43
+ };
44
+
45
+ var getElementFromSelector = function getElementFromSelector(element) {
46
+ var selector = getSelector(element);
47
+ return selector ? document.querySelector(selector) : null;
48
+ };
49
+
50
+ var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
51
+ if (!element) {
52
+ return 0;
53
+ } // Get transition-duration of the element
45
54
 
46
- function _objectSpread(target) {
47
- for (var i = 1; i < arguments.length; i++) {
48
- var source = arguments[i] != null ? arguments[i] : {};
49
- var ownKeys = Object.keys(source);
50
55
 
51
- if (typeof Object.getOwnPropertySymbols === 'function') {
52
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {
53
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
54
- }));
56
+ var _window$getComputedSt = window.getComputedStyle(element),
57
+ transitionDuration = _window$getComputedSt.transitionDuration,
58
+ transitionDelay = _window$getComputedSt.transitionDelay;
59
+
60
+ var floatTransitionDuration = parseFloat(transitionDuration);
61
+ var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
62
+
63
+ if (!floatTransitionDuration && !floatTransitionDelay) {
64
+ return 0;
65
+ } // If multiple durations are defined, take the first
66
+
67
+
68
+ transitionDuration = transitionDuration.split(',')[0];
69
+ transitionDelay = transitionDelay.split(',')[0];
70
+ return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
71
+ };
72
+
73
+ var triggerTransitionEnd = function triggerTransitionEnd(element) {
74
+ element.dispatchEvent(new Event(TRANSITION_END));
75
+ };
76
+
77
+ var isElement = function isElement(obj) {
78
+ return (obj[0] || obj).nodeType;
79
+ };
80
+
81
+ var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
82
+ var called = false;
83
+ var durationPadding = 5;
84
+ var emulatedDuration = duration + durationPadding;
85
+
86
+ function listener() {
87
+ called = true;
88
+ element.removeEventListener(TRANSITION_END, listener);
89
+ }
90
+
91
+ element.addEventListener(TRANSITION_END, listener);
92
+ setTimeout(function () {
93
+ if (!called) {
94
+ triggerTransitionEnd(element);
55
95
  }
96
+ }, emulatedDuration);
97
+ };
56
98
 
57
- ownKeys.forEach(function (key) {
58
- _defineProperty(target, key, source[key]);
59
- });
99
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
100
+ Object.keys(configTypes).forEach(function (property) {
101
+ var expectedTypes = configTypes[property];
102
+ var value = config[property];
103
+ var valueType = value && isElement(value) ? 'element' : toType(value);
104
+
105
+ if (!new RegExp(expectedTypes).test(valueType)) {
106
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
107
+ }
108
+ });
109
+ };
110
+
111
+ var isVisible = function isVisible(element) {
112
+ if (!element) {
113
+ return false;
60
114
  }
61
115
 
62
- return target;
63
- }
116
+ if (element.style && element.parentNode && element.parentNode.style) {
117
+ var elementStyle = getComputedStyle(element);
118
+ var parentNodeStyle = getComputedStyle(element.parentNode);
119
+ return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
120
+ }
64
121
 
122
+ return false;
123
+ };
124
+
125
+ var reflow = function reflow(element) {
126
+ return element.offsetHeight;
127
+ };
128
+
129
+ var getjQuery = function getjQuery() {
130
+ var _window = window,
131
+ jQuery = _window.jQuery;
132
+
133
+ if (jQuery && !document.body.hasAttribute('data-no-jquery')) {
134
+ return jQuery;
135
+ }
136
+
137
+ return null;
138
+ };
139
+
140
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
141
+
142
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
143
+
144
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
145
+
146
+ 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); } }
147
+
148
+ function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
65
149
  /**
66
150
  * ------------------------------------------------------------------------
67
151
  * Constants
@@ -69,13 +153,11 @@
69
153
  */
70
154
 
71
155
  var NAME = 'modal';
72
- var VERSION = '4.3.0';
156
+ var VERSION = '5.0.0-alpha1';
73
157
  var DATA_KEY = 'bs.modal';
74
158
  var EVENT_KEY = "." + DATA_KEY;
75
159
  var DATA_API_KEY = '.data-api';
76
- var JQUERY_NO_CONFLICT = $.fn[NAME];
77
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
78
-
160
+ var ESCAPE_KEY = 'Escape';
79
161
  var Default = {
80
162
  backdrop: true,
81
163
  keyboard: true,
@@ -88,55 +170,48 @@
88
170
  focus: 'boolean',
89
171
  show: 'boolean'
90
172
  };
91
- var Event = {
92
- HIDE: "hide" + EVENT_KEY,
93
- HIDDEN: "hidden" + EVENT_KEY,
94
- SHOW: "show" + EVENT_KEY,
95
- SHOWN: "shown" + EVENT_KEY,
96
- FOCUSIN: "focusin" + EVENT_KEY,
97
- RESIZE: "resize" + EVENT_KEY,
98
- CLICK_DISMISS: "click.dismiss" + EVENT_KEY,
99
- KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY,
100
- MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY,
101
- MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY,
102
- CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY
103
- };
104
- var ClassName = {
105
- SCROLLABLE: 'modal-dialog-scrollable',
106
- SCROLLBAR_MEASURER: 'modal-scrollbar-measure',
107
- BACKDROP: 'modal-backdrop',
108
- OPEN: 'modal-open',
109
- FADE: 'fade',
110
- SHOW: 'show'
111
- };
112
- var Selector = {
113
- DIALOG: '.modal-dialog',
114
- MODAL_BODY: '.modal-body',
115
- DATA_TOGGLE: '[data-toggle="modal"]',
116
- DATA_DISMISS: '[data-dismiss="modal"]',
117
- FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',
118
- STICKY_CONTENT: '.sticky-top'
119
- /**
120
- * ------------------------------------------------------------------------
121
- * Class Definition
122
- * ------------------------------------------------------------------------
123
- */
124
-
125
- };
173
+ var EVENT_HIDE = "hide" + EVENT_KEY;
174
+ var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
175
+ var EVENT_HIDDEN = "hidden" + EVENT_KEY;
176
+ var EVENT_SHOW = "show" + EVENT_KEY;
177
+ var EVENT_SHOWN = "shown" + EVENT_KEY;
178
+ var EVENT_FOCUSIN = "focusin" + EVENT_KEY;
179
+ var EVENT_RESIZE = "resize" + EVENT_KEY;
180
+ var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
181
+ var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY;
182
+ var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
183
+ var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
184
+ var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
185
+ var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
186
+ var CLASS_NAME_BACKDROP = 'modal-backdrop';
187
+ var CLASS_NAME_OPEN = 'modal-open';
188
+ var CLASS_NAME_FADE = 'fade';
189
+ var CLASS_NAME_SHOW = 'show';
190
+ var CLASS_NAME_STATIC = 'modal-static';
191
+ var SELECTOR_DIALOG = '.modal-dialog';
192
+ var SELECTOR_MODAL_BODY = '.modal-body';
193
+ var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
194
+ var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
195
+ var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
196
+ var SELECTOR_STICKY_CONTENT = '.sticky-top';
197
+ /**
198
+ * ------------------------------------------------------------------------
199
+ * Class Definition
200
+ * ------------------------------------------------------------------------
201
+ */
126
202
 
127
- var Modal =
128
- /*#__PURE__*/
129
- function () {
203
+ var Modal = /*#__PURE__*/function () {
130
204
  function Modal(element, config) {
131
205
  this._config = this._getConfig(config);
132
206
  this._element = element;
133
- this._dialog = element.querySelector(Selector.DIALOG);
207
+ this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, element);
134
208
  this._backdrop = null;
135
209
  this._isShown = false;
136
210
  this._isBodyOverflowing = false;
137
211
  this._ignoreBackdropClick = false;
138
212
  this._isTransitioning = false;
139
213
  this._scrollbarWidth = 0;
214
+ Data.setData(element, DATA_KEY, this);
140
215
  } // Getters
141
216
 
142
217
 
@@ -154,16 +229,15 @@
154
229
  return;
155
230
  }
156
231
 
157
- if ($(this._element).hasClass(ClassName.FADE)) {
232
+ if (this._element.classList.contains(CLASS_NAME_FADE)) {
158
233
  this._isTransitioning = true;
159
234
  }
160
235
 
161
- var showEvent = $.Event(Event.SHOW, {
236
+ var showEvent = EventHandler.trigger(this._element, EVENT_SHOW, {
162
237
  relatedTarget: relatedTarget
163
238
  });
164
- $(this._element).trigger(showEvent);
165
239
 
166
- if (this._isShown || showEvent.isDefaultPrevented()) {
240
+ if (this._isShown || showEvent.defaultPrevented) {
167
241
  return;
168
242
  }
169
243
 
@@ -179,12 +253,12 @@
179
253
 
180
254
  this._setResizeEvent();
181
255
 
182
- $(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) {
256
+ EventHandler.on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
183
257
  return _this.hide(event);
184
258
  });
185
- $(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () {
186
- $(_this._element).one(Event.MOUSEUP_DISMISS, function (event) {
187
- if ($(event.target).is(_this._element)) {
259
+ EventHandler.on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () {
260
+ EventHandler.one(_this._element, EVENT_MOUSEUP_DISMISS, function (event) {
261
+ if (event.target === _this._element) {
188
262
  _this._ignoreBackdropClick = true;
189
263
  }
190
264
  });
@@ -206,15 +280,15 @@
206
280
  return;
207
281
  }
208
282
 
209
- var hideEvent = $.Event(Event.HIDE);
210
- $(this._element).trigger(hideEvent);
283
+ var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE);
211
284
 
212
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
285
+ if (hideEvent.defaultPrevented) {
213
286
  return;
214
287
  }
215
288
 
216
289
  this._isShown = false;
217
- var transition = $(this._element).hasClass(ClassName.FADE);
290
+
291
+ var transition = this._element.classList.contains(CLASS_NAME_FADE);
218
292
 
219
293
  if (transition) {
220
294
  this._isTransitioning = true;
@@ -224,16 +298,19 @@
224
298
 
225
299
  this._setResizeEvent();
226
300
 
227
- $(document).off(Event.FOCUSIN);
228
- $(this._element).removeClass(ClassName.SHOW);
229
- $(this._element).off(Event.CLICK_DISMISS);
230
- $(this._dialog).off(Event.MOUSEDOWN_DISMISS);
301
+ EventHandler.off(document, EVENT_FOCUSIN);
302
+
303
+ this._element.classList.remove(CLASS_NAME_SHOW);
304
+
305
+ EventHandler.off(this._element, EVENT_CLICK_DISMISS);
306
+ EventHandler.off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
231
307
 
232
308
  if (transition) {
233
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
234
- $(this._element).one(Util.TRANSITION_END, function (event) {
309
+ var transitionDuration = getTransitionDurationFromElement(this._element);
310
+ EventHandler.one(this._element, TRANSITION_END, function (event) {
235
311
  return _this2._hideModal(event);
236
- }).emulateTransitionEnd(transitionDuration);
312
+ });
313
+ emulateTransitionEnd(this._element, transitionDuration);
237
314
  } else {
238
315
  this._hideModal();
239
316
  }
@@ -241,16 +318,16 @@
241
318
 
242
319
  _proto.dispose = function dispose() {
243
320
  [window, this._element, this._dialog].forEach(function (htmlElement) {
244
- return $(htmlElement).off(EVENT_KEY);
321
+ return EventHandler.off(htmlElement, EVENT_KEY);
245
322
  });
246
323
  /**
247
- * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`
324
+ * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
248
325
  * Do not move `document` in `htmlElements` array
249
- * It will remove `Event.CLICK_DATA_API` event that should remain
326
+ * It will remove `EVENT_CLICK_DATA_API` event that should remain
250
327
  */
251
328
 
252
- $(document).off(Event.FOCUSIN);
253
- $.removeData(this._element, DATA_KEY);
329
+ EventHandler.off(document, EVENT_FOCUSIN);
330
+ Data.removeData(this._element, DATA_KEY);
254
331
  this._config = null;
255
332
  this._element = null;
256
333
  this._dialog = null;
@@ -268,15 +345,17 @@
268
345
  ;
269
346
 
270
347
  _proto._getConfig = function _getConfig(config) {
271
- config = _objectSpread({}, Default, config);
272
- Util.typeCheckConfig(NAME, config, DefaultType);
348
+ config = _objectSpread(_objectSpread({}, Default), config);
349
+ typeCheckConfig(NAME, config, DefaultType);
273
350
  return config;
274
351
  };
275
352
 
276
353
  _proto._showElement = function _showElement(relatedTarget) {
277
354
  var _this3 = this;
278
355
 
279
- var transition = $(this._element).hasClass(ClassName.FADE);
356
+ var transition = this._element.classList.contains(CLASS_NAME_FADE);
357
+
358
+ var modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog);
280
359
 
281
360
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
282
361
  // Don't move modal's DOM position
@@ -289,38 +368,39 @@
289
368
 
290
369
  this._element.setAttribute('aria-modal', true);
291
370
 
292
- if ($(this._dialog).hasClass(ClassName.SCROLLABLE)) {
293
- this._dialog.querySelector(Selector.MODAL_BODY).scrollTop = 0;
294
- } else {
295
- this._element.scrollTop = 0;
371
+ this._element.setAttribute('role', 'dialog');
372
+
373
+ this._element.scrollTop = 0;
374
+
375
+ if (modalBody) {
376
+ modalBody.scrollTop = 0;
296
377
  }
297
378
 
298
379
  if (transition) {
299
- Util.reflow(this._element);
380
+ reflow(this._element);
300
381
  }
301
382
 
302
- $(this._element).addClass(ClassName.SHOW);
383
+ this._element.classList.add(CLASS_NAME_SHOW);
303
384
 
304
385
  if (this._config.focus) {
305
386
  this._enforceFocus();
306
387
  }
307
388
 
308
- var shownEvent = $.Event(Event.SHOWN, {
309
- relatedTarget: relatedTarget
310
- });
311
-
312
389
  var transitionComplete = function transitionComplete() {
313
390
  if (_this3._config.focus) {
314
391
  _this3._element.focus();
315
392
  }
316
393
 
317
394
  _this3._isTransitioning = false;
318
- $(_this3._element).trigger(shownEvent);
395
+ EventHandler.trigger(_this3._element, EVENT_SHOWN, {
396
+ relatedTarget: relatedTarget
397
+ });
319
398
  };
320
399
 
321
400
  if (transition) {
322
- var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
323
- $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
401
+ var transitionDuration = getTransitionDurationFromElement(this._dialog);
402
+ EventHandler.one(this._dialog, TRANSITION_END, transitionComplete);
403
+ emulateTransitionEnd(this._dialog, transitionDuration);
324
404
  } else {
325
405
  transitionComplete();
326
406
  }
@@ -329,9 +409,10 @@
329
409
  _proto._enforceFocus = function _enforceFocus() {
330
410
  var _this4 = this;
331
411
 
332
- $(document).off(Event.FOCUSIN) // Guard against infinite focus loop
333
- .on(Event.FOCUSIN, function (event) {
334
- if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {
412
+ EventHandler.off(document, EVENT_FOCUSIN); // guard against infinite focus loop
413
+
414
+ EventHandler.on(document, EVENT_FOCUSIN, function (event) {
415
+ if (document !== event.target && _this4._element !== event.target && !_this4._element.contains(event.target)) {
335
416
  _this4._element.focus();
336
417
  }
337
418
  });
@@ -340,16 +421,18 @@
340
421
  _proto._setEscapeEvent = function _setEscapeEvent() {
341
422
  var _this5 = this;
342
423
 
343
- if (this._isShown && this._config.keyboard) {
344
- $(this._element).on(Event.KEYDOWN_DISMISS, function (event) {
345
- if (event.which === ESCAPE_KEYCODE) {
424
+ if (this._isShown) {
425
+ EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {
426
+ if (_this5._config.keyboard && event.key === ESCAPE_KEY) {
346
427
  event.preventDefault();
347
428
 
348
429
  _this5.hide();
430
+ } else if (!_this5._config.keyboard && event.key === ESCAPE_KEY) {
431
+ _this5._triggerBackdropTransition();
349
432
  }
350
433
  });
351
- } else if (!this._isShown) {
352
- $(this._element).off(Event.KEYDOWN_DISMISS);
434
+ } else {
435
+ EventHandler.off(this._element, EVENT_KEYDOWN_DISMISS);
353
436
  }
354
437
  };
355
438
 
@@ -357,11 +440,11 @@
357
440
  var _this6 = this;
358
441
 
359
442
  if (this._isShown) {
360
- $(window).on(Event.RESIZE, function (event) {
361
- return _this6.handleUpdate(event);
443
+ EventHandler.on(window, EVENT_RESIZE, function () {
444
+ return _this6._adjustDialog();
362
445
  });
363
446
  } else {
364
- $(window).off(Event.RESIZE);
447
+ EventHandler.off(window, EVENT_RESIZE);
365
448
  }
366
449
  };
367
450
 
@@ -374,41 +457,42 @@
374
457
 
375
458
  this._element.removeAttribute('aria-modal');
376
459
 
460
+ this._element.removeAttribute('role');
461
+
377
462
  this._isTransitioning = false;
378
463
 
379
464
  this._showBackdrop(function () {
380
- $(document.body).removeClass(ClassName.OPEN);
465
+ document.body.classList.remove(CLASS_NAME_OPEN);
381
466
 
382
467
  _this7._resetAdjustments();
383
468
 
384
469
  _this7._resetScrollbar();
385
470
 
386
- $(_this7._element).trigger(Event.HIDDEN);
471
+ EventHandler.trigger(_this7._element, EVENT_HIDDEN);
387
472
  });
388
473
  };
389
474
 
390
475
  _proto._removeBackdrop = function _removeBackdrop() {
391
- if (this._backdrop) {
392
- $(this._backdrop).remove();
393
- this._backdrop = null;
394
- }
476
+ this._backdrop.parentNode.removeChild(this._backdrop);
477
+
478
+ this._backdrop = null;
395
479
  };
396
480
 
397
481
  _proto._showBackdrop = function _showBackdrop(callback) {
398
482
  var _this8 = this;
399
483
 
400
- var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : '';
484
+ var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
401
485
 
402
486
  if (this._isShown && this._config.backdrop) {
403
487
  this._backdrop = document.createElement('div');
404
- this._backdrop.className = ClassName.BACKDROP;
488
+ this._backdrop.className = CLASS_NAME_BACKDROP;
405
489
 
406
490
  if (animate) {
407
491
  this._backdrop.classList.add(animate);
408
492
  }
409
493
 
410
- $(this._backdrop).appendTo(document.body);
411
- $(this._element).on(Event.CLICK_DISMISS, function (event) {
494
+ document.body.appendChild(this._backdrop);
495
+ EventHandler.on(this._element, EVENT_CLICK_DISMISS, function (event) {
412
496
  if (_this8._ignoreBackdropClick) {
413
497
  _this8._ignoreBackdropClick = false;
414
498
  return;
@@ -418,54 +502,69 @@
418
502
  return;
419
503
  }
420
504
 
421
- if (_this8._config.backdrop === 'static') {
422
- _this8._element.focus();
423
- } else {
424
- _this8.hide();
425
- }
505
+ _this8._triggerBackdropTransition();
426
506
  });
427
507
 
428
508
  if (animate) {
429
- Util.reflow(this._backdrop);
509
+ reflow(this._backdrop);
430
510
  }
431
511
 
432
- $(this._backdrop).addClass(ClassName.SHOW);
433
-
434
- if (!callback) {
435
- return;
436
- }
512
+ this._backdrop.classList.add(CLASS_NAME_SHOW);
437
513
 
438
514
  if (!animate) {
439
515
  callback();
440
516
  return;
441
517
  }
442
518
 
443
- var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
444
- $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
519
+ var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
520
+ EventHandler.one(this._backdrop, TRANSITION_END, callback);
521
+ emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
445
522
  } else if (!this._isShown && this._backdrop) {
446
- $(this._backdrop).removeClass(ClassName.SHOW);
523
+ this._backdrop.classList.remove(CLASS_NAME_SHOW);
447
524
 
448
525
  var callbackRemove = function callbackRemove() {
449
526
  _this8._removeBackdrop();
450
527
 
451
- if (callback) {
452
- callback();
453
- }
528
+ callback();
454
529
  };
455
530
 
456
- if ($(this._element).hasClass(ClassName.FADE)) {
457
- var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
531
+ if (this._element.classList.contains(CLASS_NAME_FADE)) {
532
+ var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
458
533
 
459
- $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
534
+ EventHandler.one(this._backdrop, TRANSITION_END, callbackRemove);
535
+ emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
460
536
  } else {
461
537
  callbackRemove();
462
538
  }
463
- } else if (callback) {
539
+ } else {
464
540
  callback();
465
541
  }
542
+ };
543
+
544
+ _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
545
+ var _this9 = this;
546
+
547
+ if (this._config.backdrop === 'static') {
548
+ var hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
549
+
550
+ if (hideEvent.defaultPrevented) {
551
+ return;
552
+ }
553
+
554
+ this._element.classList.add(CLASS_NAME_STATIC);
555
+
556
+ var modalTransitionDuration = getTransitionDurationFromElement(this._element);
557
+ EventHandler.one(this._element, TRANSITION_END, function () {
558
+ _this9._element.classList.remove(CLASS_NAME_STATIC);
559
+ });
560
+ emulateTransitionEnd(this._element, modalTransitionDuration);
561
+
562
+ this._element.focus();
563
+ } else {
564
+ this.hide();
565
+ }
466
566
  } // ----------------------------------------------------------------------
467
567
  // the following methods are used to handle overflowing modals
468
- // todo (fat): these should probably be refactored out of modal.js
469
568
  // ----------------------------------------------------------------------
470
569
  ;
471
570
 
@@ -488,66 +587,74 @@
488
587
 
489
588
  _proto._checkScrollbar = function _checkScrollbar() {
490
589
  var rect = document.body.getBoundingClientRect();
491
- this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;
590
+ this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
492
591
  this._scrollbarWidth = this._getScrollbarWidth();
493
592
  };
494
593
 
495
594
  _proto._setScrollbar = function _setScrollbar() {
496
- var _this9 = this;
595
+ var _this10 = this;
497
596
 
498
597
  if (this._isBodyOverflowing) {
499
598
  // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
500
599
  // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
501
- var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
502
- var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding
503
-
504
- $(fixedContent).each(function (index, element) {
600
+ // Adjust fixed content padding
601
+ SelectorEngine.find(SELECTOR_FIXED_CONTENT).forEach(function (element) {
505
602
  var actualPadding = element.style.paddingRight;
506
- var calculatedPadding = $(element).css('padding-right');
507
- $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px");
603
+ var calculatedPadding = window.getComputedStyle(element)['padding-right'];
604
+ Manipulator.setDataAttribute(element, 'padding-right', actualPadding);
605
+ element.style.paddingRight = parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px";
508
606
  }); // Adjust sticky content margin
509
607
 
510
- $(stickyContent).each(function (index, element) {
608
+ SelectorEngine.find(SELECTOR_STICKY_CONTENT).forEach(function (element) {
511
609
  var actualMargin = element.style.marginRight;
512
- var calculatedMargin = $(element).css('margin-right');
513
- $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px");
610
+ var calculatedMargin = window.getComputedStyle(element)['margin-right'];
611
+ Manipulator.setDataAttribute(element, 'margin-right', actualMargin);
612
+ element.style.marginRight = parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px";
514
613
  }); // Adjust body padding
515
614
 
516
615
  var actualPadding = document.body.style.paddingRight;
517
- var calculatedPadding = $(document.body).css('padding-right');
518
- $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
616
+ var calculatedPadding = window.getComputedStyle(document.body)['padding-right'];
617
+ Manipulator.setDataAttribute(document.body, 'padding-right', actualPadding);
618
+ document.body.style.paddingRight = parseFloat(calculatedPadding) + this._scrollbarWidth + "px";
519
619
  }
520
620
 
521
- $(document.body).addClass(ClassName.OPEN);
621
+ document.body.classList.add(CLASS_NAME_OPEN);
522
622
  };
523
623
 
524
624
  _proto._resetScrollbar = function _resetScrollbar() {
525
625
  // Restore fixed content padding
526
- var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT));
527
- $(fixedContent).each(function (index, element) {
528
- var padding = $(element).data('padding-right');
529
- $(element).removeData('padding-right');
530
- element.style.paddingRight = padding ? padding : '';
531
- }); // Restore sticky content
626
+ SelectorEngine.find(SELECTOR_FIXED_CONTENT).forEach(function (element) {
627
+ var padding = Manipulator.getDataAttribute(element, 'padding-right');
532
628
 
533
- var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT));
534
- $(elements).each(function (index, element) {
535
- var margin = $(element).data('margin-right');
629
+ if (typeof padding !== 'undefined') {
630
+ Manipulator.removeDataAttribute(element, 'padding-right');
631
+ element.style.paddingRight = padding;
632
+ }
633
+ }); // Restore sticky content and navbar-toggler margin
634
+
635
+ SelectorEngine.find("" + SELECTOR_STICKY_CONTENT).forEach(function (element) {
636
+ var margin = Manipulator.getDataAttribute(element, 'margin-right');
536
637
 
537
638
  if (typeof margin !== 'undefined') {
538
- $(element).css('margin-right', margin).removeData('margin-right');
639
+ Manipulator.removeDataAttribute(element, 'margin-right');
640
+ element.style.marginRight = margin;
539
641
  }
540
642
  }); // Restore body padding
541
643
 
542
- var padding = $(document.body).data('padding-right');
543
- $(document.body).removeData('padding-right');
544
- document.body.style.paddingRight = padding ? padding : '';
644
+ var padding = Manipulator.getDataAttribute(document.body, 'padding-right');
645
+
646
+ if (typeof padding === 'undefined') {
647
+ document.body.style.paddingRight = '';
648
+ } else {
649
+ Manipulator.removeDataAttribute(document.body, 'padding-right');
650
+ document.body.style.paddingRight = padding;
651
+ }
545
652
  };
546
653
 
547
654
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
548
655
  // thx d.walsh
549
656
  var scrollDiv = document.createElement('div');
550
- scrollDiv.className = ClassName.SCROLLBAR_MEASURER;
657
+ scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
551
658
  document.body.appendChild(scrollDiv);
552
659
  var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
553
660
  document.body.removeChild(scrollDiv);
@@ -555,15 +662,14 @@
555
662
  } // Static
556
663
  ;
557
664
 
558
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
665
+ Modal.jQueryInterface = function jQueryInterface(config, relatedTarget) {
559
666
  return this.each(function () {
560
- var data = $(this).data(DATA_KEY);
667
+ var data = Data.getData(this, DATA_KEY);
561
668
 
562
- var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {});
669
+ var _config = _objectSpread(_objectSpread(_objectSpread({}, Default), Manipulator.getDataAttributes(this)), typeof config === 'object' && config ? config : {});
563
670
 
564
671
  if (!data) {
565
672
  data = new Modal(this, _config);
566
- $(this).data(DATA_KEY, data);
567
673
  }
568
674
 
569
675
  if (typeof config === 'string') {
@@ -578,6 +684,10 @@
578
684
  });
579
685
  };
580
686
 
687
+ Modal.getInstance = function getInstance(element) {
688
+ return Data.getData(element, DATA_KEY);
689
+ };
690
+
581
691
  _createClass(Modal, null, [{
582
692
  key: "VERSION",
583
693
  get: function get() {
@@ -599,51 +709,58 @@
599
709
  */
600
710
 
601
711
 
602
- $(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) {
603
- var _this10 = this;
604
-
605
- var target;
606
- var selector = Util.getSelectorFromElement(this);
607
-
608
- if (selector) {
609
- target = document.querySelector(selector);
610
- }
712
+ EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
713
+ var _this11 = this;
611
714
 
612
- var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());
715
+ var target = getElementFromSelector(this);
613
716
 
614
717
  if (this.tagName === 'A' || this.tagName === 'AREA') {
615
718
  event.preventDefault();
616
719
  }
617
720
 
618
- var $target = $(target).one(Event.SHOW, function (showEvent) {
619
- if (showEvent.isDefaultPrevented()) {
620
- // Only register focus restorer if modal will actually get shown
721
+ EventHandler.one(target, EVENT_SHOW, function (showEvent) {
722
+ if (showEvent.defaultPrevented) {
723
+ // only register focus restorer if modal will actually get shown
621
724
  return;
622
725
  }
623
726
 
624
- $target.one(Event.HIDDEN, function () {
625
- if ($(_this10).is(':visible')) {
626
- _this10.focus();
727
+ EventHandler.one(target, EVENT_HIDDEN, function () {
728
+ if (isVisible(_this11)) {
729
+ _this11.focus();
627
730
  }
628
731
  });
629
732
  });
733
+ var data = Data.getData(target, DATA_KEY);
630
734
 
631
- Modal._jQueryInterface.call($(target), config, this);
735
+ if (!data) {
736
+ var config = _objectSpread(_objectSpread({}, Manipulator.getDataAttributes(target)), Manipulator.getDataAttributes(this));
737
+
738
+ data = new Modal(target, config);
739
+ }
740
+
741
+ data.show(this);
632
742
  });
743
+ var $ = getjQuery();
633
744
  /**
634
745
  * ------------------------------------------------------------------------
635
746
  * jQuery
636
747
  * ------------------------------------------------------------------------
748
+ * add .modal to jQuery only if jQuery is present
637
749
  */
638
750
 
639
- $.fn[NAME] = Modal._jQueryInterface;
640
- $.fn[NAME].Constructor = Modal;
751
+ /* istanbul ignore if */
641
752
 
642
- $.fn[NAME].noConflict = function () {
643
- $.fn[NAME] = JQUERY_NO_CONFLICT;
644
- return Modal._jQueryInterface;
645
- };
753
+ if ($) {
754
+ var JQUERY_NO_CONFLICT = $.fn[NAME];
755
+ $.fn[NAME] = Modal.jQueryInterface;
756
+ $.fn[NAME].Constructor = Modal;
757
+
758
+ $.fn[NAME].noConflict = function () {
759
+ $.fn[NAME] = JQUERY_NO_CONFLICT;
760
+ return Modal.jQueryInterface;
761
+ };
762
+ }
646
763
 
647
764
  return Modal;
648
765
 
649
- }));
766
+ })));