diff --git a/CHANGELOG.md b/CHANGELOG.md index 7c1b6569..55986de6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ master === +* Switch from Ruby Sass to SassC. * `relative_assets` extension overrides local `relative: false` option to stylesheet/javascript tag helpers. # 4.0.0.rc.1 diff --git a/middleman-core/features/slim.feature b/middleman-core/features/slim.feature index 2cdabecd..031120f3 100644 --- a/middleman-core/features/slim.feature +++ b/middleman-core/features/slim.feature @@ -78,4 +78,4 @@ Feature: Support slim templating language When I go to "/sass.html" Then I should see "html,body,div" When I go to "/error.html" - Then I should see "Error: Invalid" + Then I should see "Error:" diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_base.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_base.scss new file mode 100644 index 00000000..b7659885 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_base.scss @@ -0,0 +1,15 @@ +// Bitters 1.1.0 +// http://bitters.bourbon.io +// Copyright 2013-2015 thoughtbot, inc. +// MIT License + +@import "variables"; + +// Neat Settings -- uncomment if using Neat -- must be imported before Neat +// @import "grid-settings"; + +@import "buttons"; +@import "forms"; +@import "lists"; +@import "tables"; +@import "typography"; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_buttons.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_buttons.scss new file mode 100644 index 00000000..6ac7894f --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_buttons.scss @@ -0,0 +1,35 @@ +#{$all-buttons} { + appearance: none; + background-color: $action-color; + border: 0; + border-radius: $base-border-radius; + color: #fff; + cursor: pointer; + display: inline-block; + font-family: $base-font-family; + font-size: $base-font-size; + -webkit-font-smoothing: antialiased; + font-weight: 600; + line-height: 1; + padding: $small-spacing $base-spacing; + text-decoration: none; + transition: background-color $base-duration $base-timing; + user-select: none; + vertical-align: middle; + white-space: nowrap; + + &:hover, + &:focus { + background-color: shade($action-color, 20%); + color: #fff; + } + + &:disabled { + cursor: not-allowed; + opacity: 0.5; + + &:hover { + background-color: $action-color; + } + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_forms.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_forms.scss new file mode 100644 index 00000000..e8ae80a2 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_forms.scss @@ -0,0 +1,90 @@ +fieldset { + background-color: $secondary-background-color; + border: $base-border; + margin: 0 0 $small-spacing; + padding: $base-spacing; +} + +input, +label, +select { + display: block; + font-family: $base-font-family; + font-size: $base-font-size; +} + +label { + font-weight: 600; + margin-bottom: $small-spacing / 2; + + &.required::after { + content: "*"; + } + + abbr { + display: none; + } +} + +#{$all-text-inputs}, +select[multiple=multiple] { + background-color: $base-background-color; + border: $base-border; + border-radius: $base-border-radius; + box-shadow: $form-box-shadow; + box-sizing: border-box; + font-family: $base-font-family; + font-size: $base-font-size; + margin-bottom: $small-spacing; + padding: $base-spacing / 3; + transition: border-color $base-duration $base-timing; + width: 100%; + + &:hover { + border-color: shade($base-border-color, 20%); + } + + &:focus { + border-color: $action-color; + box-shadow: $form-box-shadow-focus; + outline: none; + } + + &:disabled { + background-color: shade($base-background-color, 5%); + cursor: not-allowed; + + &:hover { + border: $base-border; + } + } +} + +textarea { + resize: vertical; +} + +input[type="search"] { + appearance: none; +} + +input[type="checkbox"], +input[type="radio"] { + display: inline; + margin-right: $small-spacing / 2; + + + label { + display: inline-block; + } +} + +input[type="file"] { + margin-bottom: $small-spacing; + width: 100%; +} + +select { + margin-bottom: $base-spacing; + max-width: 100%; + width: auto; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_grid-settings.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_grid-settings.scss new file mode 100644 index 00000000..8a98a743 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_grid-settings.scss @@ -0,0 +1,14 @@ +@import "neat-helpers"; // or "../neat/neat-helpers" when not in Rails + +// Neat Overrides +// $column: 90px; +// $gutter: 30px; +// $grid-columns: 12; +// $max-width: 1200px; + +// Neat Breakpoints +$medium-screen: 600px; +$large-screen: 900px; + +$medium-screen-up: new-breakpoint(min-width $medium-screen 4); +$large-screen-up: new-breakpoint(min-width $large-screen 8); diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_lists.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_lists.scss new file mode 100644 index 00000000..c989d90f --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_lists.scss @@ -0,0 +1,31 @@ +ul, +ol { + list-style-type: none; + margin: 0; + padding: 0; + + &%default-ul { + list-style-type: disc; + margin-bottom: $small-spacing; + padding-left: $base-spacing; + } + + &%default-ol { + list-style-type: decimal; + margin-bottom: $small-spacing; + padding-left: $base-spacing; + } +} + +dl { + margin-bottom: $small-spacing; + + dt { + font-weight: bold; + margin-top: $small-spacing; + } + + dd { + margin: 0; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_tables.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_tables.scss new file mode 100644 index 00000000..61f527d5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_tables.scss @@ -0,0 +1,25 @@ +table { + border-collapse: collapse; + font-feature-settings: "kern", "liga", "tnum"; + margin: $small-spacing 0; + table-layout: fixed; + width: 100%; +} + +th { + border-bottom: 1px solid shade($base-border-color, 25%); + font-weight: 600; + padding: $small-spacing 0; + text-align: left; +} + +td { + border-bottom: $base-border; + padding: $small-spacing 0; +} + +tr, +td, +th { + vertical-align: middle; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_typography.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_typography.scss new file mode 100644 index 00000000..e60951db --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_typography.scss @@ -0,0 +1,49 @@ +body { + color: $base-font-color; + font-family: $base-font-family; + font-feature-settings: "kern", "liga", "pnum"; + font-size: $base-font-size; + line-height: $base-line-height; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: $heading-font-family; + font-size: $base-font-size; + line-height: $heading-line-height; + margin: 0 0 $small-spacing; +} + +p { + margin: 0 0 $small-spacing; +} + +a { + color: $action-color; + text-decoration: none; + transition: color $base-duration $base-timing; + + &:active, + &:focus, + &:hover { + color: shade($action-color, 25%); + } +} + +hr { + border-bottom: $base-border; + border-left: 0; + border-right: 0; + border-top: 0; + margin: $base-spacing 0; +} + +img, +picture { + margin: 0; + max-width: 100%; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_variables.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_variables.scss new file mode 100644 index 00000000..2a9d117a --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/base/_variables.scss @@ -0,0 +1,42 @@ +// Typography +$base-font-family: $helvetica; +$heading-font-family: $base-font-family; + +// Font Sizes +$base-font-size: 1em; + +// Line height +$base-line-height: 1.5; +$heading-line-height: 1.2; + +// Other Sizes +$base-border-radius: 3px; +$base-spacing: $base-line-height * 1em; +$small-spacing: $base-spacing / 2; +$base-z-index: 0; + +// Colors +$blue: #477dca; +$dark-gray: #333; +$medium-gray: #999; +$light-gray: #ddd; + +// Font Colors +$base-font-color: $dark-gray; +$action-color: $blue; + +// Border +$base-border-color: $light-gray; +$base-border: 1px solid $base-border-color; + +// Background Colors +$base-background-color: #fff; +$secondary-background-color: tint($base-border-color, 75%); + +// Forms +$form-box-shadow: inset 0 1px 3px rgba(#000, 0.06); +$form-box-shadow-focus: $form-box-shadow, 0 0 5px adjust-color($action-color, $lightness: -5%, $alpha: -0.3); + +// Animations +$base-duration: 150ms; +$base-timing: ease; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon-deprecated-upcoming.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon-deprecated-upcoming.scss new file mode 100644 index 00000000..e6d1b8ce --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon-deprecated-upcoming.scss @@ -0,0 +1,411 @@ +// The following features have been deprecated and will be removed in the next MAJOR version release + +@mixin inline-block { + display: inline-block; + + @warn "The inline-block mixin is deprecated and will be removed in the next major version release"; +} + +@mixin button ($style: simple, $base-color: #4294f0, $text-size: inherit, $padding: 7px 18px) { + + @if type-of($style) == string and type-of($base-color) == color { + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == string and type-of($base-color) == number { + $padding: $text-size; + $text-size: $base-color; + $base-color: #4294f0; + + @if $padding == inherit { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == color and type-of($base-color) == color { + $base-color: $style; + $style: simple; + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == color and type-of($base-color) == number { + $padding: $text-size; + $text-size: $base-color; + $base-color: $style; + $style: simple; + + @if $padding == inherit { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + @if type-of($style) == number { + $padding: $base-color; + $text-size: $style; + $base-color: #4294f0; + $style: simple; + + @if $padding == #4294f0 { + $padding: 7px 18px; + } + + @include buttonstyle($style, $base-color, $text-size, $padding); + } + + &:disabled { + cursor: not-allowed; + opacity: 0.5; + } + + @warn "The button mixin is deprecated and will be removed in the next major version release"; +} + +// Selector Style Button +@mixin buttonstyle($type, $b-color, $t-size, $pad) { + // Grayscale button + @if $type == simple and $b-color == grayscale($b-color) { + @include simple($b-color, true, $t-size, $pad); + } + + @if $type == shiny and $b-color == grayscale($b-color) { + @include shiny($b-color, true, $t-size, $pad); + } + + @if $type == pill and $b-color == grayscale($b-color) { + @include pill($b-color, true, $t-size, $pad); + } + + @if $type == flat and $b-color == grayscale($b-color) { + @include flat($b-color, true, $t-size, $pad); + } + + // Colored button + @if $type == simple { + @include simple($b-color, false, $t-size, $pad); + } + + @else if $type == shiny { + @include shiny($b-color, false, $t-size, $pad); + } + + @else if $type == pill { + @include pill($b-color, false, $t-size, $pad); + } + + @else if $type == flat { + @include flat($b-color, false, $t-size, $pad); + } +} + +// Simple Button +@mixin simple($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $color: hsl(0, 0, 100%); + $border: adjust-color($base-color, $saturation: 9%, $lightness: -14%); + $inset-shadow: adjust-color($base-color, $saturation: -8%, $lightness: 15%); + $stop-gradient: adjust-color($base-color, $saturation: 9%, $lightness: -11%); + $text-shadow: adjust-color($base-color, $saturation: 15%, $lightness: -18%); + + @if is-light($base-color) { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border: grayscale($border); + $inset-shadow: grayscale($inset-shadow); + $stop-gradient: grayscale($stop-gradient); + $text-shadow: grayscale($text-shadow); + } + + border: 1px solid $border; + border-radius: 3px; + box-shadow: inset 0 1px 0 0 $inset-shadow; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: bold; + @include linear-gradient ($base-color, $stop-gradient); + padding: $padding; + text-decoration: none; + text-shadow: 0 1px 0 $text-shadow; + background-clip: padding-box; + + &:hover:not(:disabled) { + $base-color-hover: adjust-color($base-color, $saturation: -4%, $lightness: -5%); + $inset-shadow-hover: adjust-color($base-color, $saturation: -7%, $lightness: 5%); + $stop-gradient-hover: adjust-color($base-color, $saturation: 8%, $lightness: -14%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + $inset-shadow-hover: grayscale($inset-shadow-hover); + $stop-gradient-hover: grayscale($stop-gradient-hover); + } + + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + + box-shadow: inset 0 1px 0 0 $inset-shadow-hover; + cursor: pointer; + } + + &:active:not(:disabled), + &:focus:not(:disabled) { + $border-active: adjust-color($base-color, $saturation: 9%, $lightness: -14%); + $inset-shadow-active: adjust-color($base-color, $saturation: 7%, $lightness: -17%); + + @if $grayscale == true { + $border-active: grayscale($border-active); + $inset-shadow-active: grayscale($inset-shadow-active); + } + + border: 1px solid $border-active; + box-shadow: inset 0 0 8px 4px $inset-shadow-active, inset 0 0 8px 4px $inset-shadow-active; + } +} + +// Shiny Button +@mixin shiny($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $color: hsl(0, 0, 100%); + $border: adjust-color($base-color, $red: -117, $green: -111, $blue: -81); + $border-bottom: adjust-color($base-color, $red: -126, $green: -127, $blue: -122); + $fourth-stop: adjust-color($base-color, $red: -79, $green: -70, $blue: -46); + $inset-shadow: adjust-color($base-color, $red: 37, $green: 29, $blue: 12); + $second-stop: adjust-color($base-color, $red: -56, $green: -50, $blue: -33); + $text-shadow: adjust-color($base-color, $red: -140, $green: -141, $blue: -114); + $third-stop: adjust-color($base-color, $red: -86, $green: -75, $blue: -48); + + @if is-light($base-color) { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border: grayscale($border); + $border-bottom: grayscale($border-bottom); + $fourth-stop: grayscale($fourth-stop); + $inset-shadow: grayscale($inset-shadow); + $second-stop: grayscale($second-stop); + $text-shadow: grayscale($text-shadow); + $third-stop: grayscale($third-stop); + } + + @include linear-gradient(top, $base-color 0%, $second-stop 50%, $third-stop 50%, $fourth-stop 100%); + + border: 1px solid $border; + border-bottom: 1px solid $border-bottom; + border-radius: 5px; + box-shadow: inset 0 1px 0 0 $inset-shadow; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: bold; + padding: $padding; + text-align: center; + text-decoration: none; + text-shadow: 0 -1px 1px $text-shadow; + + &:hover:not(:disabled) { + $first-stop-hover: adjust-color($base-color, $red: -13, $green: -15, $blue: -18); + $second-stop-hover: adjust-color($base-color, $red: -66, $green: -62, $blue: -51); + $third-stop-hover: adjust-color($base-color, $red: -93, $green: -85, $blue: -66); + $fourth-stop-hover: adjust-color($base-color, $red: -86, $green: -80, $blue: -63); + + @if $grayscale == true { + $first-stop-hover: grayscale($first-stop-hover); + $second-stop-hover: grayscale($second-stop-hover); + $third-stop-hover: grayscale($third-stop-hover); + $fourth-stop-hover: grayscale($fourth-stop-hover); + } + + @include linear-gradient(top, $first-stop-hover 0%, + $second-stop-hover 50%, + $third-stop-hover 50%, + $fourth-stop-hover 100%); + cursor: pointer; + } + + &:active:not(:disabled), + &:focus:not(:disabled) { + $inset-shadow-active: adjust-color($base-color, $red: -111, $green: -116, $blue: -122); + + @if $grayscale == true { + $inset-shadow-active: grayscale($inset-shadow-active); + } + + box-shadow: inset 0 0 20px 0 $inset-shadow-active; + } +} + +// Pill Button +@mixin pill($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $color: hsl(0, 0, 100%); + $border-bottom: adjust-color($base-color, $hue: 8, $saturation: -11%, $lightness: -26%); + $border-sides: adjust-color($base-color, $hue: 4, $saturation: -21%, $lightness: -21%); + $border-top: adjust-color($base-color, $hue: -1, $saturation: -30%, $lightness: -15%); + $inset-shadow: adjust-color($base-color, $hue: -1, $saturation: -1%, $lightness: 7%); + $stop-gradient: adjust-color($base-color, $hue: 8, $saturation: 14%, $lightness: -10%); + $text-shadow: adjust-color($base-color, $hue: 5, $saturation: -19%, $lightness: -15%); + + @if is-light($base-color) { + $color: hsl(0, 0, 20%); + $text-shadow: adjust-color($base-color, $saturation: 10%, $lightness: 4%); + } + + @if $grayscale == true { + $border-bottom: grayscale($border-bottom); + $border-sides: grayscale($border-sides); + $border-top: grayscale($border-top); + $inset-shadow: grayscale($inset-shadow); + $stop-gradient: grayscale($stop-gradient); + $text-shadow: grayscale($text-shadow); + } + + border: 1px solid $border-top; + border-color: $border-top $border-sides $border-bottom; + border-radius: 16px; + box-shadow: inset 0 1px 0 0 $inset-shadow; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: normal; + line-height: 1; + @include linear-gradient ($base-color, $stop-gradient); + padding: $padding; + text-align: center; + text-decoration: none; + text-shadow: 0 -1px 1px $text-shadow; + background-clip: padding-box; + + &:hover:not(:disabled) { + $base-color-hover: adjust-color($base-color, $lightness: -4.5%); + $border-bottom: adjust-color($base-color, $hue: 8, $saturation: 13.5%, $lightness: -32%); + $border-sides: adjust-color($base-color, $hue: 4, $saturation: -2%, $lightness: -27%); + $border-top: adjust-color($base-color, $hue: -1, $saturation: -17%, $lightness: -21%); + $inset-shadow-hover: adjust-color($base-color, $saturation: -1%, $lightness: 3%); + $stop-gradient-hover: adjust-color($base-color, $hue: 8, $saturation: -4%, $lightness: -15.5%); + $text-shadow-hover: adjust-color($base-color, $hue: 5, $saturation: -5%, $lightness: -22%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + $border-bottom: grayscale($border-bottom); + $border-sides: grayscale($border-sides); + $border-top: grayscale($border-top); + $inset-shadow-hover: grayscale($inset-shadow-hover); + $stop-gradient-hover: grayscale($stop-gradient-hover); + $text-shadow-hover: grayscale($text-shadow-hover); + } + + @include linear-gradient ($base-color-hover, $stop-gradient-hover); + + background-clip: padding-box; + border: 1px solid $border-top; + border-color: $border-top $border-sides $border-bottom; + box-shadow: inset 0 1px 0 0 $inset-shadow-hover; + cursor: pointer; + text-shadow: 0 -1px 1px $text-shadow-hover; + } + + &:active:not(:disabled), + &:focus:not(:disabled) { + $active-color: adjust-color($base-color, $hue: 4, $saturation: -12%, $lightness: -10%); + $border-active: adjust-color($base-color, $hue: 6, $saturation: -2.5%, $lightness: -30%); + $border-bottom-active: adjust-color($base-color, $hue: 11, $saturation: 6%, $lightness: -31%); + $inset-shadow-active: adjust-color($base-color, $hue: 9, $saturation: 2%, $lightness: -21.5%); + $text-shadow-active: adjust-color($base-color, $hue: 5, $saturation: -12%, $lightness: -21.5%); + + @if $grayscale == true { + $active-color: grayscale($active-color); + $border-active: grayscale($border-active); + $border-bottom-active: grayscale($border-bottom-active); + $inset-shadow-active: grayscale($inset-shadow-active); + $text-shadow-active: grayscale($text-shadow-active); + } + + background: $active-color; + border: 1px solid $border-active; + border-bottom: 1px solid $border-bottom-active; + box-shadow: inset 0 0 6px 3px $inset-shadow-active; + text-shadow: 0 -1px 1px $text-shadow-active; + } +} + +// Flat Button +@mixin flat($base-color, $grayscale: false, $textsize: inherit, $padding: 7px 18px) { + $color: hsl(0, 0, 100%); + + @if is-light($base-color) { + $color: hsl(0, 0, 20%); + } + + background-color: $base-color; + border-radius: 3px; + border: 0; + color: $color; + display: inline-block; + font-size: $textsize; + font-weight: bold; + padding: $padding; + text-decoration: none; + background-clip: padding-box; + + &:hover:not(:disabled){ + $base-color-hover: adjust-color($base-color, $saturation: 4%, $lightness: 5%); + + @if $grayscale == true { + $base-color-hover: grayscale($base-color-hover); + } + + background-color: $base-color-hover; + cursor: pointer; + } + + &:active:not(:disabled), + &:focus:not(:disabled) { + $base-color-active: adjust-color($base-color, $saturation: -4%, $lightness: -5%); + + @if $grayscale == true { + $base-color-active: grayscale($base-color-active); + } + + background-color: $base-color-active; + cursor: pointer; + } +} + +// Flexible grid +@function flex-grid($columns, $container-columns: $fg-max-columns) { + $width: $columns * $fg-column + ($columns - 1) * $fg-gutter; + $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; + @return percentage($width / $container-width); + + @warn "The flex-grid function is deprecated and will be removed in the next major version release"; +} + +// Flexible gutter +@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) { + $container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter; + @return percentage($gutter / $container-width); + + @warn "The flex-gutter function is deprecated and will be removed in the next major version release"; +} + +@function grid-width($n) { + @return $n * $gw-column + ($n - 1) * $gw-gutter; + + @warn "The grid-width function is deprecated and will be removed in the next major version release"; +} + +@function golden-ratio($value, $increment) { + @return modular-scale($increment, $value, $ratio: $golden); + + @warn "The golden-ratio function is deprecated and will be removed in the next major version release. Please use the modular-scale function, instead."; +} + +@mixin box-sizing($box) { + @include prefixer(box-sizing, $box, webkit moz spec); + + @warn "The box-sizing mixin is deprecated and will be removed in the next major version release. This property can now be used un-prefixed."; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon.scss new file mode 100644 index 00000000..34b0cd47 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/_bourbon.scss @@ -0,0 +1,87 @@ +// Bourbon 4.2.5 +// http://bourbon.io +// Copyright 2011-2015 thoughtbot, inc. +// MIT License + +@import "settings/prefixer"; +@import "settings/px-to-em"; +@import "settings/asset-pipeline"; + +@import "functions/assign-inputs"; +@import "functions/contains"; +@import "functions/contains-falsy"; +@import "functions/is-length"; +@import "functions/is-light"; +@import "functions/is-number"; +@import "functions/is-size"; +@import "functions/px-to-em"; +@import "functions/px-to-rem"; +@import "functions/shade"; +@import "functions/strip-units"; +@import "functions/tint"; +@import "functions/transition-property-name"; +@import "functions/unpack"; +@import "functions/modular-scale"; + +@import "helpers/convert-units"; +@import "helpers/directional-values"; +@import "helpers/font-source-declaration"; +@import "helpers/gradient-positions-parser"; +@import "helpers/linear-angle-parser"; +@import "helpers/linear-gradient-parser"; +@import "helpers/linear-positions-parser"; +@import "helpers/linear-side-corner-parser"; +@import "helpers/radial-arg-parser"; +@import "helpers/radial-positions-parser"; +@import "helpers/radial-gradient-parser"; +@import "helpers/render-gradients"; +@import "helpers/shape-size-stripper"; +@import "helpers/str-to-num"; + +@import "css3/animation"; +@import "css3/appearance"; +@import "css3/backface-visibility"; +@import "css3/background"; +@import "css3/background-image"; +@import "css3/border-image"; +@import "css3/calc"; +@import "css3/columns"; +@import "css3/filter"; +@import "css3/flex-box"; +@import "css3/font-face"; +@import "css3/font-feature-settings"; +@import "css3/hidpi-media-query"; +@import "css3/hyphens"; +@import "css3/image-rendering"; +@import "css3/keyframes"; +@import "css3/linear-gradient"; +@import "css3/perspective"; +@import "css3/placeholder"; +@import "css3/radial-gradient"; +@import "css3/selection"; +@import "css3/text-decoration"; +@import "css3/transform"; +@import "css3/transition"; +@import "css3/user-select"; + +@import "addons/border-color"; +@import "addons/border-radius"; +@import "addons/border-style"; +@import "addons/border-width"; +@import "addons/buttons"; +@import "addons/clearfix"; +@import "addons/ellipsis"; +@import "addons/font-stacks"; +@import "addons/hide-text"; +@import "addons/margin"; +@import "addons/padding"; +@import "addons/position"; +@import "addons/prefixer"; +@import "addons/retina-image"; +@import "addons/size"; +@import "addons/text-inputs"; +@import "addons/timing-functions"; +@import "addons/triangle"; +@import "addons/word-wrap"; + +@import "bourbon-deprecated-upcoming"; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-color.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-color.scss new file mode 100644 index 00000000..6f6ab36c --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-color.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-color` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-color(#a60b55 #76cd9c null #e8ae1a); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-left-color: #e8ae1a; +/// border-right-color: #76cd9c; +/// border-top-color: #a60b55; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-color` + +@mixin border-color($vals...) { + @include directional-property(border, color, $vals...); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-radius.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-radius.scss new file mode 100644 index 00000000..1f658633 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-radius.scss @@ -0,0 +1,48 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-radius` on both corners on the side of a box. +/// +/// @param {Number} $radii +/// List of arguments +/// +/// @example scss - Usage +/// .element-one { +/// @include border-top-radius(5px); +/// } +/// +/// .element-two { +/// @include border-left-radius(3px); +/// } +/// +/// @example css - CSS Output +/// .element-one { +/// border-top-left-radius: 5px; +/// border-top-right-radius: 5px; +/// } +/// +/// .element-two { +/// border-bottom-left-radius: 3px; +/// border-top-left-radius: 3px; +/// } +/// +/// @output `border-radius` + +@mixin border-top-radius($radii) { + border-top-left-radius: $radii; + border-top-right-radius: $radii; +} + +@mixin border-right-radius($radii) { + border-bottom-right-radius: $radii; + border-top-right-radius: $radii; +} + +@mixin border-bottom-radius($radii) { + border-bottom-left-radius: $radii; + border-bottom-right-radius: $radii; +} + +@mixin border-left-radius($radii) { + border-bottom-left-radius: $radii; + border-top-left-radius: $radii; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-style.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-style.scss new file mode 100644 index 00000000..d86ee79d --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-style.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-style` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-style(dashed null solid); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-style: solid; +/// border-top-style: dashed; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-style` + +@mixin border-style($vals...) { + @include directional-property(border, style, $vals...); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-width.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-width.scss new file mode 100644 index 00000000..0ea2d4b7 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_border-width.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `border-width` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include border-width(1em null 20px); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-width: 20px; +/// border-top-width: 1em; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `border-width` + +@mixin border-width($vals...) { + @include directional-property(border, width, $vals...); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_buttons.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_buttons.scss new file mode 100644 index 00000000..debeabc5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_buttons.scss @@ -0,0 +1,64 @@ +@charset "UTF-8"; + +/// Generates variables for all buttons. Please note that you must use interpolation on the variable: `#{$all-buttons}`. +/// +/// @example scss - Usage +/// #{$all-buttons} { +/// background-color: #f00; +/// } +/// +/// #{$all-buttons-focus}, +/// #{$all-buttons-hover} { +/// background-color: #0f0; +/// } +/// +/// #{$all-buttons-active} { +/// background-color: #00f; +/// } +/// +/// @example css - CSS Output +/// button, +/// input[type="button"], +/// input[type="reset"], +/// input[type="submit"] { +/// background-color: #f00; +/// } +/// +/// button:focus, +/// input[type="button"]:focus, +/// input[type="reset"]:focus, +/// input[type="submit"]:focus, +/// button:hover, +/// input[type="button"]:hover, +/// input[type="reset"]:hover, +/// input[type="submit"]:hover { +/// background-color: #0f0; +/// } +/// +/// button:active, +/// input[type="button"]:active, +/// input[type="reset"]:active, +/// input[type="submit"]:active { +/// background-color: #00f; +/// } +/// +/// @require assign-inputs +/// +/// @type List +/// +/// @todo Remove double assigned variables (Lines 59–62) in v5.0.0 + +$buttons-list: 'button', + 'input[type="button"]', + 'input[type="reset"]', + 'input[type="submit"]'; + +$all-buttons: assign-inputs($buttons-list); +$all-buttons-active: assign-inputs($buttons-list, active); +$all-buttons-focus: assign-inputs($buttons-list, focus); +$all-buttons-hover: assign-inputs($buttons-list, hover); + +$all-button-inputs: $all-buttons; +$all-button-inputs-active: $all-buttons-active; +$all-button-inputs-focus: $all-buttons-focus; +$all-button-inputs-hover: $all-buttons-hover; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_clearfix.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_clearfix.scss new file mode 100644 index 00000000..11313d66 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_clearfix.scss @@ -0,0 +1,25 @@ +@charset "UTF-8"; + +/// Provides an easy way to include a clearfix for containing floats. +/// +/// @link http://cssmojo.com/latest_new_clearfix_so_far/ +/// +/// @example scss - Usage +/// .element { +/// @include clearfix; +/// } +/// +/// @example css - CSS Output +/// .element::after { +/// clear: both; +/// content: ""; +/// display: table; +/// } + +@mixin clearfix { + &::after { + clear: both; + content: ""; + display: table; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_ellipsis.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_ellipsis.scss new file mode 100644 index 00000000..a367f651 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_ellipsis.scss @@ -0,0 +1,30 @@ +@charset "UTF-8"; + +/// Truncates text and adds an ellipsis to represent overflow. +/// +/// @param {Number} $width [100%] +/// Max-width for the string to respect before being truncated +/// +/// @example scss - Usage +/// .element { +/// @include ellipsis; +/// } +/// +/// @example css - CSS Output +/// .element { +/// display: inline-block; +/// max-width: 100%; +/// overflow: hidden; +/// text-overflow: ellipsis; +/// white-space: nowrap; +/// word-wrap: normal; +/// } + +@mixin ellipsis($width: 100%) { + display: inline-block; + max-width: $width; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + word-wrap: normal; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_font-stacks.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_font-stacks.scss new file mode 100644 index 00000000..57128f42 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_font-stacks.scss @@ -0,0 +1,31 @@ +@charset "UTF-8"; + +/// Georgia font stack. +/// +/// @type List + +$georgia: "Georgia", "Cambria", "Times New Roman", "Times", serif; + +/// Helvetica font stack. +/// +/// @type List + +$helvetica: "Helvetica Neue", "Helvetica", "Roboto", "Arial", sans-serif; + +/// Lucida Grande font stack. +/// +/// @type List + +$lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif; + +/// Monospace font stack. +/// +/// @type List + +$monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace; + +/// Verdana font stack. +/// +/// @type List + +$verdana: "Verdana", "Geneva", sans-serif; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_hide-text.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_hide-text.scss new file mode 100644 index 00000000..4caf20ed --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_hide-text.scss @@ -0,0 +1,27 @@ +/// Hides the text in an element, commonly used to show an image. Some elements will need block-level styles applied. +/// +/// @link http://zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement +/// +/// @example scss - Usage +/// .element { +/// @include hide-text; +/// } +/// +/// @example css - CSS Output +/// .element { +/// overflow: hidden; +/// text-indent: 101%; +/// white-space: nowrap; +/// } +/// +/// @todo Remove height argument in v5.0.0 + +@mixin hide-text($height: null) { + overflow: hidden; + text-indent: 101%; + white-space: nowrap; + + @if $height { + @warn "The `hide-text` mixin has changed and no longer requires a height. The height argument will no longer be accepted in v5.0.0"; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_margin.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_margin.scss new file mode 100644 index 00000000..674f4e5f --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_margin.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `margin` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include margin(null 10px 3em 20vh); +/// } +/// +/// @example css - CSS Output +/// .element { +/// margin-bottom: 3em; +/// margin-left: 20vh; +/// margin-right: 10px; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `margin` + +@mixin margin($vals...) { + @include directional-property(margin, false, $vals...); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_padding.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_padding.scss new file mode 100644 index 00000000..40a5f006 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_padding.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Provides a quick method for targeting `padding` on specific sides of a box. Use a `null` value to “skip” a side. +/// +/// @param {Arglist} $vals +/// List of arguments +/// +/// @example scss - Usage +/// .element { +/// @include padding(12vh null 10px 5%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// padding-bottom: 10px; +/// padding-left: 5%; +/// padding-top: 12vh; +/// } +/// +/// @require {mixin} directional-property +/// +/// @output `padding` + +@mixin padding($vals...) { + @include directional-property(padding, false, $vals...); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_position.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_position.scss new file mode 100644 index 00000000..e460f3ff --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_position.scss @@ -0,0 +1,48 @@ +@charset "UTF-8"; + +/// Provides a quick method for setting an element’s position. Use a `null` value to “skip” a side. +/// +/// @param {Position} $position [relative] +/// A CSS position value +/// +/// @param {Arglist} $coordinates [null null null null] +/// List of values that correspond to the 4-value syntax for the edges of a box +/// +/// @example scss - Usage +/// .element { +/// @include position(absolute, 0 null null 10em); +/// } +/// +/// @example css - CSS Output +/// .element { +/// left: 10em; +/// position: absolute; +/// top: 0; +/// } +/// +/// @require {function} is-length +/// @require {function} unpack + +@mixin position($position: relative, $coordinates: null null null null) { + @if type-of($position) == list { + $coordinates: $position; + $position: relative; + } + + $coordinates: unpack($coordinates); + + $offsets: ( + top: nth($coordinates, 1), + right: nth($coordinates, 2), + bottom: nth($coordinates, 3), + left: nth($coordinates, 4) + ); + + position: $position; + + @each $offset, $value in $offsets { + @if is-length($value) { + #{$offset}: $value; + } + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_prefixer.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_prefixer.scss new file mode 100644 index 00000000..2b6f7313 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_prefixer.scss @@ -0,0 +1,66 @@ +@charset "UTF-8"; + +/// A mixin for generating vendor prefixes on non-standardized properties. +/// +/// @param {String} $property +/// Property to prefix +/// +/// @param {*} $value +/// Value to use +/// +/// @param {List} $prefixes +/// Prefixes to define +/// +/// @example scss - Usage +/// .element { +/// @include prefixer(border-radius, 10px, webkit ms spec); +/// } +/// +/// @example css - CSS Output +/// .element { +/// -webkit-border-radius: 10px; +/// -moz-border-radius: 10px; +/// border-radius: 10px; +/// } +/// +/// @require {variable} $prefix-for-webkit +/// @require {variable} $prefix-for-mozilla +/// @require {variable} $prefix-for-microsoft +/// @require {variable} $prefix-for-opera +/// @require {variable} $prefix-for-spec + +@mixin prefixer($property, $value, $prefixes) { + @each $prefix in $prefixes { + @if $prefix == webkit { + @if $prefix-for-webkit { + -webkit-#{$property}: $value; + } + } @else if $prefix == moz { + @if $prefix-for-mozilla { + -moz-#{$property}: $value; + } + } @else if $prefix == ms { + @if $prefix-for-microsoft { + -ms-#{$property}: $value; + } + } @else if $prefix == o { + @if $prefix-for-opera { + -o-#{$property}: $value; + } + } @else if $prefix == spec { + @if $prefix-for-spec { + #{$property}: $value; + } + } @else { + @warn "Unrecognized prefix: #{$prefix}"; + } + } +} + +@mixin disable-prefix-for-all() { + $prefix-for-webkit: false !global; + $prefix-for-mozilla: false !global; + $prefix-for-microsoft: false !global; + $prefix-for-opera: false !global; + $prefix-for-spec: false !global; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_retina-image.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_retina-image.scss new file mode 100644 index 00000000..7febbd75 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_retina-image.scss @@ -0,0 +1,25 @@ +@mixin retina-image($filename, $background-size, $extension: png, $retina-filename: null, $retina-suffix: _2x, $asset-pipeline: $asset-pipeline) { + @if $asset-pipeline { + background-image: image-url("#{$filename}.#{$extension}"); + } @else { + background-image: url("#{$filename}.#{$extension}"); + } + + @include hidpi { + @if $asset-pipeline { + @if $retina-filename { + background-image: image-url("#{$retina-filename}.#{$extension}"); + } @else { + background-image: image-url("#{$filename}#{$retina-suffix}.#{$extension}"); + } + } @else { + @if $retina-filename { + background-image: url("#{$retina-filename}.#{$extension}"); + } @else { + background-image: url("#{$filename}#{$retina-suffix}.#{$extension}"); + } + } + + background-size: $background-size; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_size.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_size.scss new file mode 100644 index 00000000..a2992a34 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_size.scss @@ -0,0 +1,51 @@ +@charset "UTF-8"; + +/// Sets the `width` and `height` of the element. +/// +/// @param {List} $size +/// A list of at most 2 size values. +/// +/// If there is only a single value in `$size` it is used for both width and height. All units are supported. +/// +/// @example scss - Usage +/// .first-element { +/// @include size(2em); +/// } +/// +/// .second-element { +/// @include size(auto 10em); +/// } +/// +/// @example css - CSS Output +/// .first-element { +/// width: 2em; +/// height: 2em; +/// } +/// +/// .second-element { +/// width: auto; +/// height: 10em; +/// } +/// +/// @todo Refactor in 5.0.0 to use a comma-separated argument + +@mixin size($value) { + $width: nth($value, 1); + $height: $width; + + @if length($value) > 1 { + $height: nth($value, 2); + } + + @if is-size($height) { + height: $height; + } @else { + @warn "`#{$height}` is not a valid length for the `$height` parameter in the `size` mixin."; + } + + @if is-size($width) { + width: $width; + } @else { + @warn "`#{$width}` is not a valid length for the `$width` parameter in the `size` mixin."; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_text-inputs.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_text-inputs.scss new file mode 100644 index 00000000..1eb7a545 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_text-inputs.scss @@ -0,0 +1,113 @@ +@charset "UTF-8"; + +/// Generates variables for all text-based inputs. Please note that you must use interpolation on the variable: `#{$all-text-inputs}`. +/// +/// @example scss - Usage +/// #{$all-text-inputs} { +/// border: 1px solid #f00; +/// } +/// +/// #{$all-text-inputs-focus}, +/// #{$all-text-inputs-hover} { +/// border: 1px solid #0f0; +/// } +/// +/// #{$all-text-inputs-active} { +/// border: 1px solid #00f; +/// } +/// +/// @example css - CSS Output +/// input[type="color"], +/// input[type="date"], +/// input[type="datetime"], +/// input[type="datetime-local"], +/// input[type="email"], +/// input[type="month"], +/// input[type="number"], +/// input[type="password"], +/// input[type="search"], +/// input[type="tel"], +/// input[type="text"], +/// input[type="time"], +/// input[type="url"], +/// input[type="week"], +/// textarea { +/// border: 1px solid #f00; +/// } +/// +/// input[type="color"]:focus, +/// input[type="date"]:focus, +/// input[type="datetime"]:focus, +/// input[type="datetime-local"]:focus, +/// input[type="email"]:focus, +/// input[type="month"]:focus, +/// input[type="number"]:focus, +/// input[type="password"]:focus, +/// input[type="search"]:focus, +/// input[type="tel"]:focus, +/// input[type="text"]:focus, +/// input[type="time"]:focus, +/// input[type="url"]:focus, +/// input[type="week"]:focus, +/// textarea:focus, +/// input[type="color"]:hover, +/// input[type="date"]:hover, +/// input[type="datetime"]:hover, +/// input[type="datetime-local"]:hover, +/// input[type="email"]:hover, +/// input[type="month"]:hover, +/// input[type="number"]:hover, +/// input[type="password"]:hover, +/// input[type="search"]:hover, +/// input[type="tel"]:hover, +/// input[type="text"]:hover, +/// input[type="time"]:hover, +/// input[type="url"]:hover, +/// input[type="week"]:hover, +/// textarea:hover { +/// border: 1px solid #0f0; +/// } +/// +/// input[type="color"]:active, +/// input[type="date"]:active, +/// input[type="datetime"]:active, +/// input[type="datetime-local"]:active, +/// input[type="email"]:active, +/// input[type="month"]:active, +/// input[type="number"]:active, +/// input[type="password"]:active, +/// input[type="search"]:active, +/// input[type="tel"]:active, +/// input[type="text"]:active, +/// input[type="time"]:active, +/// input[type="url"]:active, +/// input[type="week"]:active, +/// textarea:active { +/// border: 1px solid #00f; +/// } +/// +/// @require assign-inputs +/// +/// @type List + +$text-inputs-list: 'input[type="color"]', + 'input[type="date"]', + 'input[type="datetime"]', + 'input[type="datetime-local"]', + 'input[type="email"]', + 'input[type="month"]', + 'input[type="number"]', + 'input[type="password"]', + 'input[type="search"]', + 'input[type="tel"]', + 'input[type="text"]', + 'input[type="time"]', + 'input[type="url"]', + 'input[type="week"]', + 'input:not([type])', + 'textarea'; + +$all-text-inputs: assign-inputs($text-inputs-list); +$all-text-inputs-active: assign-inputs($text-inputs-list, active); +$all-text-inputs-focus: assign-inputs($text-inputs-list, focus); +$all-text-inputs-hover: assign-inputs($text-inputs-list, hover); diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_timing-functions.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_timing-functions.scss new file mode 100644 index 00000000..20e5f1d4 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_timing-functions.scss @@ -0,0 +1,34 @@ +@charset "UTF-8"; + +/// CSS cubic-bezier timing functions. Timing functions courtesy of jquery.easie (github.com/jaukia/easie) +/// +/// Timing functions are the same as demoed here: http://jqueryui.com/resources/demos/effect/easing.html +/// +/// @type cubic-bezier + +$ease-in-quad: cubic-bezier(0.550, 0.085, 0.680, 0.530); +$ease-in-cubic: cubic-bezier(0.550, 0.055, 0.675, 0.190); +$ease-in-quart: cubic-bezier(0.895, 0.030, 0.685, 0.220); +$ease-in-quint: cubic-bezier(0.755, 0.050, 0.855, 0.060); +$ease-in-sine: cubic-bezier(0.470, 0.000, 0.745, 0.715); +$ease-in-expo: cubic-bezier(0.950, 0.050, 0.795, 0.035); +$ease-in-circ: cubic-bezier(0.600, 0.040, 0.980, 0.335); +$ease-in-back: cubic-bezier(0.600, -0.280, 0.735, 0.045); + +$ease-out-quad: cubic-bezier(0.250, 0.460, 0.450, 0.940); +$ease-out-cubic: cubic-bezier(0.215, 0.610, 0.355, 1.000); +$ease-out-quart: cubic-bezier(0.165, 0.840, 0.440, 1.000); +$ease-out-quint: cubic-bezier(0.230, 1.000, 0.320, 1.000); +$ease-out-sine: cubic-bezier(0.390, 0.575, 0.565, 1.000); +$ease-out-expo: cubic-bezier(0.190, 1.000, 0.220, 1.000); +$ease-out-circ: cubic-bezier(0.075, 0.820, 0.165, 1.000); +$ease-out-back: cubic-bezier(0.175, 0.885, 0.320, 1.275); + +$ease-in-out-quad: cubic-bezier(0.455, 0.030, 0.515, 0.955); +$ease-in-out-cubic: cubic-bezier(0.645, 0.045, 0.355, 1.000); +$ease-in-out-quart: cubic-bezier(0.770, 0.000, 0.175, 1.000); +$ease-in-out-quint: cubic-bezier(0.860, 0.000, 0.070, 1.000); +$ease-in-out-sine: cubic-bezier(0.445, 0.050, 0.550, 0.950); +$ease-in-out-expo: cubic-bezier(1.000, 0.000, 0.000, 1.000); +$ease-in-out-circ: cubic-bezier(0.785, 0.135, 0.150, 0.860); +$ease-in-out-back: cubic-bezier(0.680, -0.550, 0.265, 1.550); diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_triangle.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_triangle.scss new file mode 100644 index 00000000..8a1ed9cd --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_triangle.scss @@ -0,0 +1,63 @@ +@mixin triangle($size, $color, $direction) { + $width: nth($size, 1); + $height: nth($size, length($size)); + $foreground-color: nth($color, 1); + $background-color: if(length($color) == 2, nth($color, 2), transparent); + height: 0; + width: 0; + + @if ($direction == up) or ($direction == down) or ($direction == right) or ($direction == left) { + $width: $width / 2; + $height: if(length($size) > 1, $height, $height/2); + + @if $direction == up { + border-bottom: $height solid $foreground-color; + border-left: $width solid $background-color; + border-right: $width solid $background-color; + } @else if $direction == right { + border-bottom: $width solid $background-color; + border-left: $height solid $foreground-color; + border-top: $width solid $background-color; + } @else if $direction == down { + border-left: $width solid $background-color; + border-right: $width solid $background-color; + border-top: $height solid $foreground-color; + } @else if $direction == left { + border-bottom: $width solid $background-color; + border-right: $height solid $foreground-color; + border-top: $width solid $background-color; + } + } @else if ($direction == up-right) or ($direction == up-left) { + border-top: $height solid $foreground-color; + + @if $direction == up-right { + border-left: $width solid $background-color; + } @else if $direction == up-left { + border-right: $width solid $background-color; + } + } @else if ($direction == down-right) or ($direction == down-left) { + border-bottom: $height solid $foreground-color; + + @if $direction == down-right { + border-left: $width solid $background-color; + } @else if $direction == down-left { + border-right: $width solid $background-color; + } + } @else if ($direction == inset-up) { + border-color: $background-color $background-color $foreground-color; + border-style: solid; + border-width: $height $width; + } @else if ($direction == inset-down) { + border-color: $foreground-color $background-color $background-color; + border-style: solid; + border-width: $height $width; + } @else if ($direction == inset-right) { + border-color: $background-color $background-color $background-color $foreground-color; + border-style: solid; + border-width: $width $height; + } @else if ($direction == inset-left) { + border-color: $background-color $foreground-color $background-color $background-color; + border-style: solid; + border-width: $width $height; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_word-wrap.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_word-wrap.scss new file mode 100644 index 00000000..64856a92 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/addons/_word-wrap.scss @@ -0,0 +1,29 @@ +@charset "UTF-8"; + +/// Provides an easy way to change the `word-wrap` property. +/// +/// @param {String} $wrap [break-word] +/// Value for the `word-break` property. +/// +/// @example scss - Usage +/// .wrapper { +/// @include word-wrap(break-word); +/// } +/// +/// @example css - CSS Output +/// .wrapper { +/// overflow-wrap: break-word; +/// word-break: break-all; +/// word-wrap: break-word; +/// } + +@mixin word-wrap($wrap: break-word) { + overflow-wrap: $wrap; + word-wrap: $wrap; + + @if $wrap == break-word { + word-break: break-all; + } @else { + word-break: $wrap; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_animation.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_animation.scss new file mode 100644 index 00000000..aac675f5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_animation.scss @@ -0,0 +1,43 @@ +// http://www.w3.org/TR/css3-animations/#the-animation-name-property- +// Each of these mixins support comma separated lists of values, which allows different transitions for individual properties to be described in a single style rule. Each value in the list corresponds to the value at that same position in the other properties. + +@mixin animation($animations...) { + @include prefixer(animation, $animations, webkit moz spec); +} + +@mixin animation-name($names...) { + @include prefixer(animation-name, $names, webkit moz spec); +} + +@mixin animation-duration($times...) { + @include prefixer(animation-duration, $times, webkit moz spec); +} + +@mixin animation-timing-function($motions...) { + // ease | linear | ease-in | ease-out | ease-in-out + @include prefixer(animation-timing-function, $motions, webkit moz spec); +} + +@mixin animation-iteration-count($values...) { + // infinite | + @include prefixer(animation-iteration-count, $values, webkit moz spec); +} + +@mixin animation-direction($directions...) { + // normal | alternate + @include prefixer(animation-direction, $directions, webkit moz spec); +} + +@mixin animation-play-state($states...) { + // running | paused + @include prefixer(animation-play-state, $states, webkit moz spec); +} + +@mixin animation-delay($times...) { + @include prefixer(animation-delay, $times, webkit moz spec); +} + +@mixin animation-fill-mode($modes...) { + // none | forwards | backwards | both + @include prefixer(animation-fill-mode, $modes, webkit moz spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_appearance.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_appearance.scss new file mode 100644 index 00000000..abddc020 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_appearance.scss @@ -0,0 +1,3 @@ +@mixin appearance($value) { + @include prefixer(appearance, $value, webkit moz ms o spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_backface-visibility.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_backface-visibility.scss new file mode 100644 index 00000000..fc68e2dd --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_backface-visibility.scss @@ -0,0 +1,3 @@ +@mixin backface-visibility($visibility) { + @include prefixer(backface-visibility, $visibility, webkit spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background-image.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background-image.scss new file mode 100644 index 00000000..6ed19ab5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background-image.scss @@ -0,0 +1,42 @@ +//************************************************************************// +// Background-image property for adding multiple background images with +// gradients, or for stringing multiple gradients together. +//************************************************************************// + +@mixin background-image($images...) { + $webkit-images: (); + $spec-images: (); + + @each $image in $images { + $webkit-image: (); + $spec-image: (); + + @if (type-of($image) == string) { + $url-str: str-slice($image, 1, 3); + $gradient-type: str-slice($image, 1, 6); + + @if $url-str == "url" { + $webkit-image: $image; + $spec-image: $image; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser($image); + $webkit-image: map-get($gradients, webkit-image); + $spec-image: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser($image); + $webkit-image: map-get($gradients, webkit-image); + $spec-image: map-get($gradients, spec-image); + } + } + + $webkit-images: append($webkit-images, $webkit-image, comma); + $spec-images: append($spec-images, $spec-image, comma); + } + + background-image: $webkit-images; + background-image: $spec-images; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background.scss new file mode 100644 index 00000000..019db0ed --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_background.scss @@ -0,0 +1,55 @@ +//************************************************************************// +// Background property for adding multiple backgrounds using shorthand +// notation. +//************************************************************************// + +@mixin background($backgrounds...) { + $webkit-backgrounds: (); + $spec-backgrounds: (); + + @each $background in $backgrounds { + $webkit-background: (); + $spec-background: (); + $background-type: type-of($background); + + @if $background-type == string or $background-type == list { + $background-str: if($background-type == list, nth($background, 1), $background); + + $url-str: str-slice($background-str, 1, 3); + $gradient-type: str-slice($background-str, 1, 6); + + @if $url-str == "url" { + $webkit-background: $background; + $spec-background: $background; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser("#{$background}"); + $webkit-background: map-get($gradients, webkit-image); + $spec-background: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser("#{$background}"); + $webkit-background: map-get($gradients, webkit-image); + $spec-background: map-get($gradients, spec-image); + } + + @else { + $webkit-background: $background; + $spec-background: $background; + } + } + + @else { + $webkit-background: $background; + $spec-background: $background; + } + + $webkit-backgrounds: append($webkit-backgrounds, $webkit-background, comma); + $spec-backgrounds: append($spec-backgrounds, $spec-background, comma); + } + + background: $webkit-backgrounds; + background: $spec-backgrounds; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_border-image.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_border-image.scss new file mode 100644 index 00000000..cf568ce6 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_border-image.scss @@ -0,0 +1,59 @@ +@mixin border-image($borders...) { + $webkit-borders: (); + $spec-borders: (); + + @each $border in $borders { + $webkit-border: (); + $spec-border: (); + $border-type: type-of($border); + + @if $border-type == string or list { + $border-str: if($border-type == list, nth($border, 1), $border); + + $url-str: str-slice($border-str, 1, 3); + $gradient-type: str-slice($border-str, 1, 6); + + @if $url-str == "url" { + $webkit-border: $border; + $spec-border: $border; + } + + @else if $gradient-type == "linear" { + $gradients: _linear-gradient-parser("#{$border}"); + $webkit-border: map-get($gradients, webkit-image); + $spec-border: map-get($gradients, spec-image); + } + + @else if $gradient-type == "radial" { + $gradients: _radial-gradient-parser("#{$border}"); + $webkit-border: map-get($gradients, webkit-image); + $spec-border: map-get($gradients, spec-image); + } + + @else { + $webkit-border: $border; + $spec-border: $border; + } + } + + @else { + $webkit-border: $border; + $spec-border: $border; + } + + $webkit-borders: append($webkit-borders, $webkit-border, comma); + $spec-borders: append($spec-borders, $spec-border, comma); + } + + -webkit-border-image: $webkit-borders; + border-image: $spec-borders; + border-style: solid; +} + +//Examples: +// @include border-image(url("image.png")); +// @include border-image(url("image.png") 20 stretch); +// @include border-image(linear-gradient(45deg, orange, yellow)); +// @include border-image(linear-gradient(45deg, orange, yellow) stretch); +// @include border-image(linear-gradient(45deg, orange, yellow) 20 30 40 50 stretch round); +// @include border-image(radial-gradient(top, cover, orange, yellow, orange)); diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_calc.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_calc.scss new file mode 100644 index 00000000..0bfc738d --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_calc.scss @@ -0,0 +1,4 @@ +@mixin calc($property, $value) { + #{$property}: -webkit-calc(#{$value}); + #{$property}: calc(#{$value}); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_columns.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_columns.scss new file mode 100644 index 00000000..96117670 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_columns.scss @@ -0,0 +1,47 @@ +@mixin columns($arg: auto) { + // || + @include prefixer(columns, $arg, webkit moz spec); +} + +@mixin column-count($int: auto) { + // auto || integer + @include prefixer(column-count, $int, webkit moz spec); +} + +@mixin column-gap($length: normal) { + // normal || length + @include prefixer(column-gap, $length, webkit moz spec); +} + +@mixin column-fill($arg: auto) { + // auto || length + @include prefixer(column-fill, $arg, webkit moz spec); +} + +@mixin column-rule($arg) { + // || || + @include prefixer(column-rule, $arg, webkit moz spec); +} + +@mixin column-rule-color($color) { + @include prefixer(column-rule-color, $color, webkit moz spec); +} + +@mixin column-rule-style($style: none) { + // none | hidden | dashed | dotted | double | groove | inset | inset | outset | ridge | solid + @include prefixer(column-rule-style, $style, webkit moz spec); +} + +@mixin column-rule-width ($width: none) { + @include prefixer(column-rule-width, $width, webkit moz spec); +} + +@mixin column-span($arg: none) { + // none || all + @include prefixer(column-span, $arg, webkit moz spec); +} + +@mixin column-width($length: auto) { + // auto || length + @include prefixer(column-width, $length, webkit moz spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_filter.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_filter.scss new file mode 100644 index 00000000..b8f8ffb0 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_filter.scss @@ -0,0 +1,4 @@ +@mixin filter($function: none) { + // [ + @include prefixer(perspective, $depth, webkit moz spec); +} + +@mixin perspective-origin($value: 50% 50%) { + @include prefixer(perspective-origin, $value, webkit moz spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_placeholder.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_placeholder.scss new file mode 100644 index 00000000..5682fd09 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_placeholder.scss @@ -0,0 +1,8 @@ +@mixin placeholder { + $placeholders: ":-webkit-input" ":-moz" "-moz" "-ms-input"; + @each $placeholder in $placeholders { + &:#{$placeholder}-placeholder { + @content; + } + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_radial-gradient.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_radial-gradient.scss new file mode 100644 index 00000000..8da076e2 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_radial-gradient.scss @@ -0,0 +1,39 @@ +// Requires Sass 3.1+ +@mixin radial-gradient($g1, $g2, + $g3: null, $g4: null, + $g5: null, $g6: null, + $g7: null, $g8: null, + $g9: null, $g10: null, + $pos: null, + $shape-size: null, + $fallback: null) { + + $data: _radial-arg-parser($g1, $g2, $pos, $shape-size); + $g1: nth($data, 1); + $g2: nth($data, 2); + $pos: nth($data, 3); + $shape-size: nth($data, 4); + + $full: $g1, $g2, $g3, $g4, $g5, $g6, $g7, $g8, $g9, $g10; + + // Strip deprecated cover/contain for spec + $shape-size-spec: _shape-size-stripper($shape-size); + + // Set $g1 as the default fallback color + $first-color: nth($full, 1); + $fallback-color: nth($first-color, 1); + + @if (type-of($fallback) == color) or ($fallback == "transparent") { + $fallback-color: $fallback; + } + + // Add Commas and spaces + $shape-size: if($shape-size, "#{$shape-size}, ", null); + $pos: if($pos, "#{$pos}, ", null); + $pos-spec: if($pos, "at #{$pos}", null); + $shape-size-spec: if(($shape-size-spec != " ") and ($pos == null), "#{$shape-size-spec}, ", "#{$shape-size-spec} "); + + background-color: $fallback-color; + background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full})); + background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})"); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_selection.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_selection.scss new file mode 100644 index 00000000..cd71d4f5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_selection.scss @@ -0,0 +1,42 @@ +@charset "UTF-8"; + +/// Outputs the spec and prefixed versions of the `::selection` pseudo-element. +/// +/// @param {Bool} $current-selector [false] +/// If set to `true`, it takes the current element into consideration. +/// +/// @example scss - Usage +/// .element { +/// @include selection(true) { +/// background-color: #ffbb52; +/// } +/// } +/// +/// @example css - CSS Output +/// .element::-moz-selection { +/// background-color: #ffbb52; +/// } +/// +/// .element::selection { +/// background-color: #ffbb52; +/// } + +@mixin selection($current-selector: false) { + @if $current-selector { + &::-moz-selection { + @content; + } + + &::selection { + @content; + } + } @else { + ::-moz-selection { + @content; + } + + ::selection { + @content; + } + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_text-decoration.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_text-decoration.scss new file mode 100644 index 00000000..9222746c --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_text-decoration.scss @@ -0,0 +1,19 @@ +@mixin text-decoration($value) { +// || || + @include prefixer(text-decoration, $value, moz); +} + +@mixin text-decoration-line($line: none) { +// none || underline || overline || line-through + @include prefixer(text-decoration-line, $line, moz); +} + +@mixin text-decoration-style($style: solid) { +// solid || double || dotted || dashed || wavy + @include prefixer(text-decoration-style, $style, moz webkit); +} + +@mixin text-decoration-color($color: currentColor) { +// currentColor || + @include prefixer(text-decoration-color, $color, moz); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transform.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transform.scss new file mode 100644 index 00000000..8ee6509f --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transform.scss @@ -0,0 +1,15 @@ +@mixin transform($property: none) { + // none | + @include prefixer(transform, $property, webkit moz ms o spec); +} + +@mixin transform-origin($axes: 50%) { + // x-axis - left | center | right | length | % + // y-axis - top | center | bottom | length | % + // z-axis - length + @include prefixer(transform-origin, $axes, webkit moz ms o spec); +} + +@mixin transform-style($style: flat) { + @include prefixer(transform-style, $style, webkit moz ms o spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transition.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transition.scss new file mode 100644 index 00000000..3c785ed5 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_transition.scss @@ -0,0 +1,71 @@ +// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable. +// Example: @include transition (all 2s ease-in-out); +// @include transition (opacity 1s ease-in 2s, width 2s ease-out); +// @include transition-property (transform, opacity); + +@mixin transition($properties...) { + // Fix for vendor-prefix transform property + $needs-prefixes: false; + $webkit: (); + $moz: (); + $spec: (); + + // Create lists for vendor-prefixed transform + @each $list in $properties { + @if nth($list, 1) == "transform" { + $needs-prefixes: true; + $list1: -webkit-transform; + $list2: -moz-transform; + $list3: (); + + @each $var in $list { + $list3: join($list3, $var); + + @if $var != "transform" { + $list1: join($list1, $var); + $list2: join($list2, $var); + } + } + + $webkit: append($webkit, $list1); + $moz: append($moz, $list2); + $spec: append($spec, $list3); + } @else { + $webkit: append($webkit, $list, comma); + $moz: append($moz, $list, comma); + $spec: append($spec, $list, comma); + } + } + + @if $needs-prefixes { + -webkit-transition: $webkit; + -moz-transition: $moz; + transition: $spec; + } @else { + @if length($properties) >= 1 { + @include prefixer(transition, $properties, webkit moz spec); + } @else { + $properties: all 0.15s ease-out 0s; + @include prefixer(transition, $properties, webkit moz spec); + } + } +} + +@mixin transition-property($properties...) { + -webkit-transition-property: transition-property-names($properties, "webkit"); + -moz-transition-property: transition-property-names($properties, "moz"); + transition-property: transition-property-names($properties, false); +} + +@mixin transition-duration($times...) { + @include prefixer(transition-duration, $times, webkit moz spec); +} + +@mixin transition-timing-function($motions...) { + // ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier() + @include prefixer(transition-timing-function, $motions, webkit moz spec); +} + +@mixin transition-delay($times...) { + @include prefixer(transition-delay, $times, webkit moz spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_user-select.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_user-select.scss new file mode 100644 index 00000000..d4e55510 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/css3/_user-select.scss @@ -0,0 +1,3 @@ +@mixin user-select($value: none) { + @include prefixer(user-select, $value, webkit moz ms spec); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_assign-inputs.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_assign-inputs.scss new file mode 100644 index 00000000..f8aba967 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_assign-inputs.scss @@ -0,0 +1,11 @@ +@function assign-inputs($inputs, $pseudo: null) { + $list: (); + + @each $input in $inputs { + $input: unquote($input); + $input: if($pseudo, $input + ":" + $pseudo, $input); + $list: append($list, $input, comma); + } + + @return $list; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains-falsy.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains-falsy.scss new file mode 100644 index 00000000..c096fdb9 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains-falsy.scss @@ -0,0 +1,20 @@ +@charset "UTF-8"; + +/// Checks if a list does not contains a value. +/// +/// @access private +/// +/// @param {List} $list +/// The list to check against. +/// +/// @return {Bool} + +@function contains-falsy($list) { + @each $item in $list { + @if not $item { + @return true; + } + } + + @return false; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains.scss new file mode 100644 index 00000000..3dec27db --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_contains.scss @@ -0,0 +1,26 @@ +@charset "UTF-8"; + +/// Checks if a list contains a value(s). +/// +/// @access private +/// +/// @param {List} $list +/// The list to check against. +/// +/// @param {List} $values +/// A single value or list of values to check for. +/// +/// @example scss - Usage +/// contains($list, $value) +/// +/// @return {Bool} + +@function contains($list, $values...) { + @each $value in $values { + @if type-of(index($list, $value)) != "number" { + @return false; + } + } + + @return true; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-length.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-length.scss new file mode 100644 index 00000000..5826e789 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-length.scss @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/// Checks for a valid CSS length. +/// +/// @param {String} $value + +@function is-length($value) { + @return type-of($value) != "null" and (str-slice($value + "", 1, 4) == "calc" + or index(auto inherit initial 0, $value) + or (type-of($value) == "number" and not(unitless($value)))); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-light.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-light.scss new file mode 100644 index 00000000..92d90ac3 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-light.scss @@ -0,0 +1,21 @@ +@charset "UTF-8"; + +/// Programatically determines whether a color is light or dark. +/// +/// @link http://robots.thoughtbot.com/closer-look-color-lightness +/// +/// @param {Color (Hex)} $color +/// +/// @example scss - Usage +/// is-light($color) +/// +/// @return {Bool} + +@function is-light($hex-color) { + $-local-red: red(rgba($hex-color, 1)); + $-local-green: green(rgba($hex-color, 1)); + $-local-blue: blue(rgba($hex-color, 1)); + $-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255; + + @return $-local-lightness > 0.6; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-number.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-number.scss new file mode 100644 index 00000000..a64e0bf2 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-number.scss @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/// Checks for a valid number. +/// +/// @param {Number} $value +/// +/// @require {function} contains + +@function is-number($value) { + @return contains("0" "1" "2" "3" "4" "5" "6" "7" "8" "9" 0 1 2 3 4 5 6 7 8 9, $value); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-size.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-size.scss new file mode 100644 index 00000000..661789ab --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_is-size.scss @@ -0,0 +1,13 @@ +@charset "UTF-8"; + +/// Checks for a valid CSS size. +/// +/// @param {String} $value +/// +/// @require {function} contains +/// @require {function} is-length + +@function is-size($value) { + @return is-length($value) + or contains("fill" "fit-content" "min-content" "max-content", $value); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_modular-scale.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_modular-scale.scss new file mode 100644 index 00000000..20fa3881 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_modular-scale.scss @@ -0,0 +1,69 @@ +// Scaling Variables +$golden: 1.618; +$minor-second: 1.067; +$major-second: 1.125; +$minor-third: 1.2; +$major-third: 1.25; +$perfect-fourth: 1.333; +$augmented-fourth: 1.414; +$perfect-fifth: 1.5; +$minor-sixth: 1.6; +$major-sixth: 1.667; +$minor-seventh: 1.778; +$major-seventh: 1.875; +$octave: 2; +$major-tenth: 2.5; +$major-eleventh: 2.667; +$major-twelfth: 3; +$double-octave: 4; + +$modular-scale-ratio: $perfect-fourth !default; +$modular-scale-base: em($em-base) !default; + +@function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) { + $v1: nth($value, 1); + $v2: nth($value, length($value)); + $value: $v1; + + // scale $v2 to just above $v1 + @while $v2 > $v1 { + $v2: ($v2 / $ratio); // will be off-by-1 + } + @while $v2 < $v1 { + $v2: ($v2 * $ratio); // will fix off-by-1 + } + + // check AFTER scaling $v2 to prevent double-counting corner-case + $double-stranded: $v2 > $v1; + + @if $increment > 0 { + @for $i from 1 through $increment { + @if $double-stranded and ($v1 * $ratio) > $v2 { + $value: $v2; + $v2: ($v2 * $ratio); + } @else { + $v1: ($v1 * $ratio); + $value: $v1; + } + } + } + + @if $increment < 0 { + // adjust $v2 to just below $v1 + @if $double-stranded { + $v2: ($v2 / $ratio); + } + + @for $i from $increment through -1 { + @if $double-stranded and ($v1 / $ratio) < $v2 { + $value: $v2; + $v2: ($v2 / $ratio); + } @else { + $v1: ($v1 / $ratio); + $value: $v1; + } + } + } + + @return $value; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-em.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-em.scss new file mode 100644 index 00000000..ae81a44a --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-em.scss @@ -0,0 +1,13 @@ +// Convert pixels to ems +// eg. for a relational value of 12px write em(12) when the parent is 16px +// if the parent is another value say 24px write em(12, 24) + +@function em($pxval, $base: $em-base) { + @if not unitless($pxval) { + $pxval: strip-units($pxval); + } + @if not unitless($base) { + $base: strip-units($base); + } + @return ($pxval / $base) * 1em; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-rem.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-rem.scss new file mode 100644 index 00000000..0ac941e7 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_px-to-rem.scss @@ -0,0 +1,15 @@ +// Convert pixels to rems +// eg. for a relational value of 12px write rem(12) +// Assumes $em-base is the font-size of + +@function rem($pxval) { + @if not unitless($pxval) { + $pxval: strip-units($pxval); + } + + $base: $em-base; + @if not unitless($base) { + $base: strip-units($base); + } + @return ($pxval / $base) * 1rem; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_shade.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_shade.scss new file mode 100644 index 00000000..8aaf2c6d --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_shade.scss @@ -0,0 +1,24 @@ +@charset "UTF-8"; + +/// Mixes a color with black. +/// +/// @param {Color} $color +/// +/// @param {Number (Percentage)} $percent +/// The amount of black to be mixed in. +/// +/// @example scss - Usage +/// .element { +/// background-color: shade(#ffbb52, 60%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// background-color: #664a20; +/// } +/// +/// @return {Color} + +@function shade($color, $percent) { + @return mix(#000, $color, $percent); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_strip-units.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_strip-units.scss new file mode 100644 index 00000000..6c5f3e81 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_strip-units.scss @@ -0,0 +1,17 @@ +@charset "UTF-8"; + +/// Strips the unit from a number. +/// +/// @param {Number (With Unit)} $value +/// +/// @example scss - Usage +/// $dimension: strip-units(10em); +/// +/// @example css - CSS Output +/// $dimension: 10; +/// +/// @return {Number (Unitless)} + +@function strip-units($value) { + @return ($value / ($value * 0 + 1)); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_tint.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_tint.scss new file mode 100644 index 00000000..2e338148 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_tint.scss @@ -0,0 +1,24 @@ +@charset "UTF-8"; + +/// Mixes a color with white. +/// +/// @param {Color} $color +/// +/// @param {Number (Percentage)} $percent +/// The amount of white to be mixed in. +/// +/// @example scss - Usage +/// .element { +/// background-color: tint(#6ecaa6, 40%); +/// } +/// +/// @example css - CSS Output +/// .element { +/// background-color: #a8dfc9; +/// } +/// +/// @return {Color} + +@function tint($color, $percent) { + @return mix(#fff, $color, $percent); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_transition-property-name.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_transition-property-name.scss new file mode 100644 index 00000000..18348b93 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_transition-property-name.scss @@ -0,0 +1,22 @@ +// Return vendor-prefixed property names if appropriate +// Example: transition-property-names((transform, color, background), moz) -> -moz-transform, color, background +//************************************************************************// +@function transition-property-names($props, $vendor: false) { + $new-props: (); + + @each $prop in $props { + $new-props: append($new-props, transition-property-name($prop, $vendor), comma); + } + + @return $new-props; +} + +@function transition-property-name($prop, $vendor: false) { + // put other properties that need to be prefixed here aswell + @if $vendor and $prop == transform { + @return unquote('-'+$vendor+'-'+$prop); + } + @else { + @return $prop; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_unpack.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_unpack.scss new file mode 100644 index 00000000..4367935d --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/functions/_unpack.scss @@ -0,0 +1,27 @@ +@charset "UTF-8"; + +/// Converts shorthand to the 4-value syntax. +/// +/// @param {List} $shorthand +/// +/// @example scss - Usage +/// .element { +/// margin: unpack(1em 2em); +/// } +/// +/// @example css - CSS Output +/// .element { +/// margin: 1em 2em 1em 2em; +/// } + +@function unpack($shorthand) { + @if length($shorthand) == 1 { + @return nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1) nth($shorthand, 1); + } @else if length($shorthand) == 2 { + @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 1) nth($shorthand, 2); + } @else if length($shorthand) == 3 { + @return nth($shorthand, 1) nth($shorthand, 2) nth($shorthand, 3) nth($shorthand, 2); + } @else { + @return $shorthand; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_convert-units.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_convert-units.scss new file mode 100644 index 00000000..e0a65a05 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_convert-units.scss @@ -0,0 +1,21 @@ +//************************************************************************// +// Helper function for str-to-num fn. +// Source: http://sassmeister.com/gist/9647408 +//************************************************************************// +@function _convert-units($number, $unit) { + $strings: "px", "cm", "mm", "%", "ch", "pica", "in", "em", "rem", "pt", "pc", "ex", "vw", "vh", "vmin", "vmax", "deg", "rad", "grad", "turn"; + $units: 1px, 1cm, 1mm, 1%, 1ch, 1pica, 1in, 1em, 1rem, 1pt, 1pc, 1ex, 1vw, 1vh, 1vmin, 1vmax, 1deg, 1rad, 1grad, 1turn; + $index: index($strings, $unit); + + @if not $index { + @warn "Unknown unit `#{$unit}`."; + @return false; + } + + @if type-of($number) != "number" { + @warn "`#{$number} is not a number`"; + @return false; + } + + @return $number * nth($units, $index); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_directional-values.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_directional-values.scss new file mode 100644 index 00000000..6ee538db --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_directional-values.scss @@ -0,0 +1,96 @@ +@charset "UTF-8"; + +/// Directional-property mixins are shorthands for writing properties like the following +/// +/// @ignore You can also use `false` instead of `null`. +/// +/// @param {List} $vals +/// List of directional values +/// +/// @example scss - Usage +/// .element { +/// @include border-style(dotted null); +/// @include margin(null 0 10px); +/// } +/// +/// @example css - CSS Output +/// .element { +/// border-bottom-style: dotted; +/// border-top-style: dotted; +/// margin-bottom: 10px; +/// margin-left: 0; +/// margin-right: 0; +/// } +/// +/// @require {function} contains-falsy +/// +/// @return {List} + +@function collapse-directionals($vals) { + $output: null; + + $a: nth($vals, 1); + $b: if(length($vals) < 2, $a, nth($vals, 2)); + $c: if(length($vals) < 3, $a, nth($vals, 3)); + $d: if(length($vals) < 2, $a, nth($vals, if(length($vals) < 4, 2, 4))); + + @if $a == 0 { $a: 0; } + @if $b == 0 { $b: 0; } + @if $c == 0 { $c: 0; } + @if $d == 0 { $d: 0; } + + @if $a == $b and $a == $c and $a == $d { $output: $a; } + @else if $a == $c and $b == $d { $output: $a $b; } + @else if $b == $d { $output: $a $b $c; } + @else { $output: $a $b $c $d; } + + @return $output; +} + +/// Output directional properties, for instance `margin`. +/// +/// @access private +/// +/// @param {String} $pre +/// Prefix to use +/// @param {String} $suf +/// Suffix to use +/// @param {List} $vals +/// List of values +/// +/// @require {function} collapse-directionals +/// @require {function} contains-falsy + +@mixin directional-property($pre, $suf, $vals) { + // Property Names + $top: $pre + "-top" + if($suf, "-#{$suf}", ""); + $bottom: $pre + "-bottom" + if($suf, "-#{$suf}", ""); + $left: $pre + "-left" + if($suf, "-#{$suf}", ""); + $right: $pre + "-right" + if($suf, "-#{$suf}", ""); + $all: $pre + if($suf, "-#{$suf}", ""); + + $vals: collapse-directionals($vals); + + @if contains-falsy($vals) { + @if nth($vals, 1) { #{$top}: nth($vals, 1); } + + @if length($vals) == 1 { + @if nth($vals, 1) { #{$right}: nth($vals, 1); } + } @else { + @if nth($vals, 2) { #{$right}: nth($vals, 2); } + } + + @if length($vals) == 2 { + @if nth($vals, 1) { #{$bottom}: nth($vals, 1); } + @if nth($vals, 2) { #{$left}: nth($vals, 2); } + } @else if length($vals) == 3 { + @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } + @if nth($vals, 2) { #{$left}: nth($vals, 2); } + } @else if length($vals) == 4 { + @if nth($vals, 3) { #{$bottom}: nth($vals, 3); } + @if nth($vals, 4) { #{$left}: nth($vals, 4); } + } + } @else { + #{$all}: $vals; + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_font-source-declaration.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_font-source-declaration.scss new file mode 100644 index 00000000..7f17586c --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_font-source-declaration.scss @@ -0,0 +1,43 @@ +// Used for creating the source string for fonts using @font-face +// Reference: http://goo.gl/Ru1bKP + +@function font-url-prefixer($asset-pipeline) { + @if $asset-pipeline == true { + @return font-url; + } @else { + @return url; + } +} + +@function font-source-declaration( + $font-family, + $file-path, + $asset-pipeline, + $file-formats, + $font-url) { + + $src: (); + + $formats-map: ( + eot: "#{$file-path}.eot?#iefix" format("embedded-opentype"), + woff2: "#{$file-path}.woff2" format("woff2"), + woff: "#{$file-path}.woff" format("woff"), + ttf: "#{$file-path}.ttf" format("truetype"), + svg: "#{$file-path}.svg##{$font-family}" format("svg") + ); + + @each $key, $values in $formats-map { + @if contains($file-formats, $key) { + $file-path: nth($values, 1); + $font-format: nth($values, 2); + + @if $asset-pipeline == true { + $src: append($src, font-url($file-path) $font-format, comma); + } @else { + $src: append($src, url($file-path) $font-format, comma); + } + } + } + + @return $src; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_gradient-positions-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_gradient-positions-parser.scss new file mode 100644 index 00000000..07d30b6c --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_gradient-positions-parser.scss @@ -0,0 +1,13 @@ +@function _gradient-positions-parser($gradient-type, $gradient-positions) { + @if $gradient-positions + and ($gradient-type == linear) + and (type-of($gradient-positions) != color) { + $gradient-positions: _linear-positions-parser($gradient-positions); + } + @else if $gradient-positions + and ($gradient-type == radial) + and (type-of($gradient-positions) != color) { + $gradient-positions: _radial-positions-parser($gradient-positions); + } + @return $gradient-positions; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-angle-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-angle-parser.scss new file mode 100644 index 00000000..e0401ed8 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-angle-parser.scss @@ -0,0 +1,25 @@ +// Private function for linear-gradient-parser +@function _linear-angle-parser($image, $first-val, $prefix, $suffix) { + $offset: null; + $unit-short: str-slice($first-val, str-length($first-val) - 2, str-length($first-val)); + $unit-long: str-slice($first-val, str-length($first-val) - 3, str-length($first-val)); + + @if ($unit-long == "grad") or + ($unit-long == "turn") { + $offset: if($unit-long == "grad", -100grad * 3, -0.75turn); + } + + @else if ($unit-short == "deg") or + ($unit-short == "rad") { + $offset: if($unit-short == "deg", -90 * 3, 1.6rad); + } + + @if $offset { + $num: _str-to-num($first-val); + + @return ( + webkit-image: -webkit- + $prefix + ($offset - $num) + $suffix, + spec-image: $image + ); + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-gradient-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-gradient-parser.scss new file mode 100644 index 00000000..48a8f77f --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-gradient-parser.scss @@ -0,0 +1,41 @@ +@function _linear-gradient-parser($image) { + $image: unquote($image); + $gradients: (); + $start: str-index($image, "("); + $end: str-index($image, ","); + $first-val: str-slice($image, $start + 1, $end - 1); + + $prefix: str-slice($image, 1, $start); + $suffix: str-slice($image, $end, str-length($image)); + + $has-multiple-vals: str-index($first-val, " "); + $has-single-position: unquote(_position-flipper($first-val) + ""); + $has-angle: is-number(str-slice($first-val, 1, 1)); + + @if $has-multiple-vals { + $gradients: _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals); + } + + @else if $has-single-position != "" { + $pos: unquote($has-single-position + ""); + + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $prefix + "to " + $pos + $suffix + ); + } + + @else if $has-angle { + // Rotate degree for webkit + $gradients: _linear-angle-parser($image, $first-val, $prefix, $suffix); + } + + @else { + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $image + ); + } + + @return $gradients; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-positions-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-positions-parser.scss new file mode 100644 index 00000000..6d5cb6e1 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-positions-parser.scss @@ -0,0 +1,61 @@ +@function _linear-positions-parser($pos) { + $type: type-of(nth($pos, 1)); + $spec: null; + $degree: null; + $side: null; + $corner: null; + $length: length($pos); + // Parse Side and corner positions + @if ($length > 1) { + @if nth($pos, 1) == "to" { // Newer syntax + $side: nth($pos, 2); + + @if $length == 2 { // eg. to top + // Swap for backwards compatability + $degree: _position-flipper(nth($pos, 2)); + } + @else if $length == 3 { // eg. to top left + $corner: nth($pos, 3); + } + } + @else if $length == 2 { // Older syntax ("top left") + $side: _position-flipper(nth($pos, 1)); + $corner: _position-flipper(nth($pos, 2)); + } + + @if ("#{$side} #{$corner}" == "left top") or ("#{$side} #{$corner}" == "top left") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "right top") or ("#{$side} #{$corner}" == "top right") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "right bottom") or ("#{$side} #{$corner}" == "bottom right") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + @else if ("#{$side} #{$corner}" == "left bottom") or ("#{$side} #{$corner}" == "bottom left") { + $degree: _position-flipper(#{$side}) _position-flipper(#{$corner}); + } + $spec: to $side $corner; + } + @else if $length == 1 { + // Swap for backwards compatability + @if $type == string { + $degree: $pos; + $spec: to _position-flipper($pos); + } + @else { + $degree: -270 - $pos; //rotate the gradient opposite from spec + $spec: $pos; + } + } + $degree: unquote($degree + ","); + $spec: unquote($spec + ","); + @return $degree $spec; +} + +@function _position-flipper($pos) { + @return if($pos == left, right, null) + if($pos == right, left, null) + if($pos == top, bottom, null) + if($pos == bottom, top, null); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-side-corner-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-side-corner-parser.scss new file mode 100644 index 00000000..7a691253 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_linear-side-corner-parser.scss @@ -0,0 +1,31 @@ +// Private function for linear-gradient-parser +@function _linear-side-corner-parser($image, $first-val, $prefix, $suffix, $has-multiple-vals) { + $val-1: str-slice($first-val, 1, $has-multiple-vals - 1); + $val-2: str-slice($first-val, $has-multiple-vals + 1, str-length($first-val)); + $val-3: null; + $has-val-3: str-index($val-2, " "); + + @if $has-val-3 { + $val-3: str-slice($val-2, $has-val-3 + 1, str-length($val-2)); + $val-2: str-slice($val-2, 1, $has-val-3 - 1); + } + + $pos: _position-flipper($val-1) _position-flipper($val-2) _position-flipper($val-3); + $pos: unquote($pos + ""); + + // Use old spec for webkit + @if $val-1 == "to" { + @return ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + // Bring the code up to spec + @else { + @return ( + webkit-image: -webkit- + $image, + spec-image: $prefix + "to " + $pos + $suffix + ); + } +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-arg-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-arg-parser.scss new file mode 100644 index 00000000..56c6030b --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-arg-parser.scss @@ -0,0 +1,69 @@ +@function _radial-arg-parser($g1, $g2, $pos, $shape-size) { + @each $value in $g1, $g2 { + $first-val: nth($value, 1); + $pos-type: type-of($first-val); + $spec-at-index: null; + + // Determine if spec was passed to mixin + @if type-of($value) == list { + $spec-at-index: if(index($value, at), index($value, at), false); + } + @if $spec-at-index { + @if $spec-at-index > 1 { + @for $i from 1 through ($spec-at-index - 1) { + $shape-size: $shape-size nth($value, $i); + } + @for $i from ($spec-at-index + 1) through length($value) { + $pos: $pos nth($value, $i); + } + } + @else if $spec-at-index == 1 { + @for $i from ($spec-at-index + 1) through length($value) { + $pos: $pos nth($value, $i); + } + } + $g1: null; + } + + // If not spec calculate correct values + @else { + @if ($pos-type != color) or ($first-val != "transparent") { + @if ($pos-type == number) + or ($first-val == "center") + or ($first-val == "top") + or ($first-val == "right") + or ($first-val == "bottom") + or ($first-val == "left") { + + $pos: $value; + + @if $pos == $g1 { + $g1: null; + } + } + + @else if + ($first-val == "ellipse") + or ($first-val == "circle") + or ($first-val == "closest-side") + or ($first-val == "closest-corner") + or ($first-val == "farthest-side") + or ($first-val == "farthest-corner") + or ($first-val == "contain") + or ($first-val == "cover") { + + $shape-size: $value; + + @if $value == $g1 { + $g1: null; + } + + @else if $value == $g2 { + $g2: null; + } + } + } + } + } + @return $g1, $g2, $pos, $shape-size; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-gradient-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-gradient-parser.scss new file mode 100644 index 00000000..5444d808 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-gradient-parser.scss @@ -0,0 +1,50 @@ +@function _radial-gradient-parser($image) { + $image: unquote($image); + $gradients: (); + $start: str-index($image, "("); + $end: str-index($image, ","); + $first-val: str-slice($image, $start + 1, $end - 1); + + $prefix: str-slice($image, 1, $start); + $suffix: str-slice($image, $end, str-length($image)); + + $is-spec-syntax: str-index($first-val, "at"); + + @if $is-spec-syntax and $is-spec-syntax > 1 { + $keyword: str-slice($first-val, 1, $is-spec-syntax - 2); + $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); + $pos: append($pos, $keyword, comma); + + $gradients: ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + @else if $is-spec-syntax == 1 { + $pos: str-slice($first-val, $is-spec-syntax + 3, str-length($first-val)); + + $gradients: ( + webkit-image: -webkit- + $prefix + $pos + $suffix, + spec-image: $image + ); + } + + @else if str-index($image, "cover") or str-index($image, "contain") { + @warn "Radial-gradient needs to be updated to conform to latest spec."; + + $gradients: ( + webkit-image: null, + spec-image: $image + ); + } + + @else { + $gradients: ( + webkit-image: -webkit- + $image, + spec-image: $image + ); + } + + @return $gradients; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-positions-parser.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-positions-parser.scss new file mode 100644 index 00000000..3c552ad7 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_radial-positions-parser.scss @@ -0,0 +1,18 @@ +@function _radial-positions-parser($gradient-pos) { + $shape-size: nth($gradient-pos, 1); + $pos: nth($gradient-pos, 2); + $shape-size-spec: _shape-size-stripper($shape-size); + + $pre-spec: unquote(if($pos, "#{$pos}, ", null)) + unquote(if($shape-size, "#{$shape-size},", null)); + $pos-spec: if($pos, "at #{$pos}", null); + + $spec: "#{$shape-size-spec} #{$pos-spec}"; + + // Add comma + @if ($spec != " ") { + $spec: "#{$spec},"; + } + + @return $pre-spec $spec; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_render-gradients.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_render-gradients.scss new file mode 100644 index 00000000..57656768 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_render-gradients.scss @@ -0,0 +1,26 @@ +// User for linear and radial gradients within background-image or border-image properties + +@function _render-gradients($gradient-positions, $gradients, $gradient-type, $vendor: false) { + $pre-spec: null; + $spec: null; + $vendor-gradients: null; + @if $gradient-type == linear { + @if $gradient-positions { + $pre-spec: nth($gradient-positions, 1); + $spec: nth($gradient-positions, 2); + } + } + @else if $gradient-type == radial { + $pre-spec: nth($gradient-positions, 1); + $spec: nth($gradient-positions, 2); + } + + @if $vendor { + $vendor-gradients: -#{$vendor}-#{$gradient-type}-gradient(#{$pre-spec} $gradients); + } + @else if $vendor == false { + $vendor-gradients: "#{$gradient-type}-gradient(#{$spec} #{$gradients})"; + $vendor-gradients: unquote($vendor-gradients); + } + @return $vendor-gradients; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_shape-size-stripper.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_shape-size-stripper.scss new file mode 100644 index 00000000..ee5eda42 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_shape-size-stripper.scss @@ -0,0 +1,10 @@ +@function _shape-size-stripper($shape-size) { + $shape-size-spec: null; + @each $value in $shape-size { + @if ($value == "cover") or ($value == "contain") { + $value: null; + } + $shape-size-spec: "#{$shape-size-spec} #{$value}"; + } + @return $shape-size-spec; +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_str-to-num.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_str-to-num.scss new file mode 100644 index 00000000..3ef1d873 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/helpers/_str-to-num.scss @@ -0,0 +1,50 @@ +//************************************************************************// +// Helper function for linear/radial-gradient-parsers. +// Source: http://sassmeister.com/gist/9647408 +//************************************************************************// +@function _str-to-num($string) { + // Matrices + $strings: "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"; + $numbers: 0 1 2 3 4 5 6 7 8 9; + + // Result + $result: 0; + $divider: 0; + $minus: false; + + // Looping through all characters + @for $i from 1 through str-length($string) { + $character: str-slice($string, $i, $i); + $index: index($strings, $character); + + @if $character == "-" { + $minus: true; + } + + @else if $character == "." { + $divider: 1; + } + + @else { + @if not $index { + $result: if($minus, $result * -1, $result); + @return _convert-units($result, str-slice($string, $i)); + } + + $number: nth($numbers, $index); + + @if $divider == 0 { + $result: $result * 10; + } + + @else { + // Move the decimal dot to the left + $divider: $divider * 10; + $number: $number / $divider; + } + + $result: $result + $number; + } + } + @return if($minus, $result * -1, $result); +} diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_asset-pipeline.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_asset-pipeline.scss new file mode 100644 index 00000000..4c6afc5b --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_asset-pipeline.scss @@ -0,0 +1,7 @@ +@charset "UTF-8"; + +/// A global setting to enable or disable the `$asset-pipeline` variable for all functions that accept it. +/// +/// @type Bool + +$asset-pipeline: false !default; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_prefixer.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_prefixer.scss new file mode 100644 index 00000000..8c390514 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_prefixer.scss @@ -0,0 +1,9 @@ +@charset "UTF-8"; + +/// Global variables to enable or disable vendor prefixes + +$prefix-for-webkit: true !default; +$prefix-for-mozilla: true !default; +$prefix-for-microsoft: true !default; +$prefix-for-opera: true !default; +$prefix-for-spec: true !default; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_px-to-em.scss b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_px-to-em.scss new file mode 100644 index 00000000..f2f9a3e8 --- /dev/null +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/bourbon/settings/_px-to-em.scss @@ -0,0 +1 @@ +$em-base: 16px !default; diff --git a/middleman-core/fixtures/minify-css-app/source/stylesheets/site.xcss.sass b/middleman-core/fixtures/minify-css-app/source/stylesheets/site.xcss.sass index 0cf9e7da..7e4fa8ca 100755 --- a/middleman-core/fixtures/minify-css-app/source/stylesheets/site.xcss.sass +++ b/middleman-core/fixtures/minify-css-app/source/stylesheets/site.xcss.sass @@ -1,5 +1,6 @@ -@import "compass/reset" +@import "bourbon/bourbon"; +@import "base/base"; @media handheld, only screen and (device-width: 768px) body - display: block \ No newline at end of file + display: block diff --git a/middleman-core/lib/middleman-core/renderers/sass.rb b/middleman-core/lib/middleman-core/renderers/sass.rb index ff449f4b..dcbe0bf3 100644 --- a/middleman-core/lib/middleman-core/renderers/sass.rb +++ b/middleman-core/lib/middleman-core/renderers/sass.rb @@ -1,33 +1,10 @@ require 'sass' -require 'compass/import-once' -GLOB = /\*|\[.+\]/ - -# Hack around broken sass globs when combined with import-once -# Targets compass-import-once 1.0.4 -# Tracking issue: https://github.com/chriseppstein/compass/issues/1529 -module Compass - module ImportOnce - module Importer - def find_relative(uri, base, options, *args) - if uri =~ GLOB - force_import = true - else - uri, force_import = handle_force_import(uri) - end - maybe_replace_with_dummy_engine(super(uri, base, options, *args), options, force_import) - end - - def find(uri, options, *args) - if uri =~ GLOB - force_import = true - else - uri, force_import = handle_force_import(uri) - end - maybe_replace_with_dummy_engine(super(uri, options, *args), options, force_import) - end - end - end +SASS_MODULE = begin + require 'sassc' + ::SassC +rescue LoadError => e + ::Sass end module Middleman @@ -47,6 +24,7 @@ module Middleman app.config.define_setting :sass, opts, 'Sass engine options' app.config.define_setting :sass_assets_paths, [], 'Paths to extra SASS/SCSS files' + app.config.define_setting :sass_source_maps, app.development?, 'Whether to inline sourcemap into Sass' # Tell Tilt to use it as well (for inline sass blocks) ::Tilt.register 'sass', SassPlusCSSFilenameTemplate @@ -56,8 +34,6 @@ module Middleman ::Tilt.register 'scss', ScssPlusCSSFilenameTemplate ::Tilt.prefer(ScssPlusCSSFilenameTemplate) - ::Compass::ImportOnce.activate! - require 'middleman-core/renderers/sass_functions' end @@ -82,11 +58,12 @@ module Middleman # @return [String] def evaluate(context, _) @context ||= context - @engine = ::Sass::Engine.new(data, sass_options) + + @engine = SASS_MODULE::Engine.new(data, sass_options) begin @engine.render - rescue ::Sass::SyntaxError => e + rescue SASS_MODULE::SyntaxError => e ::Sass::SyntaxError.exception_to_css(e) end end @@ -104,6 +81,12 @@ module Middleman custom: (options[:custom] || {}).merge(middleman_context: ctx.app) } + if ctx.config[:sass_source_maps] + more_opts[:source_map_file] = "." + more_opts[:source_map_embed] = true + more_opts[:source_map_contents] = true + end + if ctx.is_a?(::Middleman::TemplateContext) && file more_opts[:css_filename] = file.sub(/\.s[ac]ss$/, '') end diff --git a/middleman-core/lib/middleman-core/renderers/sass_functions.rb b/middleman-core/lib/middleman-core/renderers/sass_functions.rb index 90583aee..a28dcc69 100644 --- a/middleman-core/lib/middleman-core/renderers/sass_functions.rb +++ b/middleman-core/lib/middleman-core/renderers/sass_functions.rb @@ -1,4 +1,4 @@ -module Sprockets +module Middleman module Sass module Functions # Using Middleman::Util#asset_path, return the full path @@ -92,25 +92,25 @@ module Sprockets end end -module Sass::Script::Functions - include Sprockets::Sass::Functions +module ::Sass::Script::Functions + include ::Middleman::Sass::Functions - # Hack to ensure previous API declarations (by Compass or whatever) - # don't take precedence. - [:asset_path, :asset_url, :image_path, :image_url, :font_path, :font_url, :asset_data_uri].each do |method| - defined?(@signatures) && @signatures.delete(method) - end + # # Hack to ensure previous API declarations (by Compass or whatever) + # # don't take precedence. + # [:asset_path, :asset_url, :image_path, :image_url, :font_path, :font_url, :asset_data_uri].each do |method| + # defined?(@signatures) && @signatures.delete(method) + # end - declare :asset_path, [:source], var_kwargs: true - declare :asset_path, [:source, :kind] - declare :asset_url, [:source], var_kwargs: true - declare :asset_url, [:source, :kind] - declare :image_path, [:source], var_kwargs: true - declare :image_url, [:source], var_kwargs: true - declare :image_url, [:source, :only_path] - declare :image_url, [:source, :only_path, :cache_buster] - declare :font_path, [:source], var_kwargs: true - declare :font_url, [:source], var_kwargs: true - declare :font_url, [:source, :only_path] - declare :asset_data_uri, [:source] + # declare :asset_path, [:source], var_kwargs: true + # declare :asset_path, [:source, :kind] + # declare :asset_url, [:source], var_kwargs: true + # declare :asset_url, [:source, :kind] + # declare :image_path, [:source], var_kwargs: true + # declare :image_url, [:source], var_kwargs: true + # declare :image_url, [:source, :only_path] + # declare :image_url, [:source, :only_path, :cache_buster] + # declare :font_path, [:source], var_kwargs: true + # declare :font_url, [:source], var_kwargs: true + # declare :font_url, [:source, :only_path] + # declare :asset_data_uri, [:source] end diff --git a/middleman-core/middleman-core.gemspec b/middleman-core/middleman-core.gemspec index eb747036..4f5738b3 100644 --- a/middleman-core/middleman-core.gemspec +++ b/middleman-core/middleman-core.gemspec @@ -25,7 +25,7 @@ Gem::Specification.new do |s| s.add_dependency('erubis') # Helpers - s.add_dependency('activesupport', ['~> 4.2.0']) + s.add_dependency('activesupport', ['~> 4.2']) s.add_dependency('padrino-helpers', ['~> 0.12.3']) s.add_dependency("addressable", ["~> 2.3.5"]) @@ -42,17 +42,14 @@ Gem::Specification.new do |s| s.add_dependency('fastimage', ['~> 1.6.2']) # Minify CSS - s.add_dependency('sass', ['>= 3.3.4']) - - # Work around Sass performance - s.add_dependency('compass-import-once', ['~> 1.0.4']) + s.add_dependency('sassc', ['>= 1.6.0']) # Minify JS s.add_dependency('uglifier', ['~> 2.6']) s.add_dependency('execjs', ['~> 2.0']) # Testing - s.add_dependency('contracts', ['~> 0.11.0']) + s.add_dependency('contracts', ['~> 0.12.0']) # Hash stuff s.add_dependency('hashie', ['~> 3.4'])