color_contrast_calc 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/color_contrast_calc.rb +6 -46
- data/lib/color_contrast_calc/color.rb +160 -39
- data/lib/color_contrast_calc/converter.rb +4 -4
- data/lib/color_contrast_calc/deprecated.rb +9 -0
- data/lib/color_contrast_calc/shim.rb +1 -3
- data/lib/color_contrast_calc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5a62e36d449991a9381385e68fcf0c2e8201bdbc
|
4
|
+
data.tar.gz: 1053f1e6a889f8062ab53de73eaf1f92c434785f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1b51b39ef9e836dcf205883dba7a3ee96a3844eab201e799a012e22e85e88a4c69cdbe03d11f7d5f9fa1069c972034496c6c1b8e30d2a90b98b8bce04932d780
|
7
|
+
data.tar.gz: 49891f3150bdb8bf43831efe09150889109b9eaf9d0244ec5a4101d07dd77878caf82faa4831ea3779224ae46895daeebcef351ad38c9b958544ee7a24c3554d
|
data/lib/color_contrast_calc.rb
CHANGED
@@ -9,33 +9,22 @@ require 'color_contrast_calc/color'
|
|
9
9
|
require 'color_contrast_calc/sorter'
|
10
10
|
|
11
11
|
module ColorContrastCalc
|
12
|
-
##
|
13
|
-
# Error raised if creating a Color instance with invalid value.
|
14
|
-
|
15
|
-
class InvalidColorRepresentationError < StandardError; end
|
16
|
-
|
17
12
|
##
|
18
13
|
# Return an instance of Color.
|
19
14
|
#
|
20
15
|
# As +color_value+, you can pass a predefined color name, or an
|
21
16
|
# RGB value represented as an array of integers or a hex code such
|
22
17
|
# as [255, 255, 0] or "#ffff00". +name+ is assigned to the returned
|
23
|
-
# instance
|
18
|
+
# instance.
|
24
19
|
# @param color_value [String, Array<Integer>] Name of a predefined
|
25
|
-
# color or RGB value
|
26
|
-
# @param name [String]
|
27
|
-
#
|
20
|
+
# color, hex color code or RGB value
|
21
|
+
# @param name [String] Without specifying a name, a color keyword name
|
22
|
+
# (if exists) or the value of normalized hex color code is assigned
|
23
|
+
# to Color#name
|
28
24
|
# @return [Color] Instance of Color
|
29
25
|
|
30
26
|
def self.color_from(color_value, name = nil)
|
31
|
-
|
32
|
-
|
33
|
-
if !color_value.is_a?(String) && !color_value.is_a?(Array)
|
34
|
-
raise InvalidColorRepresentationError, error_message
|
35
|
-
end
|
36
|
-
|
37
|
-
return color_from_rgb(color_value, name) if color_value.is_a?(Array)
|
38
|
-
color_from_str(color_value, name)
|
27
|
+
Color.color_from(color_value, name)
|
39
28
|
end
|
40
29
|
|
41
30
|
##
|
@@ -101,33 +90,4 @@ module ColorContrastCalc
|
|
101
90
|
def self.hsl_colors(s: 100, l: 50, h_interval: 1)
|
102
91
|
Color::List.hsl_colors(s: s, l: l, h_interval: h_interval)
|
103
92
|
end
|
104
|
-
|
105
|
-
def self.color_from_rgb(color_value, name = nil)
|
106
|
-
error_message = 'An RGB value should be given in form of [r, g, b].'
|
107
|
-
|
108
|
-
unless Utils.valid_rgb?(color_value)
|
109
|
-
raise InvalidColorRepresentationError, error_message
|
110
|
-
end
|
111
|
-
|
112
|
-
hex_code = Utils.rgb_to_hex(color_value)
|
113
|
-
Color::List::HEX_TO_COLOR[hex_code] || Color.new(color_value, name)
|
114
|
-
end
|
115
|
-
|
116
|
-
private_class_method :color_from_rgb
|
117
|
-
|
118
|
-
def self.color_from_str(color_value, name = nil)
|
119
|
-
error_message = 'A hex code is in form of "#xxxxxx" where 0 <= x <= f.'
|
120
|
-
|
121
|
-
named_color = Color::List::NAME_TO_COLOR[color_value]
|
122
|
-
return named_color if named_color
|
123
|
-
|
124
|
-
unless Utils.valid_hex?(color_value)
|
125
|
-
raise InvalidColorRepresentationError, error_message
|
126
|
-
end
|
127
|
-
|
128
|
-
hex_code = Utils.normalize_hex(color_value)
|
129
|
-
Color::List::HEX_TO_COLOR[hex_code] || Color.new(hex_code, name)
|
130
|
-
end
|
131
|
-
|
132
|
-
private_class_method :color_from_str
|
133
93
|
end
|
@@ -7,6 +7,11 @@ require 'color_contrast_calc/deprecated'
|
|
7
7
|
require 'json'
|
8
8
|
|
9
9
|
module ColorContrastCalc
|
10
|
+
##
|
11
|
+
# Error raised if creating a Color instance with invalid value.
|
12
|
+
|
13
|
+
class InvalidColorRepresentationError < StandardError; end
|
14
|
+
|
10
15
|
##
|
11
16
|
# Represent specific colors.
|
12
17
|
#
|
@@ -15,6 +20,144 @@ module ColorContrastCalc
|
|
15
20
|
|
16
21
|
class Color
|
17
22
|
include Deprecated::Color
|
23
|
+
|
24
|
+
##
|
25
|
+
# Module that implements class methods of Color
|
26
|
+
|
27
|
+
module Factory
|
28
|
+
include Deprecated::Color::Factory
|
29
|
+
|
30
|
+
##
|
31
|
+
# Return an instance of Color for a predefined color name.
|
32
|
+
#
|
33
|
+
# Color names are defined at
|
34
|
+
# * {https://www.w3.org/TR/SVG/types.html#ColorKeywords}
|
35
|
+
# @param name [String] Name of color
|
36
|
+
# @return [Color] Instance of Color
|
37
|
+
|
38
|
+
def from_name(name)
|
39
|
+
List::NAME_TO_COLOR[name.downcase]
|
40
|
+
end
|
41
|
+
|
42
|
+
##
|
43
|
+
# Return an instance of Color for an RGB value
|
44
|
+
#
|
45
|
+
# @param rgb [Array<Integer>] RGB value represented as an
|
46
|
+
# array of integers such as [255, 255, 0]
|
47
|
+
# @param name [String] You can name the color to be created
|
48
|
+
# @return [Color] Instance of Color
|
49
|
+
|
50
|
+
def from_rgb(rgb, name = nil)
|
51
|
+
!name && List::HEX_TO_COLOR[Utils.rgb_to_hex(rgb)] ||
|
52
|
+
Color.new(rgb, name)
|
53
|
+
end
|
54
|
+
|
55
|
+
##
|
56
|
+
# Return an instance of Color for a hex color code.
|
57
|
+
#
|
58
|
+
# @param hex [String] Hex color code such as "#ffff00"
|
59
|
+
# @param name [String] You can name the color to be created
|
60
|
+
# @return [Color] Instance of Color
|
61
|
+
|
62
|
+
def from_hex(hex, name = nil)
|
63
|
+
normalized_hex = Utils.normalize_hex(hex)
|
64
|
+
!name && List::HEX_TO_COLOR[normalized_hex] ||
|
65
|
+
Color.new(normalized_hex, name)
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Return an instance of Color from an HSL value.
|
70
|
+
#
|
71
|
+
# @param hsl [Float] HSL value represented as an array of numbers
|
72
|
+
# @param name [String] You can name the color to be created
|
73
|
+
# @return [Color] Instance of Color
|
74
|
+
|
75
|
+
def from_hsl(hsl, name = nil)
|
76
|
+
rgb = Utils.hsl_to_rgb(hsl)
|
77
|
+
!name && List::HEX_TO_COLOR[Utils.rgb_to_hex(rgb)] ||
|
78
|
+
Color.new(rgb, name)
|
79
|
+
end
|
80
|
+
|
81
|
+
##
|
82
|
+
# Return an instance of Color.
|
83
|
+
#
|
84
|
+
# As +color_value+, you can pass a predefined color name, or an
|
85
|
+
# RGB value represented as an array of integers or a hex code such
|
86
|
+
# as [255, 255, 0] or "#ffff00". +name+ is assigned to the returned
|
87
|
+
# instance.
|
88
|
+
# @param color_value [String, Array<Integer>] Name of a predefined
|
89
|
+
# color, hex color code or RGB value
|
90
|
+
# @param name [String] Without specifying a name, a color keyword name
|
91
|
+
# (if exists) or the value of normalized hex color code is assigned
|
92
|
+
# to Color#name
|
93
|
+
# @return [Color] Instance of Color
|
94
|
+
|
95
|
+
def color_from(color_value, name = nil)
|
96
|
+
error_message = 'A color should be given as an array or string.'
|
97
|
+
|
98
|
+
if !color_value.is_a?(String) && !color_value.is_a?(Array)
|
99
|
+
raise InvalidColorRepresentationError, error_message
|
100
|
+
end
|
101
|
+
|
102
|
+
return color_from_rgb(color_value, name) if color_value.is_a?(Array)
|
103
|
+
color_from_str(color_value, name)
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Return an instance of Color.
|
108
|
+
#
|
109
|
+
# As +color_value+, you can pass a Color instance, a predefined color
|
110
|
+
# name, or an RGB value represented as an array of integers or a hex
|
111
|
+
# code such as [255, 255, 0] or "#ffff00". +name+ is assigned to the
|
112
|
+
# returned instance.
|
113
|
+
# @param color_value [Color, String, Array<Integer>] An instance of
|
114
|
+
# Color, a name of a predefined, color, hex color code or RGB value
|
115
|
+
# @param name [String] Without specifying a name, a color keyword name
|
116
|
+
# (if exists) or the value of normalized hex color code is assigned
|
117
|
+
# to Color#name
|
118
|
+
# @return [Color] Instance of Color
|
119
|
+
|
120
|
+
def as_color(color_value, name = nil)
|
121
|
+
if color_value.is_a? Color
|
122
|
+
return color_value if color_value.name == name
|
123
|
+
color_value = color_value.rgb
|
124
|
+
end
|
125
|
+
|
126
|
+
color_from(color_value, name)
|
127
|
+
end
|
128
|
+
|
129
|
+
def color_from_rgb(rgb_value, name = nil)
|
130
|
+
error_message = 'An RGB value should be given in form of [r, g, b].'
|
131
|
+
|
132
|
+
unless Utils.valid_rgb?(rgb_value)
|
133
|
+
raise InvalidColorRepresentationError, error_message
|
134
|
+
end
|
135
|
+
|
136
|
+
hex_code = Utils.rgb_to_hex(rgb_value)
|
137
|
+
!name && List::HEX_TO_COLOR[hex_code] || Color.new(rgb_value, name)
|
138
|
+
end
|
139
|
+
|
140
|
+
private :color_from_rgb
|
141
|
+
|
142
|
+
def color_from_str(color_value, name = nil)
|
143
|
+
error_message = 'A hex code is in form of "#xxxxxx" where 0 <= x <= f.'
|
144
|
+
|
145
|
+
named_color = !name && List::NAME_TO_COLOR[color_value]
|
146
|
+
return named_color if named_color
|
147
|
+
|
148
|
+
unless Utils.valid_hex?(color_value)
|
149
|
+
raise InvalidColorRepresentationError, error_message
|
150
|
+
end
|
151
|
+
|
152
|
+
hex_code = Utils.normalize_hex(color_value)
|
153
|
+
!name && List::HEX_TO_COLOR[hex_code] || Color.new(hex_code, name)
|
154
|
+
end
|
155
|
+
|
156
|
+
private :color_from_str
|
157
|
+
end
|
158
|
+
|
159
|
+
extend Factory
|
160
|
+
|
18
161
|
# @private
|
19
162
|
RGB_LIMITS = [0, 255].freeze
|
20
163
|
|
@@ -30,54 +173,20 @@ module ColorContrastCalc
|
|
30
173
|
|
31
174
|
attr_reader :rgb, :hex, :name, :relative_luminance
|
32
175
|
|
33
|
-
##
|
34
|
-
# Return an instance of Color for a predefined color name.
|
35
|
-
#
|
36
|
-
# Color names are defined at
|
37
|
-
# * {https://www.w3.org/TR/SVG/types.html#ColorKeywords}
|
38
|
-
# @param name [String] Name of color
|
39
|
-
# @return [Color] Instance of Color
|
40
|
-
|
41
|
-
def self.from_name(name)
|
42
|
-
List::NAME_TO_COLOR[name.downcase]
|
43
|
-
end
|
44
|
-
|
45
|
-
##
|
46
|
-
# Return an instance of Color for a hex color code.
|
47
|
-
#
|
48
|
-
# @param hex [String] Hex color code such as "#ffff00"
|
49
|
-
# @return [Color] Instance of Color
|
50
|
-
|
51
|
-
def self.from_hex(hex)
|
52
|
-
normalized_hex = Utils.normalize_hex(hex)
|
53
|
-
List::HEX_TO_COLOR[normalized_hex] || Color.new(normalized_hex)
|
54
|
-
end
|
55
|
-
|
56
|
-
##
|
57
|
-
# Create an instance of Color from an HSL value.
|
58
|
-
#
|
59
|
-
# @param hsl [Float] HSL value represented as an array of numbers
|
60
|
-
# @param name [String] You can name the color to be created
|
61
|
-
# @return [Color] Instance of Color
|
62
|
-
|
63
|
-
def self.new_from_hsl(hsl, name = nil)
|
64
|
-
new(Utils.hsl_to_rgb(hsl), name)
|
65
|
-
end
|
66
|
-
|
67
176
|
##
|
68
177
|
# Create a new instance of Color.
|
69
178
|
#
|
70
179
|
# @param rgb [Array<Integer>, String] RGB value represented as an array
|
71
180
|
# of integers or hex color code such as [255, 255, 0] or "#ffff00".
|
72
181
|
# @param name [String] You can name the color to be created.
|
73
|
-
# Without this option,
|
74
|
-
# assigned instead.
|
182
|
+
# Without this option, a color keyword name (if exists) or the value
|
183
|
+
# of normalized hex color code is assigned instead.
|
75
184
|
# @return [Color] New instance of Color
|
76
185
|
|
77
186
|
def initialize(rgb, name = nil)
|
78
187
|
@rgb = rgb.is_a?(String) ? Utils.hex_to_rgb(rgb) : rgb
|
79
188
|
@hex = Utils.rgb_to_hex(@rgb)
|
80
|
-
@name = name ||
|
189
|
+
@name = name || common_name
|
81
190
|
@relative_luminance = Checker.relative_luminance(@rgb)
|
82
191
|
end
|
83
192
|
|
@@ -85,7 +194,7 @@ module ColorContrastCalc
|
|
85
194
|
# Return HSL value of the color.
|
86
195
|
#
|
87
196
|
# The value is calculated from the RGB value, so if you create
|
88
|
-
# the instance by Color.
|
197
|
+
# the instance by Color.from_hsl method, the value used to
|
89
198
|
# create the color does not necessarily correspond to the value
|
90
199
|
# of this property.
|
91
200
|
#
|
@@ -95,6 +204,18 @@ module ColorContrastCalc
|
|
95
204
|
@hsl ||= Utils.rgb_to_hsl(@rgb)
|
96
205
|
end
|
97
206
|
|
207
|
+
##
|
208
|
+
# Return a {https://www.w3.org/TR/SVG/types.html#ColorKeywords
|
209
|
+
# color keyword name} when the name corresponds to the hex code
|
210
|
+
# of the color. Otherwise the hex code will be returned.
|
211
|
+
#
|
212
|
+
# @return [String] Color keyword name or hex color code
|
213
|
+
|
214
|
+
def common_name
|
215
|
+
named_color = List::HEX_TO_COLOR[@hex]
|
216
|
+
named_color && named_color.name || @hex
|
217
|
+
end
|
218
|
+
|
98
219
|
##
|
99
220
|
# Return a new instance of Color with adjusted contrast.
|
100
221
|
#
|
@@ -402,7 +523,7 @@ module ColorContrastCalc
|
|
402
523
|
# saturation and lightness
|
403
524
|
|
404
525
|
def self.hsl_colors(s: 100, l: 50, h_interval: 1)
|
405
|
-
0.step(360, h_interval).map {|h| Color.
|
526
|
+
0.step(360, h_interval).map {|h| Color.from_hsl([h, s, l]) }.freeze
|
406
527
|
end
|
407
528
|
end
|
408
529
|
|
@@ -33,7 +33,7 @@ module ColorContrastCalc
|
|
33
33
|
##
|
34
34
|
# Return contrast adjusted RGB value of passed color.
|
35
35
|
#
|
36
|
-
#
|
36
|
+
# The calculation is based on the definition found at
|
37
37
|
# https://www.w3.org/TR/filter-effects/#funcdef-contrast
|
38
38
|
# https://www.w3.org/TR/SVG/filters.html#TransferFunctionElementAttributes
|
39
39
|
# @param rgb [Array<Integer>] The Original RGB value before the adjustment
|
@@ -50,7 +50,7 @@ module ColorContrastCalc
|
|
50
50
|
##
|
51
51
|
# Return brightness adjusted RGB value of passed color.
|
52
52
|
#
|
53
|
-
#
|
53
|
+
# The calculation is based on the definition found at
|
54
54
|
# https://www.w3.org/TR/filter-effects/#funcdef-brightness
|
55
55
|
# https://www.w3.org/TR/SVG/filters.html#TransferFunctionElementAttributes
|
56
56
|
# @param rgb [Array<Integer>] The Original RGB value before the adjustment
|
@@ -100,7 +100,7 @@ module ColorContrastCalc
|
|
100
100
|
##
|
101
101
|
# Return a hue rotation applied RGB value of passed color.
|
102
102
|
#
|
103
|
-
#
|
103
|
+
# The calculation is based on the definition found at
|
104
104
|
# https://www.w3.org/TR/filter-effects/#funcdef-hue-rotate
|
105
105
|
# https://www.w3.org/TR/SVG/filters.html#TransferFunctionElementAttributes
|
106
106
|
# @param rgb [Array<Integer>] The Original RGB value before the rotation
|
@@ -166,7 +166,7 @@ module ColorContrastCalc
|
|
166
166
|
[-0.2126, -0.7152, 0.9278]]
|
167
167
|
|
168
168
|
##
|
169
|
-
# Convert
|
169
|
+
# Convert a passed color to grayscale.
|
170
170
|
#
|
171
171
|
# The calculation is based on the definition found at
|
172
172
|
# https://www.w3.org/TR/filter-effects/#funcdef-grayscale
|
@@ -10,6 +10,15 @@ module ColorContrastCalc
|
|
10
10
|
end
|
11
11
|
|
12
12
|
module Color
|
13
|
+
module Factory
|
14
|
+
##
|
15
|
+
# @deprecated Use Color.from_hsl() instead.
|
16
|
+
def new_from_hsl(hsl, name = nil)
|
17
|
+
Deprecated.warn(__method__, :from_hsl)
|
18
|
+
new(Utils.hsl_to_rgb(hsl), name)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
13
22
|
# @deprecated Use {#with_contrast} instead
|
14
23
|
def new_contrast_color(ratio, name = nil)
|
15
24
|
Deprecated.warn(__method__, :with_contrast)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: color_contrast_calc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- HASHIMOTO, Naoki
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|