dvl-color 0.0.1
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 +7 -0
- data/.gitignore +15 -0
- data/.ruby-version +1 -0
- data/Gemfile +2 -0
- data/LICENSE.md +20 -0
- data/README.md +23 -0
- data/Rakefile +127 -0
- data/circle.yml +11 -0
- data/dvl-color.gemspec +27 -0
- data/lib/dvl/color/fake_rgba.rb +12 -0
- data/lib/dvl/color/generator.rb +236 -0
- data/lib/dvl/color/version.rb +5 -0
- data/lib/dvl/color.rb +5 -0
- data/script/cibuild +3 -0
- data/script/deploy +16 -0
- data/script/release +38 -0
- data/spec/dvl/color/generator_spec.rb +34 -0
- data/spec/spec_helper.rb +26 -0
- metadata +119 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7c2cd87354cf56ced0b0e053b069083e13e35b5b
|
4
|
+
data.tar.gz: d92487e19d66c3d41846b73e53b694cd51264ca0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b3187e6e01363291bde8e785d10d824024c6ef7b3ec22fbd944ebc7c39dbd902f6f88dd1d34ed53ecdd10ed0973fe6f43db5591837020517d05f3d2f360c32ed
|
7
|
+
data.tar.gz: dc36d86106c02bcb7095029241d651fb640f67ebed9c9362d13d5c3e858f071388fcd3d8df76c2406f787045f013a0c18b6e20b4a9077cb7e3944446b80a3233
|
data/.gitignore
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
.bundle/
|
2
|
+
log/*.log
|
3
|
+
pkg/
|
4
|
+
spec/dummy/config/database.yml
|
5
|
+
spec/dummy/log/*.log
|
6
|
+
spec/dummy/tmp/
|
7
|
+
spec/dummy/.sass-cache
|
8
|
+
spec/dummy/public/uploads/*
|
9
|
+
tmp/*
|
10
|
+
coverage/*
|
11
|
+
*.gem
|
12
|
+
Gemfile.lock
|
13
|
+
spec/dummy/db/test.sqlite3
|
14
|
+
gemfiles/*.lock
|
15
|
+
.ruby-gemset
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.0
|
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2014 Department of Better Technology
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
dvl-color
|
2
|
+
=======
|
3
|
+
|
4
|
+
[![RubyGem][gem]](http://rubygems.org/gems/dvl-color)
|
5
|
+
|
6
|
+
Generate beautiful, accessible color schemes.
|
7
|
+
|
8
|
+
[View some examples →](dobtco.github.io/dvl-color)
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
#### 1. Install the gem
|
13
|
+
```ruby
|
14
|
+
gem 'dvl-color'
|
15
|
+
```
|
16
|
+
|
17
|
+
#### 2. Generate a color scheme
|
18
|
+
```ruby
|
19
|
+
generator = Dvl::Color::Generator.new('#fff') # white background
|
20
|
+
generator.to_h # prints a bunch of variables
|
21
|
+
```
|
22
|
+
|
23
|
+
[gem]: https://img.shields.io/gem/v/dvl-color.svg
|
data/Rakefile
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'dvl/color'
|
3
|
+
require_relative './spec/spec_helper'
|
4
|
+
|
5
|
+
task :generate_preview do
|
6
|
+
require 'fortitude'
|
7
|
+
|
8
|
+
class PreviewView < Fortitude::Widget
|
9
|
+
doctype :html5
|
10
|
+
use_instance_variables_for_assigns true
|
11
|
+
format_output false
|
12
|
+
start_and_end_comments false
|
13
|
+
extra_assigns :use
|
14
|
+
|
15
|
+
def content
|
16
|
+
rawtext "<!doctype html>"
|
17
|
+
|
18
|
+
html {
|
19
|
+
head {
|
20
|
+
title 'Color Test'
|
21
|
+
script(src: 'https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js')
|
22
|
+
script %{
|
23
|
+
$(document).on('keydown', function(e){
|
24
|
+
if (e.keyCode == 192) $('.debug').toggle();
|
25
|
+
if (e.keyCode == 70) $('.input').toggle();
|
26
|
+
});
|
27
|
+
}.html_safe
|
28
|
+
|
29
|
+
style %{
|
30
|
+
body {
|
31
|
+
margin: 0;
|
32
|
+
font-size: 1.125rem;
|
33
|
+
line-height: 2rem;
|
34
|
+
font-family: sans-serif;
|
35
|
+
font-weight: 400;
|
36
|
+
-webkit-font-smoothing: antialiased;
|
37
|
+
-moz-osx-font-smoothing: grayscale;
|
38
|
+
}
|
39
|
+
|
40
|
+
h2 {
|
41
|
+
margin: 5px 0;
|
42
|
+
font-size: 4.29rem;
|
43
|
+
line-height: 5rem;
|
44
|
+
font-family: serif;
|
45
|
+
font-weight: 100;
|
46
|
+
}
|
47
|
+
|
48
|
+
* {
|
49
|
+
box-sizing: border-box;
|
50
|
+
}
|
51
|
+
|
52
|
+
.color_test_section {
|
53
|
+
width: 25%;
|
54
|
+
padding: 25px;
|
55
|
+
display: inline-block;
|
56
|
+
}
|
57
|
+
|
58
|
+
.input {
|
59
|
+
margin: 0 0 1rem;
|
60
|
+
padding: 0.5rem 1rem;
|
61
|
+
width: 100%;
|
62
|
+
border-radius: 4px;
|
63
|
+
border-style: solid;
|
64
|
+
border-width: 1px;
|
65
|
+
}
|
66
|
+
|
67
|
+
.error_bubble {
|
68
|
+
margin-top: 0.5rem;
|
69
|
+
padding: 0.5rem 1rem;
|
70
|
+
border-radius: 4px;
|
71
|
+
}
|
72
|
+
|
73
|
+
.debug {
|
74
|
+
margin-top: 10px;
|
75
|
+
font-size: 13px;
|
76
|
+
}
|
77
|
+
}.squish.html_safe
|
78
|
+
}
|
79
|
+
|
80
|
+
body {
|
81
|
+
test_color_array.each do |color|
|
82
|
+
render_section(color)
|
83
|
+
end
|
84
|
+
}
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
def render_section(color)
|
89
|
+
generator = Dvl::Color::Generator.new(color)
|
90
|
+
|
91
|
+
div(class: 'color_test_section', style: "background-color: #{generator.background_color.to_hex}") {
|
92
|
+
h2('Header', style: "color: #{generator.base_color.to_hex}")
|
93
|
+
label {
|
94
|
+
span 'Text ', style: "color: #{generator.base_color.to_hex}"
|
95
|
+
abbr '*', style: "color: #{generator.error_color.to_hex}"
|
96
|
+
}
|
97
|
+
div(
|
98
|
+
'This is my input', class: 'input',
|
99
|
+
style: "border-color: rgba(#{generator.base_color.to_hex},0.6);
|
100
|
+
background-color: #{generator.input_background.to_hex};
|
101
|
+
color: #{generator.input_color.to_hex};"
|
102
|
+
)
|
103
|
+
div(
|
104
|
+
'This is my input', class: 'input error_input error_input_focus',
|
105
|
+
style: "display: none;
|
106
|
+
border-color: #{generator.error_color.to_hex};
|
107
|
+
background-color: #{generator.input_background_focus.to_hex};
|
108
|
+
color: #{generator.input_color.to_hex};"
|
109
|
+
)
|
110
|
+
div(
|
111
|
+
'Error!', class: 'error_bubble',
|
112
|
+
style: "background-color: #{generator.error_bubble_background.to_hex};
|
113
|
+
color: #{generator.error_bubble_color.to_hex};"
|
114
|
+
)
|
115
|
+
|
116
|
+
div(
|
117
|
+
generator.to_debug_s.html_safe, class: 'debug',
|
118
|
+
style: "color: #{generator.base_color.to_hex}; display: none;"
|
119
|
+
)
|
120
|
+
}
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
html = PreviewView.new.to_html
|
125
|
+
|
126
|
+
File.write('./index.html', html)
|
127
|
+
end
|
data/circle.yml
ADDED
data/dvl-color.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "dvl/color/version"
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "dvl-color"
|
9
|
+
s.version = Dvl::Color::VERSION
|
10
|
+
|
11
|
+
s.required_ruby_version = Gem::Requirement.new('>= 2.0.0')
|
12
|
+
s.authors = ['Adam Becker']
|
13
|
+
s.summary = 'Generate beautiful, accessible color schemes.'
|
14
|
+
s.email = 'adam@dobt.co'
|
15
|
+
s.license = 'MIT'
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {features,spec}/*`.split("\n")
|
19
|
+
|
20
|
+
s.homepage = 'http://github.com/dobtco/dvl-color'
|
21
|
+
|
22
|
+
s.add_dependency 'chroma', '~> 0.0.1'
|
23
|
+
s.add_dependency 'chroma_wcag_contrast', '~> 0.0.1'
|
24
|
+
|
25
|
+
s.add_development_dependency 'fortitude'
|
26
|
+
s.add_development_dependency 'rspec'
|
27
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
class Dvl::Color::FakeRgba
|
2
|
+
def self.calculate(background, foreground, alpha)
|
3
|
+
bg = background.rgb
|
4
|
+
fg = foreground.rgb
|
5
|
+
|
6
|
+
r = (fg.r * alpha) + (bg.r * (1 - alpha))
|
7
|
+
g = (fg.g * alpha) + (bg.g * (1 - alpha))
|
8
|
+
b = (fg.b * alpha) + (bg.b * (1 - alpha))
|
9
|
+
|
10
|
+
Chroma::Color.new(Chroma::ColorModes::Rgb.new(r, g, b), :hex)
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,236 @@
|
|
1
|
+
class Dvl::Color::Generator
|
2
|
+
DARK_BACKGROUND_CUTOFF = 120
|
3
|
+
|
4
|
+
attr_accessor :background_color,
|
5
|
+
:input_color,
|
6
|
+
:input_background,
|
7
|
+
:input_background_focus,
|
8
|
+
:dropdown_background,
|
9
|
+
:dropdown_color
|
10
|
+
|
11
|
+
# @param background_color [Chroma::Color or String]
|
12
|
+
def initialize(background_color)
|
13
|
+
self.background_color = background_color
|
14
|
+
|
15
|
+
unless background_color.is_a?(Chroma::Color)
|
16
|
+
self.background_color = Chroma.paint(background_color)
|
17
|
+
end
|
18
|
+
|
19
|
+
self.input_background, self.input_background_focus, self.input_color = generate_input_colors
|
20
|
+
self.dropdown_background, self.dropdown_color = generate_dropdown_colors
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_h
|
24
|
+
{
|
25
|
+
backgroundColor: background_color.to_hex,
|
26
|
+
baseColor: base_color.to_hex,
|
27
|
+
errorColor: error_color.to_hex,
|
28
|
+
errorBubbleBackground: error_bubble_background.to_hex,
|
29
|
+
errorBubbleColor: error_bubble_color.to_hex,
|
30
|
+
inputBackground: input_background.to_hex,
|
31
|
+
inputBackgroundFocus: input_background_focus.to_hex,
|
32
|
+
inputColor: input_color.to_hex,
|
33
|
+
dropdownBackground: dropdown_background.to_hex,
|
34
|
+
dropdownColor: dropdown_color.to_hex
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_scss
|
39
|
+
''.tap do |str|
|
40
|
+
to_h.each do |k, v|
|
41
|
+
str << "$#{k}:#{v};"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_debug_s
|
47
|
+
str = []
|
48
|
+
|
49
|
+
to_h.each do |k, v|
|
50
|
+
str << "#{k}: #{v}"
|
51
|
+
end
|
52
|
+
|
53
|
+
str << "Background brightness: #{background_color.brightness}"
|
54
|
+
|
55
|
+
str << "Ratio: #{contrast(background_color, base_color).round(2)}"
|
56
|
+
str << "Error Ratio: #{contrast(background_color, error_color).round(2)}"
|
57
|
+
str << "Error Bubble Ratio: #{contrast(error_bubble_background, error_bubble_color).round(2)}"
|
58
|
+
str << "Input ratio: #{contrast(input_background, input_color).round(2)}"
|
59
|
+
str << "Error satur: #{error_color.hsl.s.round(2)}"
|
60
|
+
str << "Conservative light: #{conservative_background_light?}"
|
61
|
+
str << "Conservative dark: #{conservative_background_dark?}"
|
62
|
+
|
63
|
+
str.join("<br>")
|
64
|
+
end
|
65
|
+
|
66
|
+
def conservative_background_dark?
|
67
|
+
background_color.brightness < 52
|
68
|
+
end
|
69
|
+
|
70
|
+
def conservative_background_light?
|
71
|
+
background_color.brightness > 229
|
72
|
+
end
|
73
|
+
|
74
|
+
def target_contrast_ratio
|
75
|
+
if conservative_background_dark?
|
76
|
+
13
|
77
|
+
elsif conservative_background_light?
|
78
|
+
10
|
79
|
+
else
|
80
|
+
7
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def base_color
|
85
|
+
@base_color ||= begin
|
86
|
+
text = background_color.dup
|
87
|
+
|
88
|
+
# If the background is dark, we lighten it.
|
89
|
+
# If the background is light, we darken it.
|
90
|
+
amt = if background_color.brightness < DARK_BACKGROUND_CUTOFF # Dark
|
91
|
+
1
|
92
|
+
else
|
93
|
+
-1
|
94
|
+
end
|
95
|
+
|
96
|
+
target = target_contrast_ratio
|
97
|
+
|
98
|
+
while contrast(background_color, text) < target
|
99
|
+
new_text = text.lighten(amt)
|
100
|
+
|
101
|
+
# prevent infinite loop
|
102
|
+
break if text == new_text
|
103
|
+
|
104
|
+
text = new_text
|
105
|
+
end
|
106
|
+
|
107
|
+
# If the background is a conservative color, use a conservative
|
108
|
+
# (desaturated) text color.
|
109
|
+
|
110
|
+
if conservative_background_dark? || conservative_background_light?
|
111
|
+
hsl = text.hsl
|
112
|
+
hsl.s = hsl.s * 0.15
|
113
|
+
text = Chroma.paint(hsl)
|
114
|
+
end
|
115
|
+
|
116
|
+
text
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
def error_color
|
121
|
+
@error_color ||= begin
|
122
|
+
error = background_color.dup
|
123
|
+
|
124
|
+
# Spin the color wheel until we land on "red"
|
125
|
+
amt = if error.hsl.h > 180
|
126
|
+
15
|
127
|
+
else
|
128
|
+
-15
|
129
|
+
end
|
130
|
+
|
131
|
+
while !red?(error)
|
132
|
+
error = error.spin(amt)
|
133
|
+
end
|
134
|
+
|
135
|
+
# White
|
136
|
+
if background_color == white
|
137
|
+
error = Chroma.paint('d95b76')
|
138
|
+
# Black
|
139
|
+
elsif background_color == black
|
140
|
+
error = Chroma.paint('d95b76')
|
141
|
+
# Grayscale
|
142
|
+
elsif error.hsl.s == 0
|
143
|
+
error = error.saturate(100)
|
144
|
+
# Otherwise, ensure saturation is at least 0.4, or else it's not really red...
|
145
|
+
elsif error.hsl.s < 0.4
|
146
|
+
hsl = error.hsl
|
147
|
+
hsl.s = 0.4
|
148
|
+
error = Chroma.paint(hsl)
|
149
|
+
elsif conservative_background_light?
|
150
|
+
hsl = error.hsl
|
151
|
+
hsl.l = hsl.l - 0.4
|
152
|
+
error = Chroma.paint(hsl)
|
153
|
+
end
|
154
|
+
|
155
|
+
amt = if background_color.brightness < 100
|
156
|
+
2
|
157
|
+
else
|
158
|
+
-2
|
159
|
+
end
|
160
|
+
|
161
|
+
while contrast(error, background_color) < 2.5
|
162
|
+
new_error = error.lighten(amt)
|
163
|
+
break if error == new_error
|
164
|
+
error = new_error
|
165
|
+
end
|
166
|
+
|
167
|
+
error
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
def error_bubble_background
|
172
|
+
if error_color.brightness > 200
|
173
|
+
white
|
174
|
+
else
|
175
|
+
error_color
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
def error_bubble_color
|
180
|
+
if error_bubble_background == white
|
181
|
+
background_color
|
182
|
+
else
|
183
|
+
white
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
def generate_dropdown_colors
|
188
|
+
if background_color.brightness < DARK_BACKGROUND_CUTOFF
|
189
|
+
[base_color, background_color]
|
190
|
+
else
|
191
|
+
[background_color, base_color]
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def black
|
196
|
+
Chroma.paint('#000')
|
197
|
+
end
|
198
|
+
|
199
|
+
def white
|
200
|
+
Chroma.paint('#fff')
|
201
|
+
end
|
202
|
+
|
203
|
+
private
|
204
|
+
|
205
|
+
def generate_input_colors
|
206
|
+
input_background = Dvl::Color::FakeRgba.calculate(background_color, white, 0.4)
|
207
|
+
input_background_focus = Dvl::Color::FakeRgba.calculate(background_color, white, 0.7)
|
208
|
+
input_color = base_color
|
209
|
+
|
210
|
+
if contrast(input_background, input_color) > 6
|
211
|
+
[input_background, input_background_focus, input_color]
|
212
|
+
else
|
213
|
+
alpha = 0.2
|
214
|
+
input_background = Dvl::Color::FakeRgba.calculate(background_color, black, alpha)
|
215
|
+
input_background_focus = Dvl::Color::FakeRgba.calculate(background_color, black, alpha + 0.4)
|
216
|
+
|
217
|
+
while contrast(input_background, input_color) < 6
|
218
|
+
alpha += 0.01
|
219
|
+
break if alpha == 1
|
220
|
+
input_background = Dvl::Color::FakeRgba.calculate(background_color, black, alpha)
|
221
|
+
input_background_focus = Dvl::Color::FakeRgba.calculate(background_color, black, alpha + 0.4)
|
222
|
+
end
|
223
|
+
|
224
|
+
[input_background, input_background_focus, input_color]
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def red?(color)
|
229
|
+
color.hsl.h > 355 ||
|
230
|
+
color.hsl.h < 10
|
231
|
+
end
|
232
|
+
|
233
|
+
def contrast(c1, c2)
|
234
|
+
ChromaWcagContrast.ratio(c1, c2)
|
235
|
+
end
|
236
|
+
end
|
data/lib/dvl/color.rb
ADDED
data/script/cibuild
ADDED
data/script/deploy
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
(git branch | grep -q '* master') || {
|
6
|
+
echo "Only release from the master branch."
|
7
|
+
exit 1
|
8
|
+
}
|
9
|
+
|
10
|
+
init_branch=`git rev-parse --abbrev-ref HEAD`
|
11
|
+
git branch -D gh-pages
|
12
|
+
git checkout -b gh-pages
|
13
|
+
rake generate_preview
|
14
|
+
git commit -am 'deploy preview'
|
15
|
+
git push origin gh-pages --force
|
16
|
+
git checkout $init_branch
|
data/script/release
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
# Tag and push a release.
|
3
|
+
|
4
|
+
set -e
|
5
|
+
|
6
|
+
# Make sure we're in the project root.
|
7
|
+
|
8
|
+
cd $(dirname "$0")/..
|
9
|
+
|
10
|
+
# Build a new gem archive.
|
11
|
+
|
12
|
+
rm -rf dvl-color-*.gem
|
13
|
+
gem build -q dvl-color.gemspec
|
14
|
+
|
15
|
+
# Make sure we're on the master branch.
|
16
|
+
|
17
|
+
(git branch | grep -q '* master') || {
|
18
|
+
echo "Only release from the master branch."
|
19
|
+
exit 1
|
20
|
+
}
|
21
|
+
|
22
|
+
# Figure out what version we're releasing.
|
23
|
+
|
24
|
+
tag=v`ls dvl-color-*.gem | sed 's/^dvl-color-\(.*\)\.gem$/\1/'`
|
25
|
+
|
26
|
+
# Make sure we haven't released this version before.
|
27
|
+
|
28
|
+
git fetch -t origin
|
29
|
+
|
30
|
+
(git tag -l | grep -q "$tag") && {
|
31
|
+
echo "Whoops, there's already a '${tag}' tag."
|
32
|
+
exit 1
|
33
|
+
}
|
34
|
+
|
35
|
+
# Tag it and bag it.
|
36
|
+
|
37
|
+
gem push dvl-color-*.gem && git tag "$tag" &&
|
38
|
+
git push origin master && git push origin "$tag"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Dvl::Color::Generator do
|
4
|
+
expected_output = <<-RESULT
|
5
|
+
f7f7f7: $backgroundColor:#f7f7f7;$baseColor:#3d3d3d;$errorColor:#ff6a6a;$errorBubbleBackground:#ff6a6a;$errorBubbleColor:#ffffff;$inputBackground:#fafafa;$inputBackgroundFocus:#fdfdfd;$inputColor:#3d3d3d;$dropdownBackground:#f7f7f7;$dropdownColor:#3d3d3d;
|
6
|
+
c4c4c4: $backgroundColor:#c4c4c4;$baseColor:#353535;$errorColor:#ef0000;$errorBubbleBackground:#ef0000;$errorBubbleColor:#ffffff;$inputBackground:#dcdcdc;$inputBackgroundFocus:#ededed;$inputColor:#353535;$dropdownBackground:#c4c4c4;$dropdownColor:#353535;
|
7
|
+
949494: $backgroundColor:#949494;$baseColor:#000000;$errorColor:#a30000;$errorBubbleBackground:#a30000;$errorBubbleColor:#ffffff;$inputBackground:#bfbfbf;$inputBackgroundFocus:#dfdfdf;$inputColor:#000000;$dropdownBackground:#949494;$dropdownColor:#000000;
|
8
|
+
6e6e6e: $backgroundColor:#6e6e6e;$baseColor:#ffffff;$errorColor:#6c0000;$errorBubbleBackground:#6c0000;$errorBubbleColor:#ffffff;$inputBackground:#585858;$inputBackgroundFocus:#2c2c2c;$inputColor:#ffffff;$dropdownBackground:#ffffff;$dropdownColor:#6e6e6e;
|
9
|
+
444444: $backgroundColor:#444444;$baseColor:#dddddd;$errorColor:#ff1818;$errorBubbleBackground:#ff1818;$errorBubbleColor:#ffffff;$inputBackground:#363636;$inputBackgroundFocus:#1b1b1b;$inputColor:#dddddd;$dropdownBackground:#dddddd;$dropdownColor:#444444;
|
10
|
+
47141D: $backgroundColor:#47141d;$baseColor:#f3f1f1;$errorColor:#b63c33;$errorBubbleBackground:#b63c33;$errorBubbleColor:#ffffff;$inputBackground:#391017;$inputBackgroundFocus:#1c080c;$inputColor:#f3f1f1;$dropdownBackground:#f3f1f1;$dropdownColor:#47141d;
|
11
|
+
333022: $backgroundColor:#333022;$baseColor:#fefefe;$errorColor:#ae514a;$errorBubbleBackground:#ae514a;$errorBubbleColor:#ffffff;$inputBackground:#29261b;$inputBackgroundFocus:#14130e;$inputColor:#fefefe;$dropdownBackground:#fefefe;$dropdownColor:#333022;
|
12
|
+
073329: $backgroundColor:#073329;$baseColor:#f2f4f4;$errorColor:#d4201d;$errorBubbleBackground:#d4201d;$errorBubbleColor:#ffffff;$inputBackground:#062921;$inputBackgroundFocus:#031410;$inputColor:#f2f4f4;$dropdownBackground:#f2f4f4;$dropdownColor:#073329;
|
13
|
+
072333: $backgroundColor:#072333;$baseColor:#e4e7e9;$errorColor:#b92c1a;$errorBubbleBackground:#b92c1a;$errorBubbleColor:#ffffff;$inputBackground:#061c29;$inputBackgroundFocus:#030e14;$inputColor:#e4e7e9;$dropdownBackground:#e4e7e9;$dropdownColor:#072333;
|
14
|
+
2E0D33: $backgroundColor:#2e0d33;$baseColor:#e8e5e9;$errorColor:#a5382a;$errorBubbleBackground:#a5382a;$errorBubbleColor:#ffffff;$inputBackground:#250a29;$inputBackgroundFocus:#120514;$inputColor:#e8e5e9;$dropdownBackground:#e8e5e9;$dropdownColor:#2e0d33;
|
15
|
+
D12A6D: $backgroundColor:#d12a6d;$baseColor:#ffffff;$errorColor:#edaea7;$errorBubbleBackground:#edaea7;$errorBubbleColor:#ffffff;$inputBackground:#a72257;$inputBackgroundFocus:#54112c;$inputColor:#ffffff;$dropdownBackground:#ffffff;$dropdownColor:#d12a6d;
|
16
|
+
FF7F4C: $backgroundColor:#ff7f4c;$baseColor:#2d0d00;$errorColor:#bc0600;$errorBubbleBackground:#bc0600;$errorBubbleColor:#ffffff;$inputBackground:#ffb294;$inputBackgroundFocus:#ffd9c9;$inputColor:#2d0d00;$dropdownBackground:#ff7f4c;$dropdownColor:#2d0d00;
|
17
|
+
1BC7A2: $backgroundColor:#1bc7a2;$baseColor:#062922;$errorColor:#c7211b;$errorBubbleBackground:#c7211b;$errorBubbleColor:#ffffff;$inputBackground:#76ddc7;$inputBackgroundFocus:#bbeee3;$inputColor:#062922;$dropdownBackground:#1bc7a2;$dropdownColor:#062922;
|
18
|
+
37A6E6: $backgroundColor:#37a6e6;$baseColor:#03121a;$errorColor:#ac2715;$errorBubbleBackground:#ac2715;$errorBubbleColor:#ffffff;$inputBackground:#87caf0;$inputBackgroundFocus:#c3e4f8;$inputColor:#03121a;$dropdownBackground:#37a6e6;$dropdownColor:#03121a;
|
19
|
+
AF45BF: $backgroundColor:#af45bf;$baseColor:#ffffff;$errorColor:#57251e;$errorBubbleBackground:#57251e;$errorBubbleColor:#ffffff;$inputBackground:#8c3799;$inputBackgroundFocus:#461c4c;$inputColor:#ffffff;$dropdownBackground:#ffffff;$dropdownColor:#af45bf;
|
20
|
+
FFF7F5: $backgroundColor:#fff7f5;$baseColor:#463834;$errorColor:#ff2934;$errorBubbleBackground:#ff2934;$errorBubbleColor:#ffffff;$inputBackground:#fffaf9;$inputBackgroundFocus:#fffdfc;$inputColor:#463834;$dropdownBackground:#fff7f5;$dropdownColor:#463834;
|
21
|
+
FCF9F2: $backgroundColor:#fcf9f2;$baseColor:#34322c;$errorColor:#d64c53;$errorBubbleBackground:#d64c53;$errorBubbleColor:#ffffff;$inputBackground:#fdfbf7;$inputBackgroundFocus:#fefdfb;$inputColor:#34322c;$dropdownBackground:#fcf9f2;$dropdownColor:#34322c;
|
22
|
+
F8FFF5: $backgroundColor:#f8fff5;$baseColor:#21291e;$errorColor:#ff2934;$errorBubbleBackground:#ff2934;$errorBubbleColor:#ffffff;$inputBackground:#fbfff9;$inputBackgroundFocus:#fdfffc;$inputColor:#21291e;$dropdownBackground:#f8fff5;$dropdownColor:#21291e;
|
23
|
+
F5FDFF: $backgroundColor:#f5fdff;$baseColor:#252f32;$errorColor:#ff2934;$errorBubbleBackground:#ff2934;$errorBubbleColor:#ffffff;$inputBackground:#f9feff;$inputBackgroundFocus:#fcfeff;$inputColor:#252f32;$dropdownBackground:#f5fdff;$dropdownColor:#252f32;
|
24
|
+
F7E6FF: $backgroundColor:#f7e6ff;$baseColor:#433649;$errorColor:#ff1a29;$errorBubbleBackground:#ff1a29;$errorBubbleColor:#ffffff;$inputBackground:#faf0ff;$inputBackgroundFocus:#fdf8ff;$inputColor:#433649;$dropdownBackground:#f7e6ff;$dropdownColor:#433649;
|
25
|
+
RESULT
|
26
|
+
|
27
|
+
it 'calculates properly' do
|
28
|
+
calculations = test_color_array.map do |x|
|
29
|
+
"#{x}: #{described_class.new(x).to_scss}"
|
30
|
+
end.join("\n")
|
31
|
+
|
32
|
+
expect(calculations.strip).to eq(expected_output.strip)
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'dvl/color'
|
2
|
+
|
3
|
+
def test_color_array
|
4
|
+
%w(
|
5
|
+
f7f7f7
|
6
|
+
c4c4c4
|
7
|
+
949494
|
8
|
+
6e6e6e
|
9
|
+
444444
|
10
|
+
47141D
|
11
|
+
333022
|
12
|
+
073329
|
13
|
+
072333
|
14
|
+
2E0D33
|
15
|
+
D12A6D
|
16
|
+
FF7F4C
|
17
|
+
1BC7A2
|
18
|
+
37A6E6
|
19
|
+
AF45BF
|
20
|
+
FFF7F5
|
21
|
+
FCF9F2
|
22
|
+
F8FFF5
|
23
|
+
F5FDFF
|
24
|
+
F7E6FF
|
25
|
+
)
|
26
|
+
end
|
metadata
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dvl-color
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Adam Becker
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-03-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: chroma
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: chroma_wcag_contrast
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.1
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: fortitude
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description:
|
70
|
+
email: adam@dobt.co
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- ".gitignore"
|
76
|
+
- ".ruby-version"
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.md
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- circle.yml
|
82
|
+
- dvl-color.gemspec
|
83
|
+
- lib/dvl/color.rb
|
84
|
+
- lib/dvl/color/fake_rgba.rb
|
85
|
+
- lib/dvl/color/generator.rb
|
86
|
+
- lib/dvl/color/version.rb
|
87
|
+
- script/cibuild
|
88
|
+
- script/deploy
|
89
|
+
- script/release
|
90
|
+
- spec/dvl/color/generator_spec.rb
|
91
|
+
- spec/spec_helper.rb
|
92
|
+
homepage: http://github.com/dobtco/dvl-color
|
93
|
+
licenses:
|
94
|
+
- MIT
|
95
|
+
metadata: {}
|
96
|
+
post_install_message:
|
97
|
+
rdoc_options: []
|
98
|
+
require_paths:
|
99
|
+
- lib
|
100
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 2.0.0
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
requirements: []
|
111
|
+
rubyforge_project:
|
112
|
+
rubygems_version: 2.5.1
|
113
|
+
signing_key:
|
114
|
+
specification_version: 4
|
115
|
+
summary: Generate beautiful, accessible color schemes.
|
116
|
+
test_files:
|
117
|
+
- spec/dvl/color/generator_spec.rb
|
118
|
+
- spec/spec_helper.rb
|
119
|
+
has_rdoc:
|