diff --git a/scss/_functions.scss b/scss/_functions.scss new file mode 100644 index 0000000000..870df42a79 --- /dev/null +++ b/scss/_functions.scss @@ -0,0 +1,39 @@ +@mixin _assert-ascending($map, $map-name) { + $prev-key: null; + $prev-num: null; + @each $key, $num in $map { + @if $prev-num == null { + // Do nothing + } @else if not comparable($prev-num, $num) { + @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; + } @else if $prev-num >= $num { + @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; + } + $prev-key: $key; + $prev-num: $num; + } +} + +// Replace `$search` with `$replace` in `$string` +// @author Hugo Giraudel +// @param {String} $string - Initial string +// @param {String} $search - Substring to replace +// @param {String} $replace ('') - New value +// @return {String} - Updated string +@function str-replace($string, $search, $replace: "") { + $index: str-index($string, $search); + + @if $index { + @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); + } + + @return $string; +} + +@mixin _assert-starts-at-zero($map) { + $values: map-values($map); + $first-value: nth($values, 1); + @if $first-value != 0 { + @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; + } +} diff --git a/scss/_variables.scss b/scss/_variables.scss index 5bd938c6b0..92d5e11e0a 100644 --- a/scss/_variables.scss +++ b/scss/_variables.scss @@ -6,7 +6,6 @@ // Variables should follow the `$component-state-property-size` formula for // consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. - // Table of Contents // // Colors @@ -44,51 +43,6 @@ // Close // Code -@mixin _assert-ascending($map, $map-name) { - $prev-key: null; - $prev-num: null; - @each $key, $num in $map { - @if $prev-num == null { - // Do nothing - } @else if not comparable($prev-num, $num) { - @warn "Potentially invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} whose unit makes it incomparable to #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } @else if $prev-num >= $num { - @warn "Invalid value for #{$map-name}: This map must be in ascending order, but key '#{$key}' has value #{$num} which isn't greater than #{$prev-num}, the value of the previous key '#{$prev-key}' !"; - } - $prev-key: $key; - $prev-num: $num; - } -} - -// Replace `$search` with `$replace` in `$string` -// @author Hugo Giraudel -// @param {String} $string - Initial string -// @param {String} $search - Substring to replace -// @param {String} $replace ('') - New value -// @return {String} - Updated string -@function str-replace($string, $search, $replace: "") { - $index: str-index($string, $search); - - @if $index { - @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace); - } - - @return $string; -} - -@mixin _assert-starts-at-zero($map) { - $values: map-values($map); - $first-value: nth($values, 1); - @if $first-value != 0 { - @warn "First breakpoint in `$grid-breakpoints` must start at 0, but starts at #{$first-value}."; - } -} - - -// General variable structure -// -// Variable format should follow the `$component-modifier-state-property` order. - // Colors // diff --git a/scss/bootstrap-grid.scss b/scss/bootstrap-grid.scss index 2ba6858775..722856c05c 100644 --- a/scss/bootstrap-grid.scss +++ b/scss/bootstrap-grid.scss @@ -23,6 +23,7 @@ html { } @import "custom"; +@import "functions"; @import "variables"; // diff --git a/scss/bootstrap-reboot.scss b/scss/bootstrap-reboot.scss index 5867f08ec9..5965022a99 100644 --- a/scss/bootstrap-reboot.scss +++ b/scss/bootstrap-reboot.scss @@ -3,6 +3,7 @@ // Includes only Normalize and our custom Reboot reset. @import "custom"; +@import "functions"; @import "variables"; @import "mixins"; diff --git a/scss/bootstrap.scss b/scss/bootstrap.scss index f7577f5c79..239d062cf6 100644 --- a/scss/bootstrap.scss +++ b/scss/bootstrap.scss @@ -5,14 +5,11 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ -// Core variables and mixins @import "custom"; +@import "functions"; @import "variables"; @import "mixins"; - @import "print"; - -// Core CSS @import "reboot"; @import "type"; @import "images"; @@ -21,8 +18,6 @@ @import "tables"; @import "forms"; @import "buttons"; - -// Components @import "transitions"; @import "dropdown"; @import "button-group"; @@ -41,12 +36,8 @@ @import "list-group"; @import "responsive-embed"; @import "close"; - -// Components w/ JavaScript @import "modal"; @import "tooltip"; @import "popover"; @import "carousel"; - -// Utility classes @import "utilities";