diff --git a/lib/compass-colors/sass_extensions.rb b/lib/compass-colors/sass_extensions.rb index 33fb33d..77e10c6 100644 --- a/lib/compass-colors/sass_extensions.rb +++ b/lib/compass-colors/sass_extensions.rb @@ -4,28 +4,44 @@ module Sass::Script::Functions # Takes a color object and amount by which to lighten it (0 to 100). def lighten(color, amount) hsl = Compass::Colors::HSL.from_color(color) - hsl.l += (1 - hsl.l) * (amount.value / 100.0) + if percentage?(amount) + hsl.l += (1 - hsl.l) * (amount.value / 100.0) + else + hsl.l += amount.value + end hsl.to_color end # Takes a color object and amount by which to darken it (0 to 100). def darken(color, amount) hsl = Compass::Colors::HSL.from_color(color) - hsl.l *= 1.0 - (amount.value / 100.0) + if percentage?(amount) + hsl.l *= 1.0 - (amount.value / 100.0) + else + hsl.l -= amount.value + end hsl.to_color end # Saturate (make a color "richer") a color by the given amount (0 to 100) def saturate(color, amount) hsl = Compass::Colors::HSL.from_color(color) - hsl.s += (1 - hsl.s) * (amount.value / 100.0) + if percentage?(amount) + hsl.s += (1 - hsl.s) * (amount.value / 100.0) + else + hsl.s += amount.value + end hsl.to_color end # Desaturate (make a color "grayer") a color by the given amount (0 to 100) def desaturate(color, amount) hsl = Compass::Colors::HSL.from_color(color) - hsl.s *= (1.0 - (amount.value / 100.0)) + if percentage?(amount) + hsl.s *= (1.0 - (amount.value / 100.0)) + else + hsl.s -= amount.value + end hsl.to_color end @@ -70,4 +86,10 @@ def complement(color) adjust_hue color, 180 end + private + + def percentage?(amount) + amount.numerator_units == ["%"] || (amount.unitless? && amount.value > 1 && amount.value < 100) + end + end