bootstrap 4.0.0.beta3 → 4.6.2

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