bootstrap 4.6.0 → 5.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -1
  3. data/README.md +7 -4
  4. data/assets/javascripts/bootstrap-global-this-define.js +6 -0
  5. data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
  6. data/assets/javascripts/bootstrap-sprockets.js +14 -8
  7. data/assets/javascripts/bootstrap.js +2152 -1633
  8. data/assets/javascripts/bootstrap.min.js +2 -2
  9. data/assets/javascripts/bootstrap/alert.js +179 -64
  10. data/assets/javascripts/bootstrap/base-component.js +75 -0
  11. data/assets/javascripts/bootstrap/button.js +94 -143
  12. data/assets/javascripts/bootstrap/carousel.js +386 -202
  13. data/assets/javascripts/bootstrap/collapse.js +349 -132
  14. data/assets/javascripts/bootstrap/dom/data.js +81 -0
  15. data/assets/javascripts/bootstrap/dom/event-handler.js +310 -0
  16. data/assets/javascripts/bootstrap/dom/manipulator.js +86 -0
  17. data/assets/javascripts/bootstrap/dom/selector-engine.js +93 -0
  18. data/assets/javascripts/bootstrap/dropdown.js +387 -224
  19. data/assets/javascripts/bootstrap/modal.js +391 -220
  20. data/assets/javascripts/bootstrap/popover.js +94 -49
  21. data/assets/javascripts/bootstrap/scrollspy.js +212 -80
  22. data/assets/javascripts/bootstrap/tab.js +198 -79
  23. data/assets/javascripts/bootstrap/toast.js +211 -78
  24. data/assets/javascripts/bootstrap/tooltip.js +558 -300
  25. data/assets/stylesheets/_bootstrap-grid.scss +51 -16
  26. data/assets/stylesheets/_bootstrap-reboot.scss +4 -1
  27. data/assets/stylesheets/_bootstrap.scss +15 -8
  28. data/assets/stylesheets/bootstrap/_accordion.scss +126 -0
  29. data/assets/stylesheets/bootstrap/_alert.scss +15 -10
  30. data/assets/stylesheets/bootstrap/_badge.scss +2 -27
  31. data/assets/stylesheets/bootstrap/_breadcrumb.scss +3 -17
  32. data/assets/stylesheets/bootstrap/_button-group.scss +21 -45
  33. data/assets/stylesheets/bootstrap/_buttons.scss +27 -60
  34. data/assets/stylesheets/bootstrap/_card.scss +21 -92
  35. data/assets/stylesheets/bootstrap/_carousel.scss +65 -33
  36. data/assets/stylesheets/bootstrap/_close.scss +30 -30
  37. data/assets/stylesheets/bootstrap/_containers.scss +41 -0
  38. data/assets/stylesheets/bootstrap/_dropdown.scss +95 -38
  39. data/assets/stylesheets/bootstrap/_forms.scss +9 -347
  40. data/assets/stylesheets/bootstrap/_functions.scss +84 -23
  41. data/assets/stylesheets/bootstrap/_grid.scss +3 -54
  42. data/assets/stylesheets/bootstrap/_helpers.scss +7 -0
  43. data/assets/stylesheets/bootstrap/_list-group.scss +17 -8
  44. data/assets/stylesheets/bootstrap/_mixins.scss +7 -13
  45. data/assets/stylesheets/bootstrap/_modal.scss +41 -46
  46. data/assets/stylesheets/bootstrap/_nav.scss +16 -4
  47. data/assets/stylesheets/bootstrap/_navbar.scss +43 -71
  48. data/assets/stylesheets/bootstrap/_pagination.scss +10 -20
  49. data/assets/stylesheets/bootstrap/_popover.scss +15 -27
  50. data/assets/stylesheets/bootstrap/_progress.scss +2 -4
  51. data/assets/stylesheets/bootstrap/_reboot.scss +314 -163
  52. data/assets/stylesheets/bootstrap/_root.scss +5 -8
  53. data/assets/stylesheets/bootstrap/_spinners.scss +5 -5
  54. data/assets/stylesheets/bootstrap/_tables.scss +79 -114
  55. data/assets/stylesheets/bootstrap/_toasts.scss +20 -15
  56. data/assets/stylesheets/bootstrap/_tooltip.scss +17 -17
  57. data/assets/stylesheets/bootstrap/_transitions.scss +0 -1
  58. data/assets/stylesheets/bootstrap/_type.scss +38 -59
  59. data/assets/stylesheets/bootstrap/_utilities.scss +566 -18
  60. data/assets/stylesheets/bootstrap/_variables.scss +673 -463
  61. data/assets/stylesheets/bootstrap/bootstrap-utilities.scss +18 -0
  62. data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +61 -0
  63. data/assets/stylesheets/bootstrap/forms/_form-check.scss +152 -0
  64. data/assets/stylesheets/bootstrap/forms/_form-control.scss +223 -0
  65. data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
  66. data/assets/stylesheets/bootstrap/forms/_form-select.scss +67 -0
  67. data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
  68. data/assets/stylesheets/bootstrap/forms/_input-group.scss +121 -0
  69. data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
  70. data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
  71. data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
  72. data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +12 -0
  73. data/assets/stylesheets/bootstrap/helpers/_position.scss +30 -0
  74. data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
  75. data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
  76. data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
  77. data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
  78. data/assets/stylesheets/bootstrap/mixins/_alert.scss +1 -5
  79. data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +8 -8
  80. data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
  81. data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +14 -10
  82. data/assets/stylesheets/bootstrap/mixins/_buttons.scss +65 -47
  83. data/assets/stylesheets/bootstrap/mixins/_caret.scss +8 -8
  84. data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
  85. data/assets/stylesheets/bootstrap/mixins/_container.scss +9 -0
  86. data/assets/stylesheets/bootstrap/mixins/_forms.scss +27 -88
  87. data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
  88. data/assets/stylesheets/bootstrap/mixins/_grid.scss +83 -32
  89. data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
  90. data/assets/stylesheets/bootstrap/mixins/_list-group.scss +3 -2
  91. data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
  92. data/assets/stylesheets/bootstrap/mixins/_pagination.scss +15 -8
  93. data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
  94. data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +21 -0
  95. data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
  96. data/assets/stylesheets/bootstrap/mixins/_utilities.scss +68 -0
  97. data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +29 -0
  98. data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
  99. data/assets/stylesheets/bootstrap/vendor/_rfs.scss +234 -126
  100. data/bootstrap.gemspec +1 -3
  101. data/lib/bootstrap/version.rb +2 -2
  102. data/tasks/updater/js.rb +20 -5
  103. data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
  104. data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
  105. data/test/dummy_rails/app/views/pages/root.html +89 -0
  106. data/test/dummy_rails/config/application.rb +0 -3
  107. data/test/gemfiles/rails_6_1.gemfile +7 -0
  108. metadata +44 -75
  109. data/assets/javascripts/bootstrap/util.js +0 -192
  110. data/assets/stylesheets/bootstrap/_code.scss +0 -48
  111. data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
  112. data/assets/stylesheets/bootstrap/_input-group.scss +0 -208
  113. data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
  114. data/assets/stylesheets/bootstrap/_media.scss +0 -8
  115. data/assets/stylesheets/bootstrap/_print.scss +0 -141
  116. data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
  117. data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
  118. data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
  119. data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
  120. data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
  121. data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
  122. data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
  123. data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
  124. data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
  125. data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
  126. data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
  127. data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
  128. data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
  129. data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
  130. data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
  131. data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
  132. data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
  133. data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
  134. data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
  135. data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
  136. data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
  137. data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
  138. data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
  139. data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
  140. data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
  141. data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
  142. data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
  143. data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
  144. data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
  145. data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
@@ -1,18 +1,21 @@
1
1
  /*!
2
- * Bootstrap modal.js v4.6.0 (https://getbootstrap.com/)
2
+ * Bootstrap modal.js v5.0.0-beta2 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2021 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'], 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('./dom/data.js'), require('./dom/event-handler.js'), require('./dom/manipulator.js'), require('./dom/selector-engine.js'), require('./base-component.js')) :
8
+ typeof define === 'function' && define.amd ? define(['./dom/data', './dom/event-handler', './dom/manipulator', './dom/selector-engine', './base-component'], factory) :
9
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Modal = factory(global.Data, global.EventHandler, global.Manipulator, global.SelectorEngine, global.Base));
10
+ }(this, (function (Data, EventHandler, Manipulator, SelectorEngine, BaseComponent) { 'use strict';
11
11
 
12
12
  function _interopDefaultLegacy (e) { return 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
+ var Data__default = /*#__PURE__*/_interopDefaultLegacy(Data);
15
+ var EventHandler__default = /*#__PURE__*/_interopDefaultLegacy(EventHandler);
16
+ var Manipulator__default = /*#__PURE__*/_interopDefaultLegacy(Manipulator);
17
+ var SelectorEngine__default = /*#__PURE__*/_interopDefaultLegacy(SelectorEngine);
18
+ var BaseComponent__default = /*#__PURE__*/_interopDefaultLegacy(BaseComponent);
16
19
 
17
20
  function _defineProperties(target, props) {
18
21
  for (var i = 0; i < props.length; i++) {
@@ -48,6 +51,186 @@
48
51
  return _extends.apply(this, arguments);
49
52
  }
50
53
 
54
+ function _inheritsLoose(subClass, superClass) {
55
+ subClass.prototype = Object.create(superClass.prototype);
56
+ subClass.prototype.constructor = subClass;
57
+
58
+ _setPrototypeOf(subClass, superClass);
59
+ }
60
+
61
+ function _setPrototypeOf(o, p) {
62
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
63
+ o.__proto__ = p;
64
+ return o;
65
+ };
66
+
67
+ return _setPrototypeOf(o, p);
68
+ }
69
+
70
+ /**
71
+ * --------------------------------------------------------------------------
72
+ * Bootstrap (v5.0.0-beta2): util/index.js
73
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
74
+ * --------------------------------------------------------------------------
75
+ */
76
+ var MILLISECONDS_MULTIPLIER = 1000;
77
+ var TRANSITION_END = 'transitionend'; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
78
+
79
+ var toType = function toType(obj) {
80
+ if (obj === null || obj === undefined) {
81
+ return "" + obj;
82
+ }
83
+
84
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
85
+ };
86
+
87
+ var getSelector = function getSelector(element) {
88
+ var selector = element.getAttribute('data-bs-target');
89
+
90
+ if (!selector || selector === '#') {
91
+ var hrefAttr = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes,
92
+ // so everything starting with `#` or `.`. If a "real" URL is used as the selector,
93
+ // `document.querySelector` will rightfully complain it is invalid.
94
+ // See https://github.com/twbs/bootstrap/issues/32273
95
+
96
+ if (!hrefAttr || !hrefAttr.includes('#') && !hrefAttr.startsWith('.')) {
97
+ return null;
98
+ } // Just in case some CMS puts out a full URL with the anchor appended
99
+
100
+
101
+ if (hrefAttr.includes('#') && !hrefAttr.startsWith('#')) {
102
+ hrefAttr = '#' + hrefAttr.split('#')[1];
103
+ }
104
+
105
+ selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : null;
106
+ }
107
+
108
+ return selector;
109
+ };
110
+
111
+ var getElementFromSelector = function getElementFromSelector(element) {
112
+ var selector = getSelector(element);
113
+ return selector ? document.querySelector(selector) : null;
114
+ };
115
+
116
+ var getTransitionDurationFromElement = function getTransitionDurationFromElement(element) {
117
+ if (!element) {
118
+ return 0;
119
+ } // Get transition-duration of the element
120
+
121
+
122
+ var _window$getComputedSt = window.getComputedStyle(element),
123
+ transitionDuration = _window$getComputedSt.transitionDuration,
124
+ transitionDelay = _window$getComputedSt.transitionDelay;
125
+
126
+ var floatTransitionDuration = Number.parseFloat(transitionDuration);
127
+ var floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
128
+
129
+ if (!floatTransitionDuration && !floatTransitionDelay) {
130
+ return 0;
131
+ } // If multiple durations are defined, take the first
132
+
133
+
134
+ transitionDuration = transitionDuration.split(',')[0];
135
+ transitionDelay = transitionDelay.split(',')[0];
136
+ return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
137
+ };
138
+
139
+ var triggerTransitionEnd = function triggerTransitionEnd(element) {
140
+ element.dispatchEvent(new Event(TRANSITION_END));
141
+ };
142
+
143
+ var isElement = function isElement(obj) {
144
+ return (obj[0] || obj).nodeType;
145
+ };
146
+
147
+ var emulateTransitionEnd = function emulateTransitionEnd(element, duration) {
148
+ var called = false;
149
+ var durationPadding = 5;
150
+ var emulatedDuration = duration + durationPadding;
151
+
152
+ function listener() {
153
+ called = true;
154
+ element.removeEventListener(TRANSITION_END, listener);
155
+ }
156
+
157
+ element.addEventListener(TRANSITION_END, listener);
158
+ setTimeout(function () {
159
+ if (!called) {
160
+ triggerTransitionEnd(element);
161
+ }
162
+ }, emulatedDuration);
163
+ };
164
+
165
+ var typeCheckConfig = function typeCheckConfig(componentName, config, configTypes) {
166
+ Object.keys(configTypes).forEach(function (property) {
167
+ var expectedTypes = configTypes[property];
168
+ var value = config[property];
169
+ var valueType = value && isElement(value) ? 'element' : toType(value);
170
+
171
+ if (!new RegExp(expectedTypes).test(valueType)) {
172
+ throw new TypeError(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
173
+ }
174
+ });
175
+ };
176
+
177
+ var isVisible = function isVisible(element) {
178
+ if (!element) {
179
+ return false;
180
+ }
181
+
182
+ if (element.style && element.parentNode && element.parentNode.style) {
183
+ var elementStyle = getComputedStyle(element);
184
+ var parentNodeStyle = getComputedStyle(element.parentNode);
185
+ return elementStyle.display !== 'none' && parentNodeStyle.display !== 'none' && elementStyle.visibility !== 'hidden';
186
+ }
187
+
188
+ return false;
189
+ };
190
+
191
+ var reflow = function reflow(element) {
192
+ return element.offsetHeight;
193
+ };
194
+
195
+ var getjQuery = function getjQuery() {
196
+ var _window = window,
197
+ jQuery = _window.jQuery;
198
+
199
+ if (jQuery && !document.body.hasAttribute('data-bs-no-jquery')) {
200
+ return jQuery;
201
+ }
202
+
203
+ return null;
204
+ };
205
+
206
+ var onDOMContentLoaded = function onDOMContentLoaded(callback) {
207
+ if (document.readyState === 'loading') {
208
+ document.addEventListener('DOMContentLoaded', callback);
209
+ } else {
210
+ callback();
211
+ }
212
+ };
213
+
214
+ var isRTL = document.documentElement.dir === 'rtl';
215
+
216
+ var defineJQueryPlugin = function defineJQueryPlugin(name, plugin) {
217
+ onDOMContentLoaded(function () {
218
+ var $ = getjQuery();
219
+ /* istanbul ignore if */
220
+
221
+ if ($) {
222
+ var JQUERY_NO_CONFLICT = $.fn[name];
223
+ $.fn[name] = plugin.jQueryInterface;
224
+ $.fn[name].Constructor = plugin;
225
+
226
+ $.fn[name].noConflict = function () {
227
+ $.fn[name] = JQUERY_NO_CONFLICT;
228
+ return plugin.jQueryInterface;
229
+ };
230
+ }
231
+ });
232
+ };
233
+
51
234
  /**
52
235
  * ------------------------------------------------------------------------
53
236
  * Constants
@@ -55,24 +238,19 @@
55
238
  */
56
239
 
57
240
  var NAME = 'modal';
58
- var VERSION = '4.6.0';
59
241
  var DATA_KEY = 'bs.modal';
60
242
  var EVENT_KEY = "." + DATA_KEY;
61
243
  var DATA_API_KEY = '.data-api';
62
- var JQUERY_NO_CONFLICT = $__default['default'].fn[NAME];
63
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
64
-
244
+ var ESCAPE_KEY = 'Escape';
65
245
  var Default = {
66
246
  backdrop: true,
67
247
  keyboard: true,
68
- focus: true,
69
- show: true
248
+ focus: true
70
249
  };
71
250
  var DefaultType = {
72
251
  backdrop: '(boolean|string)',
73
252
  keyboard: 'boolean',
74
- focus: 'boolean',
75
- show: 'boolean'
253
+ focus: 'boolean'
76
254
  };
77
255
  var EVENT_HIDE = "hide" + EVENT_KEY;
78
256
  var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY;
@@ -86,7 +264,6 @@
86
264
  var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY;
87
265
  var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY;
88
266
  var EVENT_CLICK_DATA_API = "click" + EVENT_KEY + DATA_API_KEY;
89
- var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
90
267
  var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
91
268
  var CLASS_NAME_BACKDROP = 'modal-backdrop';
92
269
  var CLASS_NAME_OPEN = 'modal-open';
@@ -95,8 +272,8 @@
95
272
  var CLASS_NAME_STATIC = 'modal-static';
96
273
  var SELECTOR_DIALOG = '.modal-dialog';
97
274
  var SELECTOR_MODAL_BODY = '.modal-body';
98
- var SELECTOR_DATA_TOGGLE = '[data-toggle="modal"]';
99
- var SELECTOR_DATA_DISMISS = '[data-dismiss="modal"]';
275
+ var SELECTOR_DATA_TOGGLE = '[data-bs-toggle="modal"]';
276
+ var SELECTOR_DATA_DISMISS = '[data-bs-dismiss="modal"]';
100
277
  var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
101
278
  var SELECTOR_STICKY_CONTENT = '.sticky-top';
102
279
  /**
@@ -105,17 +282,22 @@
105
282
  * ------------------------------------------------------------------------
106
283
  */
107
284
 
108
- var Modal = /*#__PURE__*/function () {
285
+ var Modal = /*#__PURE__*/function (_BaseComponent) {
286
+ _inheritsLoose(Modal, _BaseComponent);
287
+
109
288
  function Modal(element, config) {
110
- this._config = this._getConfig(config);
111
- this._element = element;
112
- this._dialog = element.querySelector(SELECTOR_DIALOG);
113
- this._backdrop = null;
114
- this._isShown = false;
115
- this._isBodyOverflowing = false;
116
- this._ignoreBackdropClick = false;
117
- this._isTransitioning = false;
118
- this._scrollbarWidth = 0;
289
+ var _this;
290
+
291
+ _this = _BaseComponent.call(this, element) || this;
292
+ _this._config = _this._getConfig(config);
293
+ _this._dialog = SelectorEngine__default['default'].findOne(SELECTOR_DIALOG, element);
294
+ _this._backdrop = null;
295
+ _this._isShown = false;
296
+ _this._isBodyOverflowing = false;
297
+ _this._ignoreBackdropClick = false;
298
+ _this._isTransitioning = false;
299
+ _this._scrollbarWidth = 0;
300
+ return _this;
119
301
  } // Getters
120
302
 
121
303
 
@@ -127,22 +309,21 @@
127
309
  };
128
310
 
129
311
  _proto.show = function show(relatedTarget) {
130
- var _this = this;
312
+ var _this2 = this;
131
313
 
132
314
  if (this._isShown || this._isTransitioning) {
133
315
  return;
134
316
  }
135
317
 
136
- if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
318
+ if (this._element.classList.contains(CLASS_NAME_FADE)) {
137
319
  this._isTransitioning = true;
138
320
  }
139
321
 
140
- var showEvent = $__default['default'].Event(EVENT_SHOW, {
322
+ var showEvent = EventHandler__default['default'].trigger(this._element, EVENT_SHOW, {
141
323
  relatedTarget: relatedTarget
142
324
  });
143
- $__default['default'](this._element).trigger(showEvent);
144
325
 
145
- if (this._isShown || showEvent.isDefaultPrevented()) {
326
+ if (this._isShown || showEvent.defaultPrevented) {
146
327
  return;
147
328
  }
148
329
 
@@ -158,24 +339,24 @@
158
339
 
159
340
  this._setResizeEvent();
160
341
 
161
- $__default['default'](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
162
- return _this.hide(event);
342
+ EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function (event) {
343
+ return _this2.hide(event);
163
344
  });
164
- $__default['default'](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
165
- $__default['default'](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
166
- if ($__default['default'](event.target).is(_this._element)) {
167
- _this._ignoreBackdropClick = true;
345
+ EventHandler__default['default'].on(this._dialog, EVENT_MOUSEDOWN_DISMISS, function () {
346
+ EventHandler__default['default'].one(_this2._element, EVENT_MOUSEUP_DISMISS, function (event) {
347
+ if (event.target === _this2._element) {
348
+ _this2._ignoreBackdropClick = true;
168
349
  }
169
350
  });
170
351
  });
171
352
 
172
353
  this._showBackdrop(function () {
173
- return _this._showElement(relatedTarget);
354
+ return _this2._showElement(relatedTarget);
174
355
  });
175
356
  };
176
357
 
177
358
  _proto.hide = function hide(event) {
178
- var _this2 = this;
359
+ var _this3 = this;
179
360
 
180
361
  if (event) {
181
362
  event.preventDefault();
@@ -185,15 +366,15 @@
185
366
  return;
186
367
  }
187
368
 
188
- var hideEvent = $__default['default'].Event(EVENT_HIDE);
189
- $__default['default'](this._element).trigger(hideEvent);
369
+ var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE);
190
370
 
191
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
371
+ if (hideEvent.defaultPrevented) {
192
372
  return;
193
373
  }
194
374
 
195
375
  this._isShown = false;
196
- var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
376
+
377
+ var transition = this._element.classList.contains(CLASS_NAME_FADE);
197
378
 
198
379
  if (transition) {
199
380
  this._isTransitioning = true;
@@ -203,16 +384,19 @@
203
384
 
204
385
  this._setResizeEvent();
205
386
 
206
- $__default['default'](document).off(EVENT_FOCUSIN);
207
- $__default['default'](this._element).removeClass(CLASS_NAME_SHOW);
208
- $__default['default'](this._element).off(EVENT_CLICK_DISMISS);
209
- $__default['default'](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
387
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN);
388
+
389
+ this._element.classList.remove(CLASS_NAME_SHOW);
390
+
391
+ EventHandler__default['default'].off(this._element, EVENT_CLICK_DISMISS);
392
+ EventHandler__default['default'].off(this._dialog, EVENT_MOUSEDOWN_DISMISS);
210
393
 
211
394
  if (transition) {
212
- var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._element);
213
- $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function (event) {
214
- return _this2._hideModal(event);
215
- }).emulateTransitionEnd(transitionDuration);
395
+ var transitionDuration = getTransitionDurationFromElement(this._element);
396
+ EventHandler__default['default'].one(this._element, 'transitionend', function (event) {
397
+ return _this3._hideModal(event);
398
+ });
399
+ emulateTransitionEnd(this._element, transitionDuration);
216
400
  } else {
217
401
  this._hideModal();
218
402
  }
@@ -220,18 +404,19 @@
220
404
 
221
405
  _proto.dispose = function dispose() {
222
406
  [window, this._element, this._dialog].forEach(function (htmlElement) {
223
- return $__default['default'](htmlElement).off(EVENT_KEY);
407
+ return EventHandler__default['default'].off(htmlElement, EVENT_KEY);
224
408
  });
409
+
410
+ _BaseComponent.prototype.dispose.call(this);
225
411
  /**
226
412
  * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
227
413
  * Do not move `document` in `htmlElements` array
228
414
  * It will remove `EVENT_CLICK_DATA_API` event that should remain
229
415
  */
230
416
 
231
- $__default['default'](document).off(EVENT_FOCUSIN);
232
- $__default['default'].removeData(this._element, DATA_KEY);
417
+
418
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN);
233
419
  this._config = null;
234
- this._element = null;
235
420
  this._dialog = null;
236
421
  this._backdrop = null;
237
422
  this._isShown = null;
@@ -248,48 +433,16 @@
248
433
 
249
434
  _proto._getConfig = function _getConfig(config) {
250
435
  config = _extends({}, Default, config);
251
- Util__default['default'].typeCheckConfig(NAME, config, DefaultType);
436
+ typeCheckConfig(NAME, config, DefaultType);
252
437
  return config;
253
438
  };
254
439
 
255
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
256
- var _this3 = this;
257
-
258
- var hideEventPrevented = $__default['default'].Event(EVENT_HIDE_PREVENTED);
259
- $__default['default'](this._element).trigger(hideEventPrevented);
260
-
261
- if (hideEventPrevented.isDefaultPrevented()) {
262
- return;
263
- }
264
-
265
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
266
-
267
- if (!isModalOverflowing) {
268
- this._element.style.overflowY = 'hidden';
269
- }
270
-
271
- this._element.classList.add(CLASS_NAME_STATIC);
272
-
273
- var modalTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
274
- $__default['default'](this._element).off(Util__default['default'].TRANSITION_END);
275
- $__default['default'](this._element).one(Util__default['default'].TRANSITION_END, function () {
276
- _this3._element.classList.remove(CLASS_NAME_STATIC);
277
-
278
- if (!isModalOverflowing) {
279
- $__default['default'](_this3._element).one(Util__default['default'].TRANSITION_END, function () {
280
- _this3._element.style.overflowY = '';
281
- }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
282
- }
283
- }).emulateTransitionEnd(modalTransitionDuration);
284
-
285
- this._element.focus();
286
- };
287
-
288
440
  _proto._showElement = function _showElement(relatedTarget) {
289
441
  var _this4 = this;
290
442
 
291
- var transition = $__default['default'](this._element).hasClass(CLASS_NAME_FADE);
292
- var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
443
+ var transition = this._element.classList.contains(CLASS_NAME_FADE);
444
+
445
+ var modalBody = SelectorEngine__default['default'].findOne(SELECTOR_MODAL_BODY, this._dialog);
293
446
 
294
447
  if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
295
448
  // Don't move modal's DOM position
@@ -304,38 +457,37 @@
304
457
 
305
458
  this._element.setAttribute('role', 'dialog');
306
459
 
307
- if ($__default['default'](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
460
+ this._element.scrollTop = 0;
461
+
462
+ if (modalBody) {
308
463
  modalBody.scrollTop = 0;
309
- } else {
310
- this._element.scrollTop = 0;
311
464
  }
312
465
 
313
466
  if (transition) {
314
- Util__default['default'].reflow(this._element);
467
+ reflow(this._element);
315
468
  }
316
469
 
317
- $__default['default'](this._element).addClass(CLASS_NAME_SHOW);
470
+ this._element.classList.add(CLASS_NAME_SHOW);
318
471
 
319
472
  if (this._config.focus) {
320
473
  this._enforceFocus();
321
474
  }
322
475
 
323
- var shownEvent = $__default['default'].Event(EVENT_SHOWN, {
324
- relatedTarget: relatedTarget
325
- });
326
-
327
476
  var transitionComplete = function transitionComplete() {
328
477
  if (_this4._config.focus) {
329
478
  _this4._element.focus();
330
479
  }
331
480
 
332
481
  _this4._isTransitioning = false;
333
- $__default['default'](_this4._element).trigger(shownEvent);
482
+ EventHandler__default['default'].trigger(_this4._element, EVENT_SHOWN, {
483
+ relatedTarget: relatedTarget
484
+ });
334
485
  };
335
486
 
336
487
  if (transition) {
337
- var transitionDuration = Util__default['default'].getTransitionDurationFromElement(this._dialog);
338
- $__default['default'](this._dialog).one(Util__default['default'].TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
488
+ var transitionDuration = getTransitionDurationFromElement(this._dialog);
489
+ EventHandler__default['default'].one(this._dialog, 'transitionend', transitionComplete);
490
+ emulateTransitionEnd(this._dialog, transitionDuration);
339
491
  } else {
340
492
  transitionComplete();
341
493
  }
@@ -344,9 +496,10 @@
344
496
  _proto._enforceFocus = function _enforceFocus() {
345
497
  var _this5 = this;
346
498
 
347
- $__default['default'](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
348
- .on(EVENT_FOCUSIN, function (event) {
349
- if (document !== event.target && _this5._element !== event.target && $__default['default'](_this5._element).has(event.target).length === 0) {
499
+ EventHandler__default['default'].off(document, EVENT_FOCUSIN); // guard against infinite focus loop
500
+
501
+ EventHandler__default['default'].on(document, EVENT_FOCUSIN, function (event) {
502
+ if (document !== event.target && _this5._element !== event.target && !_this5._element.contains(event.target)) {
350
503
  _this5._element.focus();
351
504
  }
352
505
  });
@@ -356,17 +509,17 @@
356
509
  var _this6 = this;
357
510
 
358
511
  if (this._isShown) {
359
- $__default['default'](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
360
- if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
512
+ EventHandler__default['default'].on(this._element, EVENT_KEYDOWN_DISMISS, function (event) {
513
+ if (_this6._config.keyboard && event.key === ESCAPE_KEY) {
361
514
  event.preventDefault();
362
515
 
363
516
  _this6.hide();
364
- } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
517
+ } else if (!_this6._config.keyboard && event.key === ESCAPE_KEY) {
365
518
  _this6._triggerBackdropTransition();
366
519
  }
367
520
  });
368
- } else if (!this._isShown) {
369
- $__default['default'](this._element).off(EVENT_KEYDOWN_DISMISS);
521
+ } else {
522
+ EventHandler__default['default'].off(this._element, EVENT_KEYDOWN_DISMISS);
370
523
  }
371
524
  };
372
525
 
@@ -374,11 +527,11 @@
374
527
  var _this7 = this;
375
528
 
376
529
  if (this._isShown) {
377
- $__default['default'](window).on(EVENT_RESIZE, function (event) {
378
- return _this7.handleUpdate(event);
530
+ EventHandler__default['default'].on(window, EVENT_RESIZE, function () {
531
+ return _this7._adjustDialog();
379
532
  });
380
533
  } else {
381
- $__default['default'](window).off(EVENT_RESIZE);
534
+ EventHandler__default['default'].off(window, EVENT_RESIZE);
382
535
  }
383
536
  };
384
537
 
@@ -396,27 +549,26 @@
396
549
  this._isTransitioning = false;
397
550
 
398
551
  this._showBackdrop(function () {
399
- $__default['default'](document.body).removeClass(CLASS_NAME_OPEN);
552
+ document.body.classList.remove(CLASS_NAME_OPEN);
400
553
 
401
554
  _this8._resetAdjustments();
402
555
 
403
556
  _this8._resetScrollbar();
404
557
 
405
- $__default['default'](_this8._element).trigger(EVENT_HIDDEN);
558
+ EventHandler__default['default'].trigger(_this8._element, EVENT_HIDDEN);
406
559
  });
407
560
  };
408
561
 
409
562
  _proto._removeBackdrop = function _removeBackdrop() {
410
- if (this._backdrop) {
411
- $__default['default'](this._backdrop).remove();
412
- this._backdrop = null;
413
- }
563
+ this._backdrop.parentNode.removeChild(this._backdrop);
564
+
565
+ this._backdrop = null;
414
566
  };
415
567
 
416
568
  _proto._showBackdrop = function _showBackdrop(callback) {
417
569
  var _this9 = this;
418
570
 
419
- var animate = $__default['default'](this._element).hasClass(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
571
+ var animate = this._element.classList.contains(CLASS_NAME_FADE) ? CLASS_NAME_FADE : '';
420
572
 
421
573
  if (this._isShown && this._config.backdrop) {
422
574
  this._backdrop = document.createElement('div');
@@ -426,8 +578,8 @@
426
578
  this._backdrop.classList.add(animate);
427
579
  }
428
580
 
429
- $__default['default'](this._backdrop).appendTo(document.body);
430
- $__default['default'](this._element).on(EVENT_CLICK_DISMISS, function (event) {
581
+ document.body.appendChild(this._backdrop);
582
+ EventHandler__default['default'].on(this._element, EVENT_CLICK_DISMISS, function (event) {
431
583
  if (_this9._ignoreBackdropClick) {
432
584
  _this9._ignoreBackdropClick = false;
433
585
  return;
@@ -445,57 +597,86 @@
445
597
  });
446
598
 
447
599
  if (animate) {
448
- Util__default['default'].reflow(this._backdrop);
600
+ reflow(this._backdrop);
449
601
  }
450
602
 
451
- $__default['default'](this._backdrop).addClass(CLASS_NAME_SHOW);
452
-
453
- if (!callback) {
454
- return;
455
- }
603
+ this._backdrop.classList.add(CLASS_NAME_SHOW);
456
604
 
457
605
  if (!animate) {
458
606
  callback();
459
607
  return;
460
608
  }
461
609
 
462
- var backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
463
- $__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
610
+ var backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
611
+ EventHandler__default['default'].one(this._backdrop, 'transitionend', callback);
612
+ emulateTransitionEnd(this._backdrop, backdropTransitionDuration);
464
613
  } else if (!this._isShown && this._backdrop) {
465
- $__default['default'](this._backdrop).removeClass(CLASS_NAME_SHOW);
614
+ this._backdrop.classList.remove(CLASS_NAME_SHOW);
466
615
 
467
616
  var callbackRemove = function callbackRemove() {
468
617
  _this9._removeBackdrop();
469
618
 
470
- if (callback) {
471
- callback();
472
- }
619
+ callback();
473
620
  };
474
621
 
475
- if ($__default['default'](this._element).hasClass(CLASS_NAME_FADE)) {
476
- var _backdropTransitionDuration = Util__default['default'].getTransitionDurationFromElement(this._backdrop);
622
+ if (this._element.classList.contains(CLASS_NAME_FADE)) {
623
+ var _backdropTransitionDuration = getTransitionDurationFromElement(this._backdrop);
477
624
 
478
- $__default['default'](this._backdrop).one(Util__default['default'].TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
625
+ EventHandler__default['default'].one(this._backdrop, 'transitionend', callbackRemove);
626
+ emulateTransitionEnd(this._backdrop, _backdropTransitionDuration);
479
627
  } else {
480
628
  callbackRemove();
481
629
  }
482
- } else if (callback) {
630
+ } else {
483
631
  callback();
484
632
  }
633
+ };
634
+
635
+ _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
636
+ var _this10 = this;
637
+
638
+ var hideEvent = EventHandler__default['default'].trigger(this._element, EVENT_HIDE_PREVENTED);
639
+
640
+ if (hideEvent.defaultPrevented) {
641
+ return;
642
+ }
643
+
644
+ var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
645
+
646
+ if (!isModalOverflowing) {
647
+ this._element.style.overflowY = 'hidden';
648
+ }
649
+
650
+ this._element.classList.add(CLASS_NAME_STATIC);
651
+
652
+ var modalTransitionDuration = getTransitionDurationFromElement(this._dialog);
653
+ EventHandler__default['default'].off(this._element, 'transitionend');
654
+ EventHandler__default['default'].one(this._element, 'transitionend', function () {
655
+ _this10._element.classList.remove(CLASS_NAME_STATIC);
656
+
657
+ if (!isModalOverflowing) {
658
+ EventHandler__default['default'].one(_this10._element, 'transitionend', function () {
659
+ _this10._element.style.overflowY = '';
660
+ });
661
+ emulateTransitionEnd(_this10._element, modalTransitionDuration);
662
+ }
663
+ });
664
+ emulateTransitionEnd(this._element, modalTransitionDuration);
665
+
666
+ this._element.focus();
485
667
  } // ----------------------------------------------------------------------
486
668
  // the following methods are used to handle overflowing modals
487
- // todo (fat): these should probably be refactored out of modal.js
488
669
  // ----------------------------------------------------------------------
489
670
  ;
490
671
 
491
672
  _proto._adjustDialog = function _adjustDialog() {
492
673
  var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
493
674
 
494
- if (!this._isBodyOverflowing && isModalOverflowing) {
675
+ if (!this._isBodyOverflowing && isModalOverflowing && !isRTL || this._isBodyOverflowing && !isModalOverflowing && isRTL) {
495
676
  this._element.style.paddingLeft = this._scrollbarWidth + "px";
496
677
  }
497
678
 
498
- if (this._isBodyOverflowing && !isModalOverflowing) {
679
+ if (this._isBodyOverflowing && !isModalOverflowing && !isRTL || !this._isBodyOverflowing && isModalOverflowing && isRTL) {
499
680
  this._element.style.paddingRight = this._scrollbarWidth + "px";
500
681
  }
501
682
  };
@@ -512,55 +693,53 @@
512
693
  };
513
694
 
514
695
  _proto._setScrollbar = function _setScrollbar() {
515
- var _this10 = this;
696
+ var _this11 = this;
516
697
 
517
698
  if (this._isBodyOverflowing) {
518
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
519
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
520
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
521
- var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
522
-
523
- $__default['default'](fixedContent).each(function (index, element) {
524
- var actualPadding = element.style.paddingRight;
525
- var calculatedPadding = $__default['default'](element).css('padding-right');
526
- $__default['default'](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
527
- }); // Adjust sticky content margin
528
-
529
- $__default['default'](stickyContent).each(function (index, element) {
530
- var actualMargin = element.style.marginRight;
531
- var calculatedMargin = $__default['default'](element).css('margin-right');
532
- $__default['default'](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
533
- }); // Adjust body padding
534
-
535
- var actualPadding = document.body.style.paddingRight;
536
- var calculatedPadding = $__default['default'](document.body).css('padding-right');
537
- $__default['default'](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
699
+ this._setElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight', function (calculatedValue) {
700
+ return calculatedValue + _this11._scrollbarWidth;
701
+ });
702
+
703
+ this._setElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight', function (calculatedValue) {
704
+ return calculatedValue - _this11._scrollbarWidth;
705
+ });
706
+
707
+ this._setElementAttributes('body', 'paddingRight', function (calculatedValue) {
708
+ return calculatedValue + _this11._scrollbarWidth;
709
+ });
538
710
  }
539
711
 
540
- $__default['default'](document.body).addClass(CLASS_NAME_OPEN);
712
+ document.body.classList.add(CLASS_NAME_OPEN);
713
+ };
714
+
715
+ _proto._setElementAttributes = function _setElementAttributes(selector, styleProp, callback) {
716
+ SelectorEngine__default['default'].find(selector).forEach(function (element) {
717
+ var actualValue = element.style[styleProp];
718
+ var calculatedValue = window.getComputedStyle(element)[styleProp];
719
+ Manipulator__default['default'].setDataAttribute(element, styleProp, actualValue);
720
+ element.style[styleProp] = callback(Number.parseFloat(calculatedValue)) + 'px';
721
+ });
541
722
  };
542
723
 
543
724
  _proto._resetScrollbar = function _resetScrollbar() {
544
- // Restore fixed content padding
545
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
546
- $__default['default'](fixedContent).each(function (index, element) {
547
- var padding = $__default['default'](element).data('padding-right');
548
- $__default['default'](element).removeData('padding-right');
549
- element.style.paddingRight = padding ? padding : '';
550
- }); // Restore sticky content
551
-
552
- var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
553
- $__default['default'](elements).each(function (index, element) {
554
- var margin = $__default['default'](element).data('margin-right');
555
-
556
- if (typeof margin !== 'undefined') {
557
- $__default['default'](element).css('margin-right', margin).removeData('margin-right');
558
- }
559
- }); // Restore body padding
725
+ this._resetElementAttributes(SELECTOR_FIXED_CONTENT, 'paddingRight');
560
726
 
561
- var padding = $__default['default'](document.body).data('padding-right');
562
- $__default['default'](document.body).removeData('padding-right');
563
- document.body.style.paddingRight = padding ? padding : '';
727
+ this._resetElementAttributes(SELECTOR_STICKY_CONTENT, 'marginRight');
728
+
729
+ this._resetElementAttributes('body', 'paddingRight');
730
+ };
731
+
732
+ _proto._resetElementAttributes = function _resetElementAttributes(selector, styleProp) {
733
+ SelectorEngine__default['default'].find(selector).forEach(function (element) {
734
+ var value = Manipulator__default['default'].getDataAttribute(element, styleProp);
735
+
736
+ if (typeof value === 'undefined' && element === document.body) {
737
+ element.style[styleProp] = '';
738
+ } else {
739
+ Manipulator__default['default'].removeDataAttribute(element, styleProp);
740
+ element.style[styleProp] = value;
741
+ }
742
+ });
564
743
  };
565
744
 
566
745
  _proto._getScrollbarWidth = function _getScrollbarWidth() {
@@ -574,15 +753,14 @@
574
753
  } // Static
575
754
  ;
576
755
 
577
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
756
+ Modal.jQueryInterface = function jQueryInterface(config, relatedTarget) {
578
757
  return this.each(function () {
579
- var data = $__default['default'](this).data(DATA_KEY);
758
+ var data = Data__default['default'].getData(this, DATA_KEY);
580
759
 
581
- var _config = _extends({}, Default, $__default['default'](this).data(), typeof config === 'object' && config ? config : {});
760
+ var _config = _extends({}, Default, Manipulator__default['default'].getDataAttributes(this), typeof config === 'object' && config ? config : {});
582
761
 
583
762
  if (!data) {
584
763
  data = new Modal(this, _config);
585
- $__default['default'](this).data(DATA_KEY, data);
586
764
  }
587
765
 
588
766
  if (typeof config === 'string') {
@@ -591,26 +769,24 @@
591
769
  }
592
770
 
593
771
  data[config](relatedTarget);
594
- } else if (_config.show) {
595
- data.show(relatedTarget);
596
772
  }
597
773
  });
598
774
  };
599
775
 
600
776
  _createClass(Modal, null, [{
601
- key: "VERSION",
777
+ key: "Default",
602
778
  get: function get() {
603
- return VERSION;
779
+ return Default;
604
780
  }
605
781
  }, {
606
- key: "Default",
782
+ key: "DATA_KEY",
607
783
  get: function get() {
608
- return Default;
784
+ return DATA_KEY;
609
785
  }
610
786
  }]);
611
787
 
612
788
  return Modal;
613
- }();
789
+ }(BaseComponent__default['default']);
614
790
  /**
615
791
  * ------------------------------------------------------------------------
616
792
  * Data Api implementation
@@ -618,50 +794,45 @@
618
794
  */
619
795
 
620
796
 
621
- $__default['default'](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
622
- var _this11 = this;
623
-
624
- var target;
625
- var selector = Util__default['default'].getSelectorFromElement(this);
626
-
627
- if (selector) {
628
- target = document.querySelector(selector);
629
- }
797
+ EventHandler__default['default'].on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
798
+ var _this12 = this;
630
799
 
631
- var config = $__default['default'](target).data(DATA_KEY) ? 'toggle' : _extends({}, $__default['default'](target).data(), $__default['default'](this).data());
800
+ var target = getElementFromSelector(this);
632
801
 
633
802
  if (this.tagName === 'A' || this.tagName === 'AREA') {
634
803
  event.preventDefault();
635
804
  }
636
805
 
637
- var $target = $__default['default'](target).one(EVENT_SHOW, function (showEvent) {
638
- if (showEvent.isDefaultPrevented()) {
639
- // Only register focus restorer if modal will actually get shown
806
+ EventHandler__default['default'].one(target, EVENT_SHOW, function (showEvent) {
807
+ if (showEvent.defaultPrevented) {
808
+ // only register focus restorer if modal will actually get shown
640
809
  return;
641
810
  }
642
811
 
643
- $target.one(EVENT_HIDDEN, function () {
644
- if ($__default['default'](_this11).is(':visible')) {
645
- _this11.focus();
812
+ EventHandler__default['default'].one(target, EVENT_HIDDEN, function () {
813
+ if (isVisible(_this12)) {
814
+ _this12.focus();
646
815
  }
647
816
  });
648
817
  });
818
+ var data = Data__default['default'].getData(target, DATA_KEY);
649
819
 
650
- Modal._jQueryInterface.call($__default['default'](target), config, this);
820
+ if (!data) {
821
+ var config = _extends({}, Manipulator__default['default'].getDataAttributes(target), Manipulator__default['default'].getDataAttributes(this));
822
+
823
+ data = new Modal(target, config);
824
+ }
825
+
826
+ data.toggle(this);
651
827
  });
652
828
  /**
653
829
  * ------------------------------------------------------------------------
654
830
  * jQuery
655
831
  * ------------------------------------------------------------------------
832
+ * add .Modal to jQuery only if jQuery is present
656
833
  */
657
834
 
658
- $__default['default'].fn[NAME] = Modal._jQueryInterface;
659
- $__default['default'].fn[NAME].Constructor = Modal;
660
-
661
- $__default['default'].fn[NAME].noConflict = function () {
662
- $__default['default'].fn[NAME] = JQUERY_NO_CONFLICT;
663
- return Modal._jQueryInterface;
664
- };
835
+ defineJQueryPlugin(NAME, Modal);
665
836
 
666
837
  return Modal;
667
838