bootstrap 4.1.2 → 4.1.3

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.

Potentially problematic release.


This version of bootstrap might be problematic. Click here for more details.

Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/assets/javascripts/bootstrap-sprockets.js +5 -5
  4. data/assets/javascripts/bootstrap.js +23 -23
  5. data/assets/javascripts/bootstrap.min.js +2 -2
  6. data/assets/javascripts/bootstrap/alert.js +159 -133
  7. data/assets/javascripts/bootstrap/button.js +149 -124
  8. data/assets/javascripts/bootstrap/carousel.js +463 -407
  9. data/assets/javascripts/bootstrap/collapse.js +338 -282
  10. data/assets/javascripts/bootstrap/dropdown.js +439 -382
  11. data/assets/javascripts/bootstrap/modal.js +502 -446
  12. data/assets/javascripts/bootstrap/popover.js +223 -163
  13. data/assets/javascripts/bootstrap/scrollspy.js +307 -251
  14. data/assets/javascripts/bootstrap/tab.js +217 -191
  15. data/assets/javascripts/bootstrap/tooltip.js +582 -525
  16. data/assets/javascripts/bootstrap/util.js +129 -116
  17. data/assets/stylesheets/_bootstrap-grid.scss +1 -1
  18. data/assets/stylesheets/_bootstrap-reboot.scss +1 -1
  19. data/assets/stylesheets/_bootstrap.scss +1 -1
  20. data/assets/stylesheets/bootstrap/_buttons.scss +0 -1
  21. data/assets/stylesheets/bootstrap/_custom-forms.scss +13 -19
  22. data/assets/stylesheets/bootstrap/_forms.scss +13 -15
  23. data/assets/stylesheets/bootstrap/_input-group.scss +15 -2
  24. data/assets/stylesheets/bootstrap/_modal.scss +18 -6
  25. data/assets/stylesheets/bootstrap/_reboot.scss +4 -2
  26. data/assets/stylesheets/bootstrap/_tables.scss +0 -1
  27. data/assets/stylesheets/bootstrap/_variables.scss +10 -9
  28. data/assets/stylesheets/bootstrap/mixins/_forms.scss +7 -7
  29. data/lib/bootstrap/version.rb +2 -2
  30. metadata +2 -2
@@ -1,130 +1,143 @@
1
- /**
2
- * --------------------------------------------------------------------------
3
- * Bootstrap (v4.1.2): util.js
4
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5
- * --------------------------------------------------------------------------
6
- */
7
- var Util = function ($) {
8
- /**
9
- * ------------------------------------------------------------------------
10
- * Private TransitionEnd Helpers
11
- * ------------------------------------------------------------------------
12
- */
13
- var TRANSITION_END = 'transitionend';
14
- var MAX_UID = 1000000;
15
- var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
16
-
17
- function toType(obj) {
18
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
19
- }
20
-
21
- function getSpecialTransitionEndEvent() {
22
- return {
23
- bindType: TRANSITION_END,
24
- delegateType: TRANSITION_END,
25
- handle: function handle(event) {
26
- if ($(event.target).is(this)) {
27
- return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
28
- }
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) :
3
+ typeof define === 'function' && define.amd ? define(['jquery'], factory) :
4
+ (global.Util = factory(global.jQuery));
5
+ }(this, (function ($) { 'use strict';
6
+
7
+ $ = $ && $.hasOwnProperty('default') ? $['default'] : $;
29
8
 
30
- return undefined; // eslint-disable-line no-undefined
31
- }
32
- };
33
- }
34
-
35
- function transitionEndEmulator(duration) {
36
- var _this = this;
37
-
38
- var called = false;
39
- $(this).one(Util.TRANSITION_END, function () {
40
- called = true;
41
- });
42
- setTimeout(function () {
43
- if (!called) {
44
- Util.triggerTransitionEnd(_this);
45
- }
46
- }, duration);
47
- return this;
48
- }
49
-
50
- function setTransitionEndSupport() {
51
- $.fn.emulateTransitionEnd = transitionEndEmulator;
52
- $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
53
- }
54
9
  /**
55
10
  * --------------------------------------------------------------------------
56
- * Public Util Api
11
+ * Bootstrap (v4.1.3): util.js
12
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
57
13
  * --------------------------------------------------------------------------
58
14
  */
59
15
 
16
+ var Util = function ($$$1) {
17
+ /**
18
+ * ------------------------------------------------------------------------
19
+ * Private TransitionEnd Helpers
20
+ * ------------------------------------------------------------------------
21
+ */
22
+ var TRANSITION_END = 'transitionend';
23
+ var MAX_UID = 1000000;
24
+ var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
25
+
26
+ function toType(obj) {
27
+ return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
28
+ }
60
29
 
61
- var Util = {
62
- TRANSITION_END: 'bsTransitionEnd',
63
- getUID: function getUID(prefix) {
64
- do {
65
- // eslint-disable-next-line no-bitwise
66
- prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
67
- } while (document.getElementById(prefix));
30
+ function getSpecialTransitionEndEvent() {
31
+ return {
32
+ bindType: TRANSITION_END,
33
+ delegateType: TRANSITION_END,
34
+ handle: function handle(event) {
35
+ if ($$$1(event.target).is(this)) {
36
+ return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
37
+ }
68
38
 
69
- return prefix;
70
- },
71
- getSelectorFromElement: function getSelectorFromElement(element) {
72
- var selector = element.getAttribute('data-target');
39
+ return undefined; // eslint-disable-line no-undefined
40
+ }
41
+ };
42
+ }
73
43
 
74
- if (!selector || selector === '#') {
75
- selector = element.getAttribute('href') || '';
76
- }
44
+ function transitionEndEmulator(duration) {
45
+ var _this = this;
77
46
 
78
- try {
79
- return document.querySelector(selector) ? selector : null;
80
- } catch (err) {
81
- return null;
82
- }
83
- },
84
- getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
85
- if (!element) {
86
- return 0;
87
- } // Get transition-duration of the element
88
-
89
-
90
- var transitionDuration = $(element).css('transition-duration');
91
- var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
92
-
93
- if (!floatTransitionDuration) {
94
- return 0;
95
- } // If multiple durations are defined, take the first
96
-
97
-
98
- transitionDuration = transitionDuration.split(',')[0];
99
- return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
100
- },
101
- reflow: function reflow(element) {
102
- return element.offsetHeight;
103
- },
104
- triggerTransitionEnd: function triggerTransitionEnd(element) {
105
- $(element).trigger(TRANSITION_END);
106
- },
107
- // TODO: Remove in v5
108
- supportsTransitionEnd: function supportsTransitionEnd() {
109
- return Boolean(TRANSITION_END);
110
- },
111
- isElement: function isElement(obj) {
112
- return (obj[0] || obj).nodeType;
113
- },
114
- typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
115
- for (var property in configTypes) {
116
- if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
117
- var expectedTypes = configTypes[property];
118
- var value = config[property];
119
- var valueType = value && Util.isElement(value) ? 'element' : toType(value);
120
-
121
- if (!new RegExp(expectedTypes).test(valueType)) {
122
- throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
47
+ var called = false;
48
+ $$$1(this).one(Util.TRANSITION_END, function () {
49
+ called = true;
50
+ });
51
+ setTimeout(function () {
52
+ if (!called) {
53
+ Util.triggerTransitionEnd(_this);
54
+ }
55
+ }, duration);
56
+ return this;
57
+ }
58
+
59
+ function setTransitionEndSupport() {
60
+ $$$1.fn.emulateTransitionEnd = transitionEndEmulator;
61
+ $$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
62
+ }
63
+ /**
64
+ * --------------------------------------------------------------------------
65
+ * Public Util Api
66
+ * --------------------------------------------------------------------------
67
+ */
68
+
69
+
70
+ var Util = {
71
+ TRANSITION_END: 'bsTransitionEnd',
72
+ getUID: function getUID(prefix) {
73
+ do {
74
+ // eslint-disable-next-line no-bitwise
75
+ prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
76
+ } while (document.getElementById(prefix));
77
+
78
+ return prefix;
79
+ },
80
+ getSelectorFromElement: function getSelectorFromElement(element) {
81
+ var selector = element.getAttribute('data-target');
82
+
83
+ if (!selector || selector === '#') {
84
+ selector = element.getAttribute('href') || '';
85
+ }
86
+
87
+ try {
88
+ return document.querySelector(selector) ? selector : null;
89
+ } catch (err) {
90
+ return null;
91
+ }
92
+ },
93
+ getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
94
+ if (!element) {
95
+ return 0;
96
+ } // Get transition-duration of the element
97
+
98
+
99
+ var transitionDuration = $$$1(element).css('transition-duration');
100
+ var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found
101
+
102
+ if (!floatTransitionDuration) {
103
+ return 0;
104
+ } // If multiple durations are defined, take the first
105
+
106
+
107
+ transitionDuration = transitionDuration.split(',')[0];
108
+ return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER;
109
+ },
110
+ reflow: function reflow(element) {
111
+ return element.offsetHeight;
112
+ },
113
+ triggerTransitionEnd: function triggerTransitionEnd(element) {
114
+ $$$1(element).trigger(TRANSITION_END);
115
+ },
116
+ // TODO: Remove in v5
117
+ supportsTransitionEnd: function supportsTransitionEnd() {
118
+ return Boolean(TRANSITION_END);
119
+ },
120
+ isElement: function isElement(obj) {
121
+ return (obj[0] || obj).nodeType;
122
+ },
123
+ typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
124
+ for (var property in configTypes) {
125
+ if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
126
+ var expectedTypes = configTypes[property];
127
+ var value = config[property];
128
+ var valueType = value && Util.isElement(value) ? 'element' : toType(value);
129
+
130
+ if (!new RegExp(expectedTypes).test(valueType)) {
131
+ throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
132
+ }
123
133
  }
124
134
  }
125
135
  }
126
- }
127
- };
128
- setTransitionEndSupport();
136
+ };
137
+ setTransitionEndSupport();
138
+ return Util;
139
+ }($);
140
+
129
141
  return Util;
130
- }($);
142
+
143
+ })));
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap Grid v4.1.2 (https://getbootstrap.com/)
2
+ * Bootstrap Grid v4.1.3 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap Reboot v4.1.2 (https://getbootstrap.com/)
2
+ * Bootstrap Reboot v4.1.3 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Bootstrap v4.1.2 (https://getbootstrap.com/)
2
+ * Bootstrap v4.1.3 (https://getbootstrap.com/)
3
3
  * Copyright 2011-2018 The Bootstrap Authors
4
4
  * Copyright 2011-2018 Twitter, Inc.
5
5
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
@@ -40,7 +40,6 @@
40
40
 
41
41
  &:not(:disabled):not(.disabled):active,
42
42
  &:not(:disabled):not(.disabled).active {
43
- background-image: none;
44
43
  @include box-shadow($btn-active-box-shadow);
45
44
 
46
45
  &:focus {
@@ -10,7 +10,7 @@
10
10
  .custom-control {
11
11
  position: relative;
12
12
  display: block;
13
- min-height: (1rem * $line-height-base);
13
+ min-height: ($font-size-base * $line-height-base);
14
14
  padding-left: $custom-control-gutter;
15
15
  }
16
16
 
@@ -63,7 +63,7 @@
63
63
  // Background-color and (when enabled) gradient
64
64
  &::before {
65
65
  position: absolute;
66
- top: (($line-height-base - $custom-control-indicator-size) / 2);
66
+ top: (($font-size-base * $line-height-base - $custom-control-indicator-size) / 2);
67
67
  left: -$custom-control-gutter;
68
68
  display: block;
69
69
  width: $custom-control-indicator-size;
@@ -78,7 +78,7 @@
78
78
  // Foreground (icon)
79
79
  &::after {
80
80
  position: absolute;
81
- top: (($line-height-base - $custom-control-indicator-size) / 2);
81
+ top: (($font-size-base * $line-height-base - $custom-control-indicator-size) / 2);
82
82
  left: -$custom-control-gutter;
83
83
  display: block;
84
84
  width: $custom-control-indicator-size;
@@ -320,6 +320,12 @@
320
320
 
321
321
  &:focus {
322
322
  outline: none;
323
+
324
+ // Pseudo-elements must be split across multiple rulesets to have an affect.
325
+ // No box-shadow() mixin for focus accessibility.
326
+ &::-webkit-slider-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
327
+ &::-moz-range-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
328
+ &::-ms-thumb { box-shadow: $custom-range-thumb-focus-box-shadow; }
323
329
  }
324
330
 
325
331
  &::-moz-focus-outer {
@@ -329,7 +335,7 @@
329
335
  &::-webkit-slider-thumb {
330
336
  width: $custom-range-thumb-width;
331
337
  height: $custom-range-thumb-height;
332
- margin-top: -($custom-range-thumb-width * .25); // Webkit specific?
338
+ margin-top: (($custom-range-track-height - $custom-range-thumb-height) / 2); // Webkit specific
333
339
  @include gradient-bg($custom-range-thumb-bg);
334
340
  border: $custom-range-thumb-border;
335
341
  @include border-radius($custom-range-thumb-border-radius);
@@ -337,11 +343,6 @@
337
343
  @include transition($custom-forms-transition);
338
344
  appearance: none;
339
345
 
340
- &:focus {
341
- outline: none;
342
- box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
343
- }
344
-
345
346
  &:active {
346
347
  @include gradient-bg($custom-range-thumb-active-bg);
347
348
  }
@@ -368,11 +369,6 @@
368
369
  @include transition($custom-forms-transition);
369
370
  appearance: none;
370
371
 
371
- &:focus {
372
- outline: none;
373
- box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
374
- }
375
-
376
372
  &:active {
377
373
  @include gradient-bg($custom-range-thumb-active-bg);
378
374
  }
@@ -392,6 +388,9 @@
392
388
  &::-ms-thumb {
393
389
  width: $custom-range-thumb-width;
394
390
  height: $custom-range-thumb-height;
391
+ margin-top: 0; // Edge specific
392
+ margin-right: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.
393
+ margin-left: $custom-range-thumb-focus-box-shadow-width; // Workaround that overflowed box-shadow is hidden.
395
394
  @include gradient-bg($custom-range-thumb-bg);
396
395
  border: $custom-range-thumb-border;
397
396
  @include border-radius($custom-range-thumb-border-radius);
@@ -399,11 +398,6 @@
399
398
  @include transition($custom-forms-transition);
400
399
  appearance: none;
401
400
 
402
- &:focus {
403
- outline: none;
404
- box-shadow: $custom-range-thumb-focus-box-shadow; // No mixin for focus accessibility
405
- }
406
-
407
401
  &:active {
408
402
  @include gradient-bg($custom-range-thumb-active-bg);
409
403
  }
@@ -7,6 +7,7 @@
7
7
  .form-control {
8
8
  display: block;
9
9
  width: 100%;
10
+ height: $input-height;
10
11
  padding: $input-padding-y $input-padding-x;
11
12
  font-size: $font-size-base;
12
13
  line-height: $input-line-height;
@@ -57,10 +58,6 @@
57
58
  }
58
59
 
59
60
  select.form-control {
60
- &:not([size]):not([multiple]) {
61
- height: $input-height;
62
- }
63
-
64
61
  &:focus::-ms-value {
65
62
  // Suppress the nested default white text on blue background highlight given to
66
63
  // the selected option text when the (still closed) <select> receives focus
@@ -139,35 +136,36 @@ select.form-control {
139
136
  // Build on `.form-control` with modifier classes to decrease or increase the
140
137
  // height and font-size of form controls.
141
138
  //
142
- // The `.form-group-* form-control` variations are sadly duplicated to avoid the
143
- // issue documented in https://github.com/twbs/bootstrap/issues/15074.
139
+ // Repeated in `_input_group.scss` to avoid Sass extend issues.
144
140
 
145
141
  .form-control-sm {
142
+ height: $input-height-sm;
146
143
  padding: $input-padding-y-sm $input-padding-x-sm;
147
144
  font-size: $font-size-sm;
148
145
  line-height: $input-line-height-sm;
149
146
  @include border-radius($input-border-radius-sm);
150
147
  }
151
148
 
152
- select.form-control-sm {
153
- &:not([size]):not([multiple]) {
154
- height: $input-height-sm;
155
- }
156
- }
157
-
158
149
  .form-control-lg {
150
+ height: $input-height-lg;
159
151
  padding: $input-padding-y-lg $input-padding-x-lg;
160
152
  font-size: $font-size-lg;
161
153
  line-height: $input-line-height-lg;
162
154
  @include border-radius($input-border-radius-lg);
163
155
  }
164
156
 
165
- select.form-control-lg {
166
- &:not([size]):not([multiple]) {
167
- height: $input-height-lg;
157
+ // stylelint-disable no-duplicate-selectors
158
+ select.form-control {
159
+ &[size],
160
+ &[multiple] {
161
+ height: auto;
168
162
  }
169
163
  }
170
164
 
165
+ textarea.form-control {
166
+ height: auto;
167
+ }
168
+ // stylelint-enable no-duplicate-selectors
171
169
 
172
170
  // Form groups
173
171
  //
@@ -35,6 +35,11 @@
35
35
  z-index: 3;
36
36
  }
37
37
 
38
+ // Bring the custom file input above the label
39
+ > .custom-file .custom-file-input:focus {
40
+ z-index: 4;
41
+ }
42
+
38
43
  > .form-control,
39
44
  > .custom-select {
40
45
  &:not(:last-child) { @include border-right-radius(0); }
@@ -122,7 +127,11 @@
122
127
  .input-group-lg > .input-group-append > .input-group-text,
123
128
  .input-group-lg > .input-group-prepend > .btn,
124
129
  .input-group-lg > .input-group-append > .btn {
125
- @extend .form-control-lg;
130
+ height: $input-height-lg;
131
+ padding: $input-padding-y-lg $input-padding-x-lg;
132
+ font-size: $font-size-lg;
133
+ line-height: $input-line-height-lg;
134
+ @include border-radius($input-border-radius-lg);
126
135
  }
127
136
 
128
137
  .input-group-sm > .form-control,
@@ -130,7 +139,11 @@
130
139
  .input-group-sm > .input-group-append > .input-group-text,
131
140
  .input-group-sm > .input-group-prepend > .btn,
132
141
  .input-group-sm > .input-group-append > .btn {
133
- @extend .form-control-sm;
142
+ height: $input-height-sm;
143
+ padding: $input-padding-y-sm $input-padding-x-sm;
144
+ font-size: $font-size-sm;
145
+ line-height: $input-line-height-sm;
146
+ @include border-radius($input-border-radius-sm);
134
147
  }
135
148
 
136
149