module Sass::Extras::Contrast::Functions
Constants
- MIN_BRIGHT_DIFF
- MIN_COLOR_DIFF
- MIN_CONTRAST_RATE_AA
- MIN_CONTRAST_RATE_AAA
- MIN_CONTRAST_RATE_AAA_LARGE_TEXT
- MIN_CONTRAST_RATE_AA_LARGE_TEXT
Public Class Methods
included(base)
click to toggle source
# File lib/sass/extras/contrast.rb, line 37 def self.included(base) base.declare :contrast_color, [:color] base.declare :contrast_color, [:color, :seed_color] base.declare :contrast_color, [:color, :seed_color, :wcag20_level] end
Public Instance Methods
contrast_color(color, seed_color = nil, wcag20_level = Sass::Script::String.new("aa"))
click to toggle source
# File lib/sass/extras/contrast.rb, line 43 def contrast_color(color, seed_color = nil, wcag20_level = Sass::Script::String.new("aa")) seed_color ||= color assert_type color, :Color, :color assert_type seed_color, :Color, :seed_color assert_type wcag20_level, :String, :wcag20_level direction = color.brightness > 127 ? darken_method : lighten_method new_color = seed_color percentage = 0.0 until conform(new_color, color, wcag20_level.value) || percentage > 100.0 amount = Sass::Script::Number.new percentage, ['%'] new_color = send(direction, seed_color, amount) percentage += 0.1 end new_color end
Protected Instance Methods
conform(color1, color2, wcag20_level = "aa")
click to toggle source
# File lib/sass/extras/contrast.rb, line 65 def conform(color1, color2, wcag20_level = "aa") bright_diff = (color1.brightness - color2.brightness).abs color_diff = color1.diff(color2) bright_diff >= MIN_BRIGHT_DIFF && color_diff >= MIN_COLOR_DIFF && wcag20_conform(color1, color2, wcag20_level) end
contrast_ratio(color1, color2)
click to toggle source
# File lib/sass/extras/contrast.rb, line 94 def contrast_ratio(color1, color2) assert_type color1, :Color assert_type color2, :Color l1, l2 = color1.luminance, color2.luminance l2, l1 = l1, l2 if l2 > l1 (l1 + 0.05) / (l2 + 0.05) end
min_contrast_rate(wcag20_level)
click to toggle source
# File lib/sass/extras/contrast.rb, line 77 def min_contrast_rate(wcag20_level) case wcag20_level.to_s.downcase when "aaa_large" MIN_CONTRAST_RATE_AAA_LARGE_TEXT when "aaa" MIN_CONTRAST_RATE_AAA when "aa_large" MIN_CONTRAST_RATE_AA_LARGE_TEXT else MIN_CONTRAST_RATE_AA end end
wcag20_conform(color1, color2, wcag20_level = "aa")
click to toggle source
# File lib/sass/extras/contrast.rb, line 90 def wcag20_conform(color1, color2, wcag20_level = "aa") contrast_ratio(color1, color2) >= min_contrast_rate(wcag20_level) end
Private Instance Methods
darken_method()
click to toggle source
# File lib/sass/extras/contrast.rb, line 108 def darken_method respond_to?(:detract_brightness) ? :detract_brightness : :darken end
lighten_method()
click to toggle source
# File lib/sass/extras/contrast.rb, line 104 def lighten_method respond_to?(:add_brightness) ? :add_brightness : :lighten end