module Sass::Script::Functions

def hsl(hue, saturation, lightness)

Raises:
  • (ArgumentError) - if `saturation` or `lightness` are out of bounds

Returns:
  • (Color) - The resulting color

Parameters:
  • lightness (Number) -- The lightness of the color.
  • saturation (Number) -- The saturation of the color.
  • hue (Number) -- The hue of the color.
def hsl(hue, saturation, lightness)
  assert_type hue, :Number
  assert_type saturation, :Number
  assert_type lightness, :Number
  original_s = saturation
  original_l = lightness
  # This algorithm is from http://www.w3.org/TR/css3-color#hsl-color
  h, s, l = [hue, saturation, lightness].map { |a| a.value }
  raise ArgumentError.new("Saturation #{s} must be between 0% and 100%") if s < 0 || s > 100
  raise ArgumentError.new("Lightness #{l} must be between 0% and 100%") if l < 0 || l > 100
  h = (h % 360) / 360.0
  s /= 100.0
  l /= 100.0
  m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s
  m1 = l * 2 - m2
  Color.new([hue_to_rgb(m1, m2, h + 1.0/3),
             hue_to_rgb(m1, m2, h),
             hue_to_rgb(m1, m2, h - 1.0/3)].map { |c| (c * 0xff).round })
end