bootstrap 4.2.1 → 4.5.2

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