bootstrap 4.0.0.beta3 → 4.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
+ }));