color_contrast_calc 0.5.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.rubocop.yml +9 -1
- data/.travis.yml +13 -5
- data/README.ja.md +80 -11
- data/README.md +83 -11
- data/color_contrast_calc.gemspec +6 -6
- data/examples/color_instance.rb +2 -1
- data/examples/sort_colors.rb +17 -9
- data/lib/color_contrast_calc.rb +81 -5
- data/lib/color_contrast_calc/color.rb +115 -43
- data/lib/color_contrast_calc/color_function_parser.rb +649 -0
- data/lib/color_contrast_calc/converter.rb +52 -0
- data/lib/color_contrast_calc/data/color_keywords.json +1 -0
- data/lib/color_contrast_calc/deprecated.rb +1 -1
- data/lib/color_contrast_calc/invalid_color_representation_error.rb +44 -0
- data/lib/color_contrast_calc/sorter.rb +151 -107
- data/lib/color_contrast_calc/transparency_calc.rb +55 -0
- data/lib/color_contrast_calc/utils.rb +89 -5
- data/lib/color_contrast_calc/version.rb +1 -1
- metadata +17 -15
@@ -12,11 +12,14 @@ module ColorContrastCalc
|
|
12
12
|
module Utils
|
13
13
|
using Shim unless //.respond_to? :match?
|
14
14
|
|
15
|
+
MIN_OPACITY = 0
|
16
|
+
MAX_OPACITY = 1.0
|
17
|
+
|
15
18
|
HSL_UPPER_LIMIT = [360, 100, 100].freeze
|
16
19
|
|
17
20
|
private_constant :HSL_UPPER_LIMIT
|
18
21
|
|
19
|
-
HEX_RE = /\A#?[0-9a-f]{3}([0-9a-f]{3})?\z/i
|
22
|
+
HEX_RE = /\A#?[0-9a-f]{3}([0-9a-f]{3})?\z/i.freeze
|
20
23
|
|
21
24
|
private_constant :HEX_RE
|
22
25
|
|
@@ -196,11 +199,9 @@ module ColorContrastCalc
|
|
196
199
|
# @return [true, false] true if a valid HSL value is passed
|
197
200
|
|
198
201
|
def self.valid_hsl?(hsl)
|
199
|
-
|
200
|
-
|
201
|
-
return false if !c.is_a?(Numeric) || c < 0 || c > HSL_UPPER_LIMIT[i]
|
202
|
+
hsl.length == 3 && hsl.each_with_index.all? do |c, i|
|
203
|
+
c.is_a?(Numeric) && c >= 0 && c <= HSL_UPPER_LIMIT[i]
|
202
204
|
end
|
203
|
-
true
|
204
205
|
end
|
205
206
|
|
206
207
|
##
|
@@ -236,6 +237,89 @@ module ColorContrastCalc
|
|
236
237
|
def self.uppercase?(str)
|
237
238
|
!/[[:lower:]]/.match?(str)
|
238
239
|
end
|
240
|
+
|
241
|
+
module Hwb
|
242
|
+
HWB_UPPER_LIMIT = [360, 100, 100].freeze
|
243
|
+
|
244
|
+
def normalize_hwb(hwb)
|
245
|
+
# https://www.w3.org/TR/2019/WD-css-color-4-20191105/
|
246
|
+
h, w, b = hwb
|
247
|
+
|
248
|
+
achromatic_percent = w + b
|
249
|
+
denominator = achromatic_percent > 100 ? achromatic_percent : 100
|
250
|
+
|
251
|
+
normalized_w = w.to_f / denominator
|
252
|
+
normalized_b = b.to_f / denominator
|
253
|
+
|
254
|
+
[h, normalized_w, normalized_b]
|
255
|
+
end
|
256
|
+
|
257
|
+
private :normalize_hwb
|
258
|
+
|
259
|
+
##
|
260
|
+
# Convert an HWB value to an RGB value.
|
261
|
+
#
|
262
|
+
# @param hwb [Array<Float>] HWB value represented as an array of numbers
|
263
|
+
# @return [Array<Integer>] RGB value represented as an array of integers
|
264
|
+
|
265
|
+
def hwb_to_rgb(hwb)
|
266
|
+
hue, white, black = normalize_hwb(hwb)
|
267
|
+
rgb = Utils.hsl_to_rgb([hue, 100, 50])
|
268
|
+
|
269
|
+
rgb.map do |c|
|
270
|
+
((c * (1.0 - white - black)) + white * 255).round
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
##
|
275
|
+
# Convert an HWB value to hex color code.
|
276
|
+
#
|
277
|
+
# @param hwb [Array<Float>] HWB value represented as an array of numbers
|
278
|
+
# @return [String] Hex color code such as "#ffff00"
|
279
|
+
|
280
|
+
def hwb_to_hex(hwb)
|
281
|
+
rgb_to_hex(hwb_to_rgb(hwb))
|
282
|
+
end
|
283
|
+
|
284
|
+
##
|
285
|
+
# Convert an RGB value to an HWB value.
|
286
|
+
#
|
287
|
+
# @param rgb [Array<Integer>] RGB value represented as an array of
|
288
|
+
# integers
|
289
|
+
# @return [Array<Float>] HWB value represented as an array of numbers
|
290
|
+
|
291
|
+
def rgb_to_hwb(rgb)
|
292
|
+
# https://www.w3.org/TR/2020/WD-css-color-4-20201112/
|
293
|
+
hsl = Utils.rgb_to_hsl(rgb)
|
294
|
+
white = rgb.min
|
295
|
+
black = 255 - rgb.max
|
296
|
+
[hsl[0], white * 100 / 255.0, black * 100 / 255.0]
|
297
|
+
end
|
298
|
+
|
299
|
+
##
|
300
|
+
# Convert hex color code to an HWB value.
|
301
|
+
#
|
302
|
+
# @param hex_code [String] Hex color code such as "#ffff00"
|
303
|
+
# @return [Array<Float>] HWB value represented as an array of numbers
|
304
|
+
|
305
|
+
def hex_to_hwb(hex_code)
|
306
|
+
rgb_to_hwb(Utils.hex_to_rgb(hex_code))
|
307
|
+
end
|
308
|
+
|
309
|
+
##
|
310
|
+
# Check if a given array is a valid representation of HWB color.
|
311
|
+
#
|
312
|
+
# @param hwb [Array<Float>] HWB value represented as an array of numbers
|
313
|
+
# @return [true, false] true if a valid HWB value is passed
|
314
|
+
|
315
|
+
def valid_hwb?(hwb)
|
316
|
+
hwb.length == 3 && hwb.each_with_index.all? do |c, i|
|
317
|
+
c.is_a?(Numeric) && c >= 0 && c <= HWB_UPPER_LIMIT[i]
|
318
|
+
end
|
319
|
+
end
|
320
|
+
end
|
321
|
+
|
322
|
+
extend Hwb
|
239
323
|
end
|
240
324
|
|
241
325
|
##
|
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.9.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:
|
11
|
+
date: 2021-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,70 +16,70 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1
|
19
|
+
version: '2.1'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1
|
26
|
+
version: '2.1'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '13.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '13.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
47
|
+
version: '3.10'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
54
|
+
version: '3.10'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubocop
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: '1.7'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
68
|
+
version: '1.7'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: yard
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.9
|
75
|
+
version: '0.9'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.9
|
82
|
+
version: '0.9'
|
83
83
|
description:
|
84
84
|
email:
|
85
85
|
- hashimoto.naoki@gmail.com
|
@@ -112,12 +112,15 @@ files:
|
|
112
112
|
- lib/color_contrast_calc.rb
|
113
113
|
- lib/color_contrast_calc/checker.rb
|
114
114
|
- lib/color_contrast_calc/color.rb
|
115
|
+
- lib/color_contrast_calc/color_function_parser.rb
|
115
116
|
- lib/color_contrast_calc/converter.rb
|
116
117
|
- lib/color_contrast_calc/data/color_keywords.json
|
117
118
|
- lib/color_contrast_calc/deprecated.rb
|
119
|
+
- lib/color_contrast_calc/invalid_color_representation_error.rb
|
118
120
|
- lib/color_contrast_calc/shim.rb
|
119
121
|
- lib/color_contrast_calc/sorter.rb
|
120
122
|
- lib/color_contrast_calc/threshold_finder.rb
|
123
|
+
- lib/color_contrast_calc/transparency_calc.rb
|
121
124
|
- lib/color_contrast_calc/utils.rb
|
122
125
|
- lib/color_contrast_calc/version.rb
|
123
126
|
homepage: https://github.com/nico-hn/color_contrast_calc_rb/
|
@@ -132,15 +135,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
132
135
|
requirements:
|
133
136
|
- - ">="
|
134
137
|
- !ruby/object:Gem::Version
|
135
|
-
version: '2.
|
138
|
+
version: '2.4'
|
136
139
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
140
|
requirements:
|
138
141
|
- - ">="
|
139
142
|
- !ruby/object:Gem::Version
|
140
143
|
version: '0'
|
141
144
|
requirements: []
|
142
|
-
|
143
|
-
rubygems_version: 2.6.11
|
145
|
+
rubygems_version: 3.1.4
|
144
146
|
signing_key:
|
145
147
|
specification_version: 4
|
146
148
|
summary: Utility that helps you choose colors with sufficient contrast, WCAG 2.0 in
|