bootstrap 4.6.2.1 → 5.3.5
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.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +61 -0
- data/CHANGELOG.md +7 -2
- data/Gemfile +1 -0
- data/README.md +33 -15
- data/Rakefile +1 -2
- data/assets/javascripts/bootstrap/alert.js +50 -147
- data/assets/javascripts/bootstrap/base-component.js +83 -0
- data/assets/javascripts/bootstrap/button.js +40 -190
- data/assets/javascripts/bootstrap/carousel.js +282 -537
- data/assets/javascripts/bootstrap/collapse.js +166 -314
- data/assets/javascripts/bootstrap/dom/data.js +62 -0
- data/assets/javascripts/bootstrap/dom/event-handler.js +236 -0
- data/assets/javascripts/bootstrap/dom/manipulator.js +71 -0
- data/assets/javascripts/bootstrap/dom/selector-engine.js +103 -0
- data/assets/javascripts/bootstrap/dropdown.js +297 -455
- data/assets/javascripts/bootstrap/modal.js +223 -566
- data/assets/javascripts/bootstrap/offcanvas.js +245 -0
- data/assets/javascripts/bootstrap/popover.js +59 -208
- data/assets/javascripts/bootstrap/scrollspy.js +213 -276
- data/assets/javascripts/bootstrap/tab.js +222 -200
- data/assets/javascripts/bootstrap/toast.js +137 -206
- data/assets/javascripts/bootstrap/tooltip.js +403 -747
- data/assets/javascripts/bootstrap/util/backdrop.js +138 -0
- data/assets/javascripts/bootstrap/util/component-functions.js +41 -0
- data/assets/javascripts/bootstrap/util/config.js +67 -0
- data/assets/javascripts/bootstrap/util/focustrap.js +112 -0
- data/assets/javascripts/bootstrap/util/index.js +280 -0
- data/assets/javascripts/bootstrap/util/sanitizer.js +113 -0
- data/assets/javascripts/bootstrap/util/scrollbar.js +112 -0
- data/assets/javascripts/bootstrap/util/swipe.js +134 -0
- data/assets/javascripts/bootstrap/util/template-factory.js +150 -0
- data/assets/javascripts/bootstrap-global-this-define.js +6 -0
- data/assets/javascripts/bootstrap-global-this-undefine.js +2 -0
- data/assets/javascripts/bootstrap-sprockets.js +21 -5
- data/assets/javascripts/bootstrap.js +3625 -3488
- data/assets/javascripts/bootstrap.min.js +3 -3
- data/assets/stylesheets/_bootstrap-grid.scss +53 -21
- data/assets/stylesheets/_bootstrap-reboot.scss +5 -7
- data/assets/stylesheets/_bootstrap-utilities.scss +19 -0
- data/assets/stylesheets/_bootstrap.scss +21 -13
- data/assets/stylesheets/bootstrap/_accordion.scss +153 -0
- data/assets/stylesheets/bootstrap/_alert.scss +32 -16
- data/assets/stylesheets/bootstrap/_badge.scss +15 -31
- data/assets/stylesheets/bootstrap/_breadcrumb.scss +22 -24
- data/assets/stylesheets/bootstrap/_button-group.scss +32 -48
- data/assets/stylesheets/bootstrap/_buttons.scss +145 -71
- data/assets/stylesheets/bootstrap/_card.scss +67 -115
- data/assets/stylesheets/bootstrap/_carousel.scss +63 -37
- data/assets/stylesheets/bootstrap/_close.scss +53 -27
- data/assets/stylesheets/bootstrap/_containers.scss +41 -0
- data/assets/stylesheets/bootstrap/_dropdown.scss +129 -71
- data/assets/stylesheets/bootstrap/_forms.scss +9 -347
- data/assets/stylesheets/bootstrap/_functions.scss +135 -23
- data/assets/stylesheets/bootstrap/_grid.scss +18 -52
- data/assets/stylesheets/bootstrap/_helpers.scss +12 -0
- data/assets/stylesheets/bootstrap/_list-group.scss +93 -48
- data/assets/stylesheets/bootstrap/_maps.scss +174 -0
- data/assets/stylesheets/bootstrap/_mixins.scss +10 -15
- data/assets/stylesheets/bootstrap/_modal.scss +112 -112
- data/assets/stylesheets/bootstrap/_nav.scss +100 -28
- data/assets/stylesheets/bootstrap/_navbar.scss +130 -173
- data/assets/stylesheets/bootstrap/_offcanvas.scss +147 -0
- data/assets/stylesheets/bootstrap/_pagination.scss +72 -37
- data/assets/stylesheets/bootstrap/_placeholders.scss +51 -0
- data/assets/stylesheets/bootstrap/_popover.scss +99 -73
- data/assets/stylesheets/bootstrap/_progress.scss +35 -14
- data/assets/stylesheets/bootstrap/_reboot.scss +319 -192
- data/assets/stylesheets/bootstrap/_root.scss +177 -9
- data/assets/stylesheets/bootstrap/_spinners.scss +43 -23
- data/assets/stylesheets/bootstrap/_tables.scss +101 -115
- data/assets/stylesheets/bootstrap/_toasts.scss +54 -27
- data/assets/stylesheets/bootstrap/_tooltip.scss +67 -63
- data/assets/stylesheets/bootstrap/_transitions.scss +3 -2
- data/assets/stylesheets/bootstrap/_type.scss +40 -59
- data/assets/stylesheets/bootstrap/_utilities.scss +806 -18
- data/assets/stylesheets/bootstrap/_variables-dark.scss +102 -0
- data/assets/stylesheets/bootstrap/_variables.scss +1210 -606
- data/assets/stylesheets/bootstrap/forms/_floating-labels.scss +97 -0
- data/assets/stylesheets/bootstrap/forms/_form-check.scss +189 -0
- data/assets/stylesheets/bootstrap/forms/_form-control.scss +214 -0
- data/assets/stylesheets/bootstrap/forms/_form-range.scss +91 -0
- data/assets/stylesheets/bootstrap/forms/_form-select.scss +80 -0
- data/assets/stylesheets/bootstrap/forms/_form-text.scss +11 -0
- data/assets/stylesheets/bootstrap/forms/_input-group.scss +132 -0
- data/assets/stylesheets/bootstrap/forms/_labels.scss +36 -0
- data/assets/stylesheets/bootstrap/forms/_validation.scss +12 -0
- data/assets/stylesheets/bootstrap/helpers/_color-bg.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_colored-links.scss +30 -0
- data/assets/stylesheets/bootstrap/helpers/_focus-ring.scss +5 -0
- data/assets/stylesheets/bootstrap/helpers/_icon-link.scss +25 -0
- data/assets/stylesheets/bootstrap/helpers/_position.scss +36 -0
- data/assets/stylesheets/bootstrap/helpers/_ratio.scss +26 -0
- data/assets/stylesheets/bootstrap/helpers/_stacks.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_stretched-link.scss +15 -0
- data/assets/stylesheets/bootstrap/helpers/_text-truncation.scss +7 -0
- data/assets/stylesheets/bootstrap/helpers/_visually-hidden.scss +8 -0
- data/assets/stylesheets/bootstrap/helpers/_vr.scss +8 -0
- data/assets/stylesheets/bootstrap/mixins/_alert.scss +11 -6
- data/assets/stylesheets/bootstrap/mixins/_backdrop.scss +14 -0
- data/assets/stylesheets/bootstrap/mixins/_banner.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_border-radius.scss +10 -8
- data/assets/stylesheets/bootstrap/mixins/_box-shadow.scss +7 -9
- data/assets/stylesheets/bootstrap/mixins/_breakpoints.scss +20 -16
- data/assets/stylesheets/bootstrap/mixins/_buttons.scss +60 -100
- data/assets/stylesheets/bootstrap/mixins/_caret.scss +34 -27
- data/assets/stylesheets/bootstrap/mixins/_clearfix.scss +2 -0
- data/assets/stylesheets/bootstrap/mixins/_color-mode.scss +21 -0
- data/assets/stylesheets/bootstrap/mixins/_color-scheme.scss +7 -0
- data/assets/stylesheets/bootstrap/mixins/_container.scss +11 -0
- data/assets/stylesheets/bootstrap/mixins/_forms.scss +64 -96
- data/assets/stylesheets/bootstrap/mixins/_gradients.scss +13 -11
- data/assets/stylesheets/bootstrap/mixins/_grid.scss +118 -36
- data/assets/stylesheets/bootstrap/mixins/_image.scss +1 -21
- data/assets/stylesheets/bootstrap/mixins/_list-group.scss +7 -2
- data/assets/stylesheets/bootstrap/mixins/_lists.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_pagination.scss +7 -19
- data/assets/stylesheets/bootstrap/mixins/_reset-text.scss +2 -2
- data/assets/stylesheets/bootstrap/mixins/_table-variants.scss +24 -0
- data/assets/stylesheets/bootstrap/mixins/_transition.scss +1 -1
- data/assets/stylesheets/bootstrap/mixins/_utilities.scss +97 -0
- data/assets/stylesheets/bootstrap/mixins/_visually-hidden.scss +33 -0
- data/assets/stylesheets/bootstrap/utilities/_api.scss +47 -0
- data/assets/stylesheets/bootstrap/vendor/_rfs.scss +211 -91
- data/bootstrap.gemspec +6 -6
- data/lib/bootstrap/engine.rb +0 -1
- data/lib/bootstrap/version.rb +2 -2
- data/tasks/updater/js.rb +17 -5
- data/tasks/updater/network.rb +2 -2
- data/tasks/updater/scss.rb +2 -2
- data/tasks/updater.rb +2 -2
- data/test/dummy_rails/app/assets/javascripts/application.js +4 -3
- data/test/dummy_rails/app/views/layouts/application.html.erb +3 -1
- data/test/dummy_rails/app/views/pages/root.html +89 -0
- data/test/dummy_rails/config/application.rb +0 -5
- data/test/dummy_rails/public/favicon.ico +0 -0
- data/test/gemfiles/rails_4_2.gemfile +2 -1
- data/test/gemfiles/rails_5_0.gemfile +1 -2
- data/test/gemfiles/rails_5_1.gemfile +1 -2
- data/test/gemfiles/rails_5_2.gemfile +7 -0
- data/test/gemfiles/rails_6_0.gemfile +1 -1
- data/test/gemfiles/rails_6_1.gemfile +7 -0
- data/test/gemfiles/rails_7_0_dartsass.gemfile +0 -1
- data/test/gemfiles/rails_7_0_sassc.gemfile +0 -1
- data/test/rails_test.rb +0 -5
- data/test/test_helper.rb +3 -2
- metadata +92 -86
- data/.travis.yml +0 -31
- data/assets/javascripts/bootstrap/util.js +0 -189
- data/assets/stylesheets/bootstrap/_code.scss +0 -48
- data/assets/stylesheets/bootstrap/_custom-forms.scss +0 -526
- data/assets/stylesheets/bootstrap/_input-group.scss +0 -211
- data/assets/stylesheets/bootstrap/_jumbotron.scss +0 -17
- data/assets/stylesheets/bootstrap/_media.scss +0 -8
- data/assets/stylesheets/bootstrap/_print.scss +0 -132
- data/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -23
- data/assets/stylesheets/bootstrap/mixins/_badge.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_float.scss +0 -14
- data/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -80
- data/assets/stylesheets/bootstrap/mixins/_hover.scss +0 -37
- data/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_screen-reader.scss +0 -34
- data/assets/stylesheets/bootstrap/mixins/_size.scss +0 -7
- data/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -39
- data/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -17
- data/assets/stylesheets/bootstrap/mixins/_text-hide.scss +0 -11
- data/assets/stylesheets/bootstrap/mixins/_visibility.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_align.scss +0 -8
- data/assets/stylesheets/bootstrap/utilities/_background.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_borders.scss +0 -75
- data/assets/stylesheets/bootstrap/utilities/_display.scss +0 -26
- data/assets/stylesheets/bootstrap/utilities/_embed.scss +0 -39
- data/assets/stylesheets/bootstrap/utilities/_flex.scss +0 -51
- data/assets/stylesheets/bootstrap/utilities/_float.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_interactions.scss +0 -5
- data/assets/stylesheets/bootstrap/utilities/_overflow.scss +0 -5
- data/assets/stylesheets/bootstrap/utilities/_position.scss +0 -32
- data/assets/stylesheets/bootstrap/utilities/_screenreaders.scss +0 -11
- data/assets/stylesheets/bootstrap/utilities/_shadows.scss +0 -6
- data/assets/stylesheets/bootstrap/utilities/_sizing.scss +0 -20
- data/assets/stylesheets/bootstrap/utilities/_spacing.scss +0 -73
- data/assets/stylesheets/bootstrap/utilities/_stretched-link.scss +0 -19
- data/assets/stylesheets/bootstrap/utilities/_text.scss +0 -72
- data/assets/stylesheets/bootstrap/utilities/_visibility.scss +0 -13
- data/test/dummy_rails/app/views/pages/root.html.slim +0 -58
- /data/assets/stylesheets/bootstrap/{utilities → helpers}/_clearfix.scss +0 -0
@@ -1,22 +1,22 @@
|
|
1
|
-
// stylelint-disable
|
1
|
+
// stylelint-disable scss/dimension-no-non-numeric-values
|
2
2
|
|
3
3
|
// SCSS RFS mixin
|
4
4
|
//
|
5
|
-
// Automated responsive font sizes
|
5
|
+
// Automated responsive values for font sizes, paddings, margins and much more
|
6
6
|
//
|
7
|
-
// Licensed under MIT (https://github.com/twbs/rfs/blob/
|
7
|
+
// Licensed under MIT (https://github.com/twbs/rfs/blob/main/LICENSE)
|
8
8
|
|
9
9
|
// Configuration
|
10
10
|
|
11
|
-
// Base
|
12
|
-
$rfs-base-
|
13
|
-
$rfs-
|
11
|
+
// Base value
|
12
|
+
$rfs-base-value: 1.25rem !default;
|
13
|
+
$rfs-unit: rem !default;
|
14
14
|
|
15
|
-
@if $rfs-
|
16
|
-
@error "`#{$rfs-
|
15
|
+
@if $rfs-unit != rem and $rfs-unit != px {
|
16
|
+
@error "`#{$rfs-unit}` is not a valid unit for $rfs-unit. Use `px` or `rem`.";
|
17
17
|
}
|
18
18
|
|
19
|
-
// Breakpoint at where
|
19
|
+
// Breakpoint at where values start decreasing if screen width is smaller
|
20
20
|
$rfs-breakpoint: 1200px !default;
|
21
21
|
$rfs-breakpoint-unit: px !default;
|
22
22
|
|
@@ -24,16 +24,19 @@ $rfs-breakpoint-unit: px !default;
|
|
24
24
|
@error "`#{$rfs-breakpoint-unit}` is not a valid unit for $rfs-breakpoint-unit. Use `px`, `em` or `rem`.";
|
25
25
|
}
|
26
26
|
|
27
|
-
// Resize
|
27
|
+
// Resize values based on screen height and width
|
28
28
|
$rfs-two-dimensional: false !default;
|
29
29
|
|
30
30
|
// Factor of decrease
|
31
31
|
$rfs-factor: 10 !default;
|
32
32
|
|
33
|
-
@if type-of($rfs-factor) !=
|
33
|
+
@if type-of($rfs-factor) != number or $rfs-factor <= 1 {
|
34
34
|
@error "`#{$rfs-factor}` is not a valid $rfs-factor, it must be greater than 1.";
|
35
35
|
}
|
36
36
|
|
37
|
+
// Mode. Possibilities: "min-media-query", "max-media-query"
|
38
|
+
$rfs-mode: min-media-query !default;
|
39
|
+
|
37
40
|
// Generate enable or disable classes. Possibilities: false, "enable" or "disable"
|
38
41
|
$rfs-class: false !default;
|
39
42
|
|
@@ -43,11 +46,11 @@ $rfs-rem-value: 16 !default;
|
|
43
46
|
// Safari iframe resize bug: https://github.com/twbs/rfs/issues/14
|
44
47
|
$rfs-safari-iframe-resize-bug-fix: false !default;
|
45
48
|
|
46
|
-
// Disable RFS by setting $enable-
|
47
|
-
$enable-
|
49
|
+
// Disable RFS by setting $enable-rfs to false
|
50
|
+
$enable-rfs: true !default;
|
48
51
|
|
49
|
-
// Cache $rfs-base-
|
50
|
-
$rfs-base-
|
52
|
+
// Cache $rfs-base-value unit
|
53
|
+
$rfs-base-value-unit: unit($rfs-base-value);
|
51
54
|
|
52
55
|
@function divide($dividend, $divisor, $precision: 10) {
|
53
56
|
$sign: if($dividend > 0 and $divisor > 0 or $dividend < 0 and $divisor < 0, 1, -1);
|
@@ -91,138 +94,255 @@ $rfs-base-font-size-unit: unit($rfs-base-font-size);
|
|
91
94
|
@return $result;
|
92
95
|
}
|
93
96
|
|
94
|
-
// Remove px-unit from $rfs-base-
|
95
|
-
@if $rfs-base-
|
96
|
-
$rfs-base-
|
97
|
+
// Remove px-unit from $rfs-base-value for calculations
|
98
|
+
@if $rfs-base-value-unit == px {
|
99
|
+
$rfs-base-value: divide($rfs-base-value, $rfs-base-value * 0 + 1);
|
97
100
|
}
|
98
|
-
@else if $rfs-base-
|
99
|
-
$rfs-base-
|
101
|
+
@else if $rfs-base-value-unit == rem {
|
102
|
+
$rfs-base-value: divide($rfs-base-value, divide($rfs-base-value * 0 + 1, $rfs-rem-value));
|
100
103
|
}
|
101
104
|
|
102
105
|
// Cache $rfs-breakpoint unit to prevent multiple calls
|
103
106
|
$rfs-breakpoint-unit-cache: unit($rfs-breakpoint);
|
104
107
|
|
105
108
|
// Remove unit from $rfs-breakpoint for calculations
|
106
|
-
@if $rfs-breakpoint-unit-cache ==
|
109
|
+
@if $rfs-breakpoint-unit-cache == px {
|
107
110
|
$rfs-breakpoint: divide($rfs-breakpoint, $rfs-breakpoint * 0 + 1);
|
108
111
|
}
|
109
|
-
@else if $rfs-breakpoint-unit-cache ==
|
112
|
+
@else if $rfs-breakpoint-unit-cache == rem or $rfs-breakpoint-unit-cache == "em" {
|
110
113
|
$rfs-breakpoint: divide($rfs-breakpoint, divide($rfs-breakpoint * 0 + 1, $rfs-rem-value));
|
111
114
|
}
|
112
115
|
|
113
|
-
//
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
116
|
+
// Calculate the media query value
|
117
|
+
$rfs-mq-value: if($rfs-breakpoint-unit == px, #{$rfs-breakpoint}px, #{divide($rfs-breakpoint, $rfs-rem-value)}#{$rfs-breakpoint-unit});
|
118
|
+
$rfs-mq-property-width: if($rfs-mode == max-media-query, max-width, min-width);
|
119
|
+
$rfs-mq-property-height: if($rfs-mode == max-media-query, max-height, min-height);
|
120
|
+
|
121
|
+
// Internal mixin used to determine which media query needs to be used
|
122
|
+
@mixin _rfs-media-query {
|
123
|
+
@if $rfs-two-dimensional {
|
124
|
+
@if $rfs-mode == max-media-query {
|
125
|
+
@media (#{$rfs-mq-property-width}: #{$rfs-mq-value}), (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {
|
126
|
+
@content;
|
127
|
+
}
|
128
|
+
}
|
129
|
+
@else {
|
130
|
+
@media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) and (#{$rfs-mq-property-height}: #{$rfs-mq-value}) {
|
131
|
+
@content;
|
132
|
+
}
|
121
133
|
}
|
122
134
|
}
|
123
135
|
@else {
|
124
|
-
@
|
136
|
+
@media (#{$rfs-mq-property-width}: #{$rfs-mq-value}) {
|
137
|
+
@content;
|
138
|
+
}
|
125
139
|
}
|
126
140
|
}
|
127
141
|
|
128
|
-
// Internal mixin that adds
|
129
|
-
@mixin _rfs-
|
130
|
-
@if $rfs-class ==
|
131
|
-
|
132
|
-
|
142
|
+
// Internal mixin that adds disable classes to the selector if needed.
|
143
|
+
@mixin _rfs-rule {
|
144
|
+
@if $rfs-class == disable and $rfs-mode == max-media-query {
|
145
|
+
// Adding an extra class increases specificity, which prevents the media query to override the property
|
146
|
+
&,
|
147
|
+
.disable-rfs &,
|
148
|
+
&.disable-rfs {
|
133
149
|
@content;
|
134
150
|
}
|
135
151
|
}
|
136
|
-
@else {
|
152
|
+
@else if $rfs-class == enable and $rfs-mode == min-media-query {
|
153
|
+
.enable-rfs &,
|
154
|
+
&.enable-rfs {
|
155
|
+
@content;
|
156
|
+
}
|
157
|
+
} @else {
|
137
158
|
@content;
|
138
159
|
}
|
139
160
|
}
|
140
161
|
|
141
|
-
// Internal mixin
|
142
|
-
@mixin _rfs-media-query
|
143
|
-
|
144
|
-
|
162
|
+
// Internal mixin that adds enable classes to the selector if needed.
|
163
|
+
@mixin _rfs-media-query-rule {
|
164
|
+
|
165
|
+
@if $rfs-class == enable {
|
166
|
+
@if $rfs-mode == min-media-query {
|
145
167
|
@content;
|
146
168
|
}
|
169
|
+
|
170
|
+
@include _rfs-media-query () {
|
171
|
+
.enable-rfs &,
|
172
|
+
&.enable-rfs {
|
173
|
+
@content;
|
174
|
+
}
|
175
|
+
}
|
147
176
|
}
|
148
177
|
@else {
|
149
|
-
@
|
178
|
+
@if $rfs-class == disable and $rfs-mode == min-media-query {
|
179
|
+
.disable-rfs &,
|
180
|
+
&.disable-rfs {
|
181
|
+
@content;
|
182
|
+
}
|
183
|
+
}
|
184
|
+
@include _rfs-media-query () {
|
150
185
|
@content;
|
151
186
|
}
|
152
187
|
}
|
153
188
|
}
|
154
189
|
|
155
|
-
//
|
156
|
-
@
|
157
|
-
//
|
158
|
-
$
|
190
|
+
// Helper function to get the formatted non-responsive value
|
191
|
+
@function rfs-value($values) {
|
192
|
+
// Convert to list
|
193
|
+
$values: if(type-of($values) != list, ($values,), $values);
|
159
194
|
|
160
|
-
|
161
|
-
$rfs-suffix: if($important, " !important", "");
|
195
|
+
$val: "";
|
162
196
|
|
163
|
-
//
|
164
|
-
@
|
165
|
-
|
166
|
-
|
167
|
-
@else {
|
168
|
-
// Remove unit from $fs for calculations
|
169
|
-
@if $fs-unit == "px" {
|
170
|
-
$fs: divide($fs, $fs * 0 + 1);
|
197
|
+
// Loop over each value and calculate value
|
198
|
+
@each $value in $values {
|
199
|
+
@if $value == 0 {
|
200
|
+
$val: $val + " 0";
|
171
201
|
}
|
172
|
-
@else
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
// Set default font size
|
177
|
-
$rfs-static: if($rfs-font-size-unit == rem, #{divide($fs, $rfs-rem-value)}rem, #{$fs}px);
|
202
|
+
@else {
|
203
|
+
// Cache $value unit
|
204
|
+
$unit: if(type-of($value) == "number", unit($value), false);
|
178
205
|
|
179
|
-
|
180
|
-
|
181
|
-
|
206
|
+
@if $unit == px {
|
207
|
+
// Convert to rem if needed
|
208
|
+
$val: $val + " " + if($rfs-unit == rem, #{divide($value, $value * 0 + $rfs-rem-value)}rem, $value);
|
209
|
+
}
|
210
|
+
@else if $unit == rem {
|
211
|
+
// Convert to px if needed
|
212
|
+
$val: $val + " " + if($rfs-unit == px, #{divide($value, $value * 0 + 1) * $rfs-rem-value}px, $value);
|
213
|
+
} @else {
|
214
|
+
// If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value
|
215
|
+
$val: $val + " " + $value;
|
216
|
+
}
|
182
217
|
}
|
183
|
-
|
184
|
-
// Calculate the minimum font size for $fs
|
185
|
-
$fs-min: $rfs-base-font-size + divide($fs - $rfs-base-font-size, $rfs-factor);
|
218
|
+
}
|
186
219
|
|
187
|
-
|
188
|
-
|
220
|
+
// Remove first space
|
221
|
+
@return unquote(str-slice($val, 2));
|
222
|
+
}
|
189
223
|
|
190
|
-
|
191
|
-
|
224
|
+
// Helper function to get the responsive value calculated by RFS
|
225
|
+
@function rfs-fluid-value($values) {
|
226
|
+
// Convert to list
|
227
|
+
$values: if(type-of($values) != list, ($values,), $values);
|
228
|
+
|
229
|
+
$val: "";
|
230
|
+
|
231
|
+
// Loop over each value and calculate value
|
232
|
+
@each $value in $values {
|
233
|
+
@if $value == 0 {
|
234
|
+
$val: $val + " 0";
|
235
|
+
} @else {
|
236
|
+
// Cache $value unit
|
237
|
+
$unit: if(type-of($value) == "number", unit($value), false);
|
238
|
+
|
239
|
+
// If $value isn't a number (like inherit) or $value has a unit (not px or rem, like 1.5em) or $ is 0, just print the value
|
240
|
+
@if not $unit or $unit != px and $unit != rem {
|
241
|
+
$val: $val + " " + $value;
|
242
|
+
} @else {
|
243
|
+
// Remove unit from $value for calculations
|
244
|
+
$value: divide($value, $value * 0 + if($unit == px, 1, divide(1, $rfs-rem-value)));
|
245
|
+
|
246
|
+
// Only add the media query if the value is greater than the minimum value
|
247
|
+
@if abs($value) <= $rfs-base-value or not $enable-rfs {
|
248
|
+
$val: $val + " " + if($rfs-unit == rem, #{divide($value, $rfs-rem-value)}rem, #{$value}px);
|
249
|
+
}
|
250
|
+
@else {
|
251
|
+
// Calculate the minimum value
|
252
|
+
$value-min: $rfs-base-value + divide(abs($value) - $rfs-base-value, $rfs-factor);
|
192
253
|
|
193
|
-
|
194
|
-
|
254
|
+
// Calculate difference between $value and the minimum value
|
255
|
+
$value-diff: abs($value) - $value-min;
|
195
256
|
|
196
|
-
|
197
|
-
|
257
|
+
// Base value formatting
|
258
|
+
$min-width: if($rfs-unit == rem, #{divide($value-min, $rfs-rem-value)}rem, #{$value-min}px);
|
198
259
|
|
199
|
-
|
200
|
-
|
260
|
+
// Use negative value if needed
|
261
|
+
$min-width: if($value < 0, -$min-width, $min-width);
|
201
262
|
|
202
|
-
|
203
|
-
|
263
|
+
// Use `vmin` if two-dimensional is enabled
|
264
|
+
$variable-unit: if($rfs-two-dimensional, vmin, vw);
|
204
265
|
|
205
|
-
|
206
|
-
|
207
|
-
}
|
266
|
+
// Calculate the variable width between 0 and $rfs-breakpoint
|
267
|
+
$variable-width: #{divide($value-diff * 100, $rfs-breakpoint)}#{$variable-unit};
|
208
268
|
|
209
|
-
|
210
|
-
|
211
|
-
font-size: $rfs-fluid;
|
269
|
+
// Return the calculated value
|
270
|
+
$val: $val + " calc(" + $min-width + if($value < 0, " - ", " + ") + $variable-width + ")";
|
212
271
|
}
|
272
|
+
}
|
273
|
+
}
|
274
|
+
}
|
275
|
+
|
276
|
+
// Remove first space
|
277
|
+
@return unquote(str-slice($val, 2));
|
278
|
+
}
|
279
|
+
|
280
|
+
// RFS mixin
|
281
|
+
@mixin rfs($values, $property: font-size) {
|
282
|
+
@if $values != null {
|
283
|
+
$val: rfs-value($values);
|
284
|
+
$fluid-val: rfs-fluid-value($values);
|
285
|
+
|
286
|
+
// Do not print the media query if responsive & non-responsive values are the same
|
287
|
+
@if $val == $fluid-val {
|
288
|
+
#{$property}: $val;
|
289
|
+
}
|
290
|
+
@else {
|
291
|
+
@include _rfs-rule () {
|
292
|
+
#{$property}: if($rfs-mode == max-media-query, $val, $fluid-val);
|
213
293
|
|
214
294
|
// Include safari iframe resize fix if needed
|
215
295
|
min-width: if($rfs-safari-iframe-resize-bug-fix, (0 * 1vw), null);
|
216
296
|
}
|
297
|
+
|
298
|
+
@include _rfs-media-query-rule () {
|
299
|
+
#{$property}: if($rfs-mode == max-media-query, $fluid-val, $val);
|
300
|
+
}
|
217
301
|
}
|
218
302
|
}
|
219
303
|
}
|
220
304
|
|
221
|
-
//
|
222
|
-
@mixin font-size($
|
223
|
-
@include rfs($
|
305
|
+
// Shorthand helper mixins
|
306
|
+
@mixin font-size($value) {
|
307
|
+
@include rfs($value);
|
308
|
+
}
|
309
|
+
|
310
|
+
@mixin padding($value) {
|
311
|
+
@include rfs($value, padding);
|
312
|
+
}
|
313
|
+
|
314
|
+
@mixin padding-top($value) {
|
315
|
+
@include rfs($value, padding-top);
|
316
|
+
}
|
317
|
+
|
318
|
+
@mixin padding-right($value) {
|
319
|
+
@include rfs($value, padding-right);
|
320
|
+
}
|
321
|
+
|
322
|
+
@mixin padding-bottom($value) {
|
323
|
+
@include rfs($value, padding-bottom);
|
324
|
+
}
|
325
|
+
|
326
|
+
@mixin padding-left($value) {
|
327
|
+
@include rfs($value, padding-left);
|
328
|
+
}
|
329
|
+
|
330
|
+
@mixin margin($value) {
|
331
|
+
@include rfs($value, margin);
|
332
|
+
}
|
333
|
+
|
334
|
+
@mixin margin-top($value) {
|
335
|
+
@include rfs($value, margin-top);
|
336
|
+
}
|
337
|
+
|
338
|
+
@mixin margin-right($value) {
|
339
|
+
@include rfs($value, margin-right);
|
340
|
+
}
|
341
|
+
|
342
|
+
@mixin margin-bottom($value) {
|
343
|
+
@include rfs($value, margin-bottom);
|
224
344
|
}
|
225
345
|
|
226
|
-
@mixin
|
227
|
-
@include rfs($
|
346
|
+
@mixin margin-left($value) {
|
347
|
+
@include rfs($value, margin-left);
|
228
348
|
}
|
data/bootstrap.gemspec
CHANGED
@@ -14,23 +14,23 @@ Gem::Specification.new do |s|
|
|
14
14
|
# SassC requires Ruby 2.3.3. Also specify here to make it obvious.
|
15
15
|
s.required_ruby_version = '>= 2.3.3'
|
16
16
|
|
17
|
-
s.add_runtime_dependency 'popper_js', '>=
|
18
|
-
|
17
|
+
s.add_runtime_dependency 'popper_js', '>= 2.11.8', '< 3'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rake'
|
19
20
|
|
20
21
|
# Testing dependencies
|
21
|
-
s.add_development_dependency 'minitest', '~> 5.
|
22
|
-
s.add_development_dependency 'minitest-reporters', '~> 1.
|
22
|
+
s.add_development_dependency 'minitest', '~> 5.14.4'
|
23
|
+
s.add_development_dependency 'minitest-reporters', '~> 1.4.3'
|
23
24
|
s.add_development_dependency 'term-ansicolor'
|
24
25
|
# Integration testing
|
25
26
|
s.add_development_dependency 'capybara', '>= 2.6.0'
|
26
27
|
s.add_development_dependency 'cuprite'
|
27
28
|
# Dummy Rails app dependencies
|
29
|
+
s.add_development_dependency 'railties'
|
28
30
|
s.add_development_dependency 'actionpack', '>= 4.1.5'
|
29
31
|
s.add_development_dependency 'activesupport', '>= 4.1.5'
|
30
32
|
s.add_development_dependency 'json', '>= 1.8.1'
|
31
33
|
s.add_development_dependency 'sprockets-rails', '>= 2.3.2'
|
32
|
-
s.add_development_dependency 'jquery-rails', '>= 3.1.0'
|
33
|
-
s.add_development_dependency 'slim-rails'
|
34
34
|
s.add_development_dependency 'uglifier'
|
35
35
|
|
36
36
|
s.files = `git ls-files`.split("\n")
|
data/lib/bootstrap/engine.rb
CHANGED
data/lib/bootstrap/version.rb
CHANGED
data/tasks/updater/js.rb
CHANGED
@@ -3,8 +3,7 @@ require 'tsort'
|
|
3
3
|
|
4
4
|
class Updater
|
5
5
|
module Js
|
6
|
-
INLINED_SRCS = %w[
|
7
|
-
EXTERNAL_JS = %w[popper.js].freeze
|
6
|
+
INLINED_SRCS = %w[].freeze
|
8
7
|
|
9
8
|
def update_javascript_assets
|
10
9
|
log_status 'Updating javascripts...'
|
@@ -15,13 +14,26 @@ class Updater
|
|
15
14
|
log_processed "#{bootstrap_js_files * ' '}"
|
16
15
|
|
17
16
|
log_status 'Updating javascript manifest'
|
18
|
-
manifest =
|
17
|
+
manifest = "//= require ./bootstrap-global-this-define\n"
|
19
18
|
bootstrap_js_files.each do |name|
|
20
19
|
name = name.gsub(/\.js$/, '')
|
21
20
|
manifest << "//= require ./bootstrap/#{name}\n"
|
22
21
|
end
|
22
|
+
manifest << "//= require ./bootstrap-global-this-undefine\n"
|
23
23
|
dist_js = read_files('dist/js', %w(bootstrap.js bootstrap.min.js))
|
24
24
|
{
|
25
|
+
'assets/javascripts/bootstrap-global-this-define.js' => <<~JS,
|
26
|
+
// Set a `globalThis` so that bootstrap components are defined on window.bootstrap instead of window.
|
27
|
+
window['bootstrap'] = {
|
28
|
+
"@popperjs/core": window.Popper,
|
29
|
+
_originalGlobalThis: window['globalThis']
|
30
|
+
};
|
31
|
+
window['globalThis'] = window['bootstrap'];
|
32
|
+
JS
|
33
|
+
'assets/javascripts/bootstrap-global-this-undefine.js' => <<~JS,
|
34
|
+
window['globalThis'] = window['bootstrap']._originalGlobalThis;
|
35
|
+
window['bootstrap']._originalGlobalThis = null;
|
36
|
+
JS
|
25
37
|
'assets/javascripts/bootstrap-sprockets.js' => manifest,
|
26
38
|
'assets/javascripts/bootstrap.js' => dist_js['bootstrap.js'],
|
27
39
|
'assets/javascripts/bootstrap.min.js' => dist_js['bootstrap.min.js'],
|
@@ -39,9 +51,9 @@ class Updater
|
|
39
51
|
# Get the imports from the ES6 files to order requires correctly.
|
40
52
|
read_files('js/src', src_files).each do |name, content|
|
41
53
|
file_imports = content.scan(%r{import *(?:[a-zA-Z]*|\{[a-zA-Z ,]*\}) *from '([\w/.-]+)}).flatten(1).map do |f|
|
42
|
-
Pathname.new(name).dirname.join(f
|
54
|
+
Pathname.new(name).dirname.join(f).cleanpath.to_s
|
43
55
|
end.uniq
|
44
|
-
imports.add name, *(file_imports - INLINED_SRCS
|
56
|
+
imports.add name, *(file_imports - INLINED_SRCS)
|
45
57
|
end
|
46
58
|
imports.tsort
|
47
59
|
end
|
data/tasks/updater/network.rb
CHANGED
@@ -44,7 +44,7 @@ class Updater
|
|
44
44
|
if File.directory?(full_path)
|
45
45
|
files.each do |name|
|
46
46
|
path = "#{full_path}/#{name}"
|
47
|
-
contents[name] = File.read(path, mode: 'rb') if File.
|
47
|
+
contents[name] = File.read(path, mode: 'rb') if File.exist?(path)
|
48
48
|
end
|
49
49
|
end
|
50
50
|
contents
|
@@ -63,7 +63,7 @@ class Updater
|
|
63
63
|
uri = URI(url)
|
64
64
|
cache_path = "./#@cache_path#{uri.path}#{uri.query.tr('?&=', '-') if uri.query}"
|
65
65
|
FileUtils.mkdir_p File.dirname(cache_path)
|
66
|
-
if File.
|
66
|
+
if File.exist?(cache_path)
|
67
67
|
log_http_get_file url, true
|
68
68
|
File.read(cache_path, mode: 'rb')
|
69
69
|
else
|
data/tasks/updater/scss.rb
CHANGED
@@ -4,7 +4,7 @@ class Updater
|
|
4
4
|
log_status 'Updating scss...'
|
5
5
|
save_to = @save_to[:scss]
|
6
6
|
contents = {}
|
7
|
-
bootstrap_scss_files = get_paths_by_type('scss', /\.scss$/)
|
7
|
+
bootstrap_scss_files = get_paths_by_type('scss', /\.scss$/).reject { |p| p.start_with?('tests/') }
|
8
8
|
read_files('scss', bootstrap_scss_files).each do |name, file|
|
9
9
|
contents[name] = file
|
10
10
|
save_file("#{save_to}/#{name}", file)
|
@@ -12,7 +12,7 @@ class Updater
|
|
12
12
|
log_processed "#{bootstrap_scss_files * ' '}"
|
13
13
|
|
14
14
|
log_status 'Updating scss main files'
|
15
|
-
%w(bootstrap bootstrap-grid bootstrap-reboot).each do |name|
|
15
|
+
%w(bootstrap bootstrap-grid bootstrap-reboot bootstrap-utilities).each do |name|
|
16
16
|
# Compass treats non-partials as targets to copy into the main project, so make them partials.
|
17
17
|
# Also move them up a level to clearly indicate entry points.
|
18
18
|
from = "#{save_to}/#{name}.scss"
|
data/tasks/updater.rb
CHANGED
@@ -18,10 +18,10 @@ class Updater
|
|
18
18
|
include Js
|
19
19
|
include Scss
|
20
20
|
|
21
|
-
def initialize(repo: 'twbs/bootstrap', branch: '
|
21
|
+
def initialize(repo: 'twbs/bootstrap', branch: 'main', save_to: {}, cache_path: 'tmp/bootstrap-cache')
|
22
22
|
@logger = Logger.new
|
23
23
|
@repo = repo
|
24
|
-
@branch = branch || '
|
24
|
+
@branch = branch || 'main'
|
25
25
|
@branch_sha = get_branch_sha
|
26
26
|
@cache_path = cache_path
|
27
27
|
@repo_url = "https://github.com/#@repo"
|
@@ -1,7 +1,8 @@
|
|
1
|
-
//= require jquery
|
2
1
|
//= require popper.js
|
3
2
|
//= require bootstrap-sprockets
|
4
3
|
|
5
|
-
|
6
|
-
|
4
|
+
document.addEventListener('DOMContentLoaded', () => {
|
5
|
+
for (const tooltipTriggerEl of document.querySelectorAll('[data-bs-toggle="tooltip"]')) {
|
6
|
+
new bootstrap.Tooltip(tooltipTriggerEl)
|
7
|
+
}
|
7
8
|
});
|
@@ -1,14 +1,16 @@
|
|
1
1
|
<!DOCTYPE html>
|
2
2
|
<html>
|
3
3
|
<head>
|
4
|
+
<meta charset="utf-8">
|
4
5
|
<title>bootstrap Dummy App</title>
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
5
7
|
<%= stylesheet_link_tag 'application', media: "all", 'data-turbolinks-track' => true %>
|
6
|
-
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
|
7
8
|
<%= csrf_meta_tags %>
|
8
9
|
</head>
|
9
10
|
|
10
11
|
<body>
|
11
12
|
<%= yield %>
|
13
|
+
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
|
12
14
|
</body>
|
13
15
|
|
14
16
|
</html>
|