chroma-sass 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -12
- data/chroma-sass.gemspec +2 -2
- data/sass/chroma/_functions.scss +105 -26
- data/sass/chroma/_internals.scss +39 -1
- data/sass/chroma/_variables.scss +31 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 08934be719ffef8dc01d76d3a5bb966b95686c88
|
4
|
+
data.tar.gz: a37acb0fd37e206f7c6a9c3cccfca648c4f871e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 69979ae8a1894ea04556d159d24e10f96dd9df4886e915722d0b931710c0bcec8121dc21d446199413c2ac796ed6aaa399c0257f3374c9d30f5e70619cd5f314
|
7
|
+
data.tar.gz: d093b5ca09e38354aef42f6e535ddb215a652127d9f062ed0a1be0e9a59222cee7180221973d17353bf4e2a2f17f92dd0041a59d73ae4870c18a5ed3b5b5278f
|
data/README.md
CHANGED
@@ -10,15 +10,19 @@ Full documentation is available at [http://johnalbin.github.io/chroma/](http://j
|
|
10
10
|
@import "chroma";
|
11
11
|
|
12
12
|
// Define the default color scheme.
|
13
|
-
$chroma: define-default-color-scheme('
|
13
|
+
$chroma: define-default-color-scheme('Branding color names for use by "functional" color names below.');
|
14
14
|
|
15
15
|
// Add colors to the default color scheme.
|
16
16
|
$chroma: add-colors((
|
17
17
|
white: #fff,
|
18
|
-
grey-medium: #706e6c,
|
19
18
|
black: #000,
|
20
19
|
blue: #0e71b8,
|
21
20
|
red: #c00,
|
21
|
+
|
22
|
+
// Define a primary highlight color that has the value of our "blue" color.
|
23
|
+
// Note: if blue was specified without quotes, Chroma would interpret that as
|
24
|
+
// the color keyword blue and not a reference to the "blue" color name.
|
25
|
+
primary: 'blue',
|
22
26
|
));
|
23
27
|
|
24
28
|
// Create a "functional" color scheme that inherits from the default color scheme.
|
@@ -26,19 +30,20 @@ $chroma: define-color-scheme('functional', 'Colors used by functional parts of t
|
|
26
30
|
|
27
31
|
// Add colors to the functional color scheme.
|
28
32
|
$chroma: add-colors('functional', (
|
29
|
-
// Define a primary highlight color.
|
30
|
-
primary: 'blue',
|
31
|
-
|
32
33
|
// Have the "text" color use the hex value given to the "black" color. Even
|
33
34
|
// though the "functional" color scheme doesn't define "black", it inherits
|
34
35
|
// from the "default" color scheme where "black" is defined.
|
35
36
|
text: 'black',
|
36
37
|
|
37
|
-
//
|
38
|
-
|
38
|
+
// You can use quoted or unquoted strings to reference other color names.
|
39
|
+
// Note: color keywords are not considered strings unless they are quoted.
|
40
|
+
heading: text,
|
39
41
|
|
40
42
|
// Have the link color use the primary color.
|
41
|
-
link:
|
43
|
+
link: primary,
|
44
|
+
link-focus: (link lighten 20%), // Set the link-focus color to the "link"
|
45
|
+
// color passed through the color
|
46
|
+
// function: lighten([color], 20%)
|
42
47
|
));
|
43
48
|
|
44
49
|
// Create an "alternate" color scheme that inherits from the "functional" color scheme.
|
@@ -58,13 +63,26 @@ $chroma-active-scheme: 'functional';
|
|
58
63
|
// Outputs #000.
|
59
64
|
color: color(heading);
|
60
65
|
}
|
66
|
+
|
61
67
|
a {
|
62
68
|
// Outputs #0e71b8.
|
63
69
|
color: color(link);
|
64
70
|
|
71
|
+
&:focus,
|
72
|
+
&:hover {
|
73
|
+
// Outputs #3ca5f0, which is lighten(#0e71b8, 20%).
|
74
|
+
color: color(link-focus);
|
75
|
+
}
|
76
|
+
|
65
77
|
.alternate-color-section & {
|
66
78
|
// Outputs #c00.
|
67
79
|
color: color(alternate, link);
|
80
|
+
|
81
|
+
&:focus,
|
82
|
+
&:hover {
|
83
|
+
// Outputs #ff3333, which is lighten(#c00, 20%).
|
84
|
+
color: color(alternate, link-focus);
|
85
|
+
}
|
68
86
|
}
|
69
87
|
}
|
70
88
|
}
|
@@ -77,10 +95,7 @@ Chroma can be installed either as a Ruby Gem, as a Bower component, or as a NPM
|
|
77
95
|
## REQUIREMENTS
|
78
96
|
|
79
97
|
* Sass 3.4.0 or later
|
80
|
-
|
81
|
-
Note: libsass 3.2.5 or earlier does not work with chroma-sass due to a bug in
|
82
|
-
libsass. ☹ libsass 3.3.0 should fix the bug, but it has not been tested. See
|
83
|
-
https://github.com/JohnAlbin/chroma/issues/10
|
98
|
+
* Or LibSass 3.2.5 or later.
|
84
99
|
|
85
100
|
## LICENSE
|
86
101
|
|
data/chroma-sass.gemspec
CHANGED
@@ -9,8 +9,8 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.homepage = 'http://github.com/JohnAlbin/chroma'
|
10
10
|
spec.rubyforge_project =
|
11
11
|
|
12
|
-
spec.version = '1.0
|
13
|
-
spec.date = '2015-09-
|
12
|
+
spec.version = '1.1.0'
|
13
|
+
spec.date = '2015-09-23'
|
14
14
|
spec.licenses = ['GPL-2']
|
15
15
|
|
16
16
|
spec.authors = ['John Albin Wilkins']
|
data/sass/chroma/_functions.scss
CHANGED
@@ -40,23 +40,35 @@ $chroma: _chroma-init();
|
|
40
40
|
//
|
41
41
|
// Style guide: functions.is-dangerous-color-keyword
|
42
42
|
@function is-dangerous-color-keyword($name) {
|
43
|
+
// First, double-check if this is a keyword in a string.
|
44
|
+
@if _is-keyword-string($name) {
|
45
|
+
@return false;
|
46
|
+
}
|
47
|
+
|
43
48
|
@if type-of($name) == 'color' {
|
44
|
-
|
45
|
-
|
49
|
+
$lookup: '';
|
50
|
+
@if _is-old-libsass() {
|
51
|
+
// Forcibly convert a color keyword into a string with a "salt".
|
52
|
+
$lookup: "keyword:#{$name}";
|
53
|
+
}
|
54
|
+
@else {
|
55
|
+
// Convert the color to a string.
|
56
|
+
$lookup: inspect($name);
|
57
|
+
}
|
46
58
|
// Check if Sass will convert the color into a hex value that we can't
|
47
59
|
// convert back to a keyword.
|
48
|
-
@if map-has-key($_chroma-dangerous-keywords, $
|
60
|
+
@if map-has-key($_chroma-dangerous-keywords, $lookup) {
|
49
61
|
@if $chroma-die-on-dangerous-keyword {
|
50
|
-
@error "Sass will convert #{$name} into a hexidecimal value when it uses the \"compressed\" output style and Chroma will not be able to determine if the original name was #{map-get($_chroma-dangerous-keywords, $
|
62
|
+
@error "Sass will convert #{$name} into a hexidecimal value when it uses the \"compressed\" output style and Chroma will not be able to determine if the original name was #{map-get($_chroma-dangerous-keywords, $lookup)}. To prevent this error, quote the keyword like this: '#{$name}'.";
|
51
63
|
}
|
52
64
|
@else {
|
53
|
-
@return map-get($_chroma-dangerous-keywords, $
|
65
|
+
@return map-get($_chroma-dangerous-keywords, $lookup);
|
54
66
|
}
|
55
67
|
}
|
56
68
|
// Check if Sass _has_ converted the color into a hex value that we can't
|
57
69
|
// convert back to a keyword.
|
58
|
-
@else if map-has-key($_chroma-dangerous-converted-keywords, $
|
59
|
-
@error "Sass has converted a #{$_chroma-spelling} keyword into the hexidecimal value, #{$name}, and Chroma was not be able to determine if the original name was #{map-get($_chroma-dangerous-converted-keywords, $
|
70
|
+
@else if map-has-key($_chroma-dangerous-converted-keywords, $lookup) {
|
71
|
+
@error "Sass has converted a #{$_chroma-spelling} keyword into the hexidecimal value, #{$name}, and Chroma was not be able to determine if the original name was #{map-get($_chroma-dangerous-converted-keywords, $lookup)}. To prevent this error, use quotes around the keyword.";
|
60
72
|
}
|
61
73
|
}
|
62
74
|
@return false;
|
@@ -71,6 +83,11 @@ $chroma: _chroma-init();
|
|
71
83
|
//
|
72
84
|
// Style guide: functions.is-color-keyword
|
73
85
|
@function is-color-keyword($name) {
|
86
|
+
// First, double-check if this is a keyword in a string.
|
87
|
+
@if _is-keyword-string($name) {
|
88
|
+
@return false;
|
89
|
+
}
|
90
|
+
|
74
91
|
// If a real Sass color is given, it is in danger of being converted to a
|
75
92
|
// hexadecimal value before we can read the name. And some hex values map to
|
76
93
|
// more than one keyword (e.g. gray and grey), so the original name would be
|
@@ -81,11 +98,19 @@ $chroma: _chroma-init();
|
|
81
98
|
// $name so we can convert it to a string.
|
82
99
|
$is-dangerous: is-dangerous-color-keyword($name);
|
83
100
|
|
84
|
-
// Convert the color to a string.
|
85
101
|
@if type-of($name) == 'color' {
|
86
|
-
$
|
102
|
+
$lookup: '';
|
103
|
+
|
104
|
+
@if _is-old-libsass() {
|
105
|
+
// Forcibly convert a color keyword into a string with a "salt".
|
106
|
+
$lookup: "keyword:#{$name}";
|
107
|
+
}
|
108
|
+
@else {
|
109
|
+
// Convert the color to a string.
|
110
|
+
$lookup: inspect($name);
|
111
|
+
}
|
87
112
|
|
88
|
-
@return if(map-has-key($_chroma-css4-color-keywords, $
|
113
|
+
@return if(map-has-key($_chroma-css4-color-keywords, $lookup), map-get($_chroma-css4-color-keywords, $lookup), false);
|
89
114
|
}
|
90
115
|
|
91
116
|
@return false;
|
@@ -153,13 +178,34 @@ $chroma: _chroma-init();
|
|
153
178
|
// and its parent schemes. But one or more of the parent colors may be
|
154
179
|
// defined (overridden) in $scheme too, so we need to check the full
|
155
180
|
// reference chain.
|
181
|
+
$chain: ();
|
156
182
|
$ref: map-get($color, 'reference');
|
183
|
+
@if $ref and map-get($color, 'function') {
|
184
|
+
$chain: append($chain, $color);
|
185
|
+
}
|
157
186
|
@while $ref {
|
158
187
|
$actual-scheme: chroma-has-color($ref, $scheme);
|
159
188
|
$color: map-get(map-get($chroma, 'names'), "#{$actual-scheme}::#{$ref}");
|
160
189
|
$ref: map-get($color, 'reference');
|
190
|
+
// Save any color that has a function unless it is the final color in the
|
191
|
+
// reference chain.
|
192
|
+
@if $ref and map-get($color, 'function') {
|
193
|
+
$chain: append($chain, $color);
|
194
|
+
}
|
161
195
|
}
|
162
|
-
|
196
|
+
// Find the value for the last non-reference in the chain.
|
197
|
+
$value: map-get($color, 'value');
|
198
|
+
// If the reference chain contains functions, we need to recalculate all
|
199
|
+
// the values back up the chain.
|
200
|
+
@if length($chain) > 0 {
|
201
|
+
@for $i from length($chain) through 1 {
|
202
|
+
$function: map-get(nth($chain, $i), 'function');
|
203
|
+
$parameters: map-get(nth($chain, $i), 'parameters');
|
204
|
+
$parameters: set-nth($parameters, 1, $value);
|
205
|
+
$value: call($function, $parameters...);
|
206
|
+
}
|
207
|
+
}
|
208
|
+
@return $value;
|
163
209
|
}
|
164
210
|
}
|
165
211
|
|
@@ -271,19 +317,22 @@ $chroma: _chroma-init();
|
|
271
317
|
//
|
272
318
|
// Usage:
|
273
319
|
// ```scss
|
274
|
-
// $
|
275
|
-
//
|
276
|
-
// nav
|
277
|
-
// nav-
|
320
|
+
// $chroma: add-colors('admiral', (
|
321
|
+
// link: #0000cc,
|
322
|
+
// nav: link, // Sets this color to the same value as the "link" color.
|
323
|
+
// nav-visited: (nav darken 20%), // Takes the "nav" color and passes it
|
324
|
+
// // through darken([color], 20%)
|
325
|
+
// nav-focus: (nav lighten 10%),
|
278
326
|
// ));
|
279
327
|
// ```
|
280
328
|
//
|
281
329
|
// If you wish to add colors to the active scheme, you can just use:
|
282
330
|
// ```scss
|
283
|
-
// $
|
284
|
-
//
|
285
|
-
// nav
|
286
|
-
// nav-
|
331
|
+
// $chroma: add-colors((
|
332
|
+
// link: #0000cc,
|
333
|
+
// nav: link,
|
334
|
+
// nav-visited: (link darken 20%),
|
335
|
+
// nav-focus: (link lighten 10%),
|
287
336
|
// ));
|
288
337
|
// ```
|
289
338
|
//
|
@@ -307,28 +356,56 @@ $chroma: _chroma-init();
|
|
307
356
|
// Cast the color name to a string to ensure color keywords do not cause
|
308
357
|
// problems as map keys.
|
309
358
|
$color-name: chroma-to-string($color-name);
|
359
|
+
$color-function: false;
|
360
|
+
$color-parameters: ();
|
361
|
+
// If the "value" is a list, its a value plus a function.
|
362
|
+
@if type-of($color-value) == 'list' {
|
363
|
+
$color-function: nth($color-value, 2);
|
364
|
+
@if not function_exists($color-function) {
|
365
|
+
@error 'The function "#{$color-function}" was not found when adding the #{$_chroma-spelling} "#{$color-name}".';
|
366
|
+
}
|
367
|
+
// Include the color value in the list of function parameters.
|
368
|
+
@for $i from 1 through length($color-value) {
|
369
|
+
@if $i != 2 {
|
370
|
+
$color-parameters: append($color-parameters, nth($color-value, $i));
|
371
|
+
}
|
372
|
+
}
|
373
|
+
$color-value: nth($color-value, 1);
|
374
|
+
}
|
310
375
|
// If the value given is a color, just add it.
|
311
|
-
@if
|
376
|
+
@if type-of($color-value) == 'color' and not (_is-old-libsass() and _is-keyword-string($color-value)) {
|
377
|
+
@if $color-function {
|
378
|
+
$color-value: call($color-function, $color-parameters...);
|
379
|
+
}
|
312
380
|
$chroma: _chroma-add-name($scheme, $color-name,
|
313
381
|
$value : $color-value,
|
314
382
|
$reference : false,
|
315
|
-
$referenced_by : ()
|
383
|
+
$referenced_by : (),
|
384
|
+
$function : $color-function,
|
385
|
+
$parameters : $color-parameters
|
316
386
|
) !global;
|
317
387
|
}
|
318
388
|
// If the value given is a reference to another color...
|
319
|
-
@else if
|
389
|
+
@else if type-of($color-value) == 'string' or (_is-old-libsass() and _is-keyword-string($color-value)) {
|
320
390
|
$ref: $color-value;
|
321
391
|
// Find the referenced color.
|
322
392
|
$scheme-of-reference: chroma-has-color($ref, $scheme);
|
323
393
|
@if not $scheme-of-reference {
|
324
|
-
@error 'The #{$_chroma-spelling} "#{$ref}" was not found.';
|
394
|
+
@error 'The #{$_chroma-spelling} "#{$ref}" was not found when adding the #{$_chroma-spelling} "#{$color-name}".';
|
325
395
|
}
|
326
396
|
$referenced-color: map-get(map-get($chroma, 'names'), "#{$scheme-of-reference}::#{$ref}");
|
327
397
|
// Add the new color.
|
398
|
+
$new-value: map-get($referenced-color, 'value');
|
399
|
+
@if $color-function {
|
400
|
+
$color-parameters: set-nth($color-parameters, 1, $new-value);
|
401
|
+
$new-value: call($color-function, $color-parameters...);
|
402
|
+
}
|
328
403
|
$chroma: _chroma-add-name($scheme, $color-name,
|
329
|
-
$value :
|
404
|
+
$value : $new-value,
|
330
405
|
$reference : $ref,
|
331
|
-
$referenced_by : ()
|
406
|
+
$referenced_by : (),
|
407
|
+
$function : $color-function,
|
408
|
+
$parameters : $color-parameters
|
332
409
|
) !global;
|
333
410
|
// Document the new color in all the referenced_by lists.
|
334
411
|
@while $ref {
|
@@ -338,7 +415,9 @@ $chroma: _chroma-init();
|
|
338
415
|
$referenced_by : append(
|
339
416
|
map-get($referenced-color, 'referenced_by'),
|
340
417
|
$color-name
|
341
|
-
)
|
418
|
+
),
|
419
|
+
$function : map-get($referenced-color, 'function'),
|
420
|
+
$parameters : map-get($referenced-color, 'parameters')
|
342
421
|
) !global;
|
343
422
|
$ref: map-get($referenced-color, 'reference');
|
344
423
|
@if $ref {
|
data/sass/chroma/_internals.scss
CHANGED
@@ -52,13 +52,15 @@
|
|
52
52
|
// variable.
|
53
53
|
//
|
54
54
|
// Style guide: internals._chroma-add-name
|
55
|
-
@function _chroma-add-name($scheme, $name, $value: false, $reference: false, $referenced_by: ()) {
|
55
|
+
@function _chroma-add-name($scheme, $name, $value: false, $reference: false, $referenced_by: (), $function: false, $parameters: ()) {
|
56
56
|
$names: map-merge(
|
57
57
|
map-get($chroma, 'names'),
|
58
58
|
("#{$scheme}::#{$name}": (
|
59
59
|
value : $value,
|
60
60
|
reference : $reference,
|
61
61
|
referenced_by : $referenced_by,
|
62
|
+
function : $function,
|
63
|
+
parameters : $parameters,
|
62
64
|
))
|
63
65
|
);
|
64
66
|
|
@@ -91,3 +93,39 @@
|
|
91
93
|
@return $chroma;
|
92
94
|
}
|
93
95
|
}
|
96
|
+
|
97
|
+
// is-old-libsass()
|
98
|
+
//
|
99
|
+
// libsass before 3.3.0 is funky, making it very hard for Chroma to do its job.
|
100
|
+
//
|
101
|
+
// - `inspect([color])` returns the original value instead of returning the
|
102
|
+
// string equivalent, so you can't cast a color to a string.
|
103
|
+
// - `type-of('[color keyword]')` thinks that these strings are colors.
|
104
|
+
// - `map-has-key()` works properly, thankfully. So:
|
105
|
+
// - `map-has-key((white: ''), white)` correctly returns `true`
|
106
|
+
// - `map-has-key(('white': ''), 'white')` correctly returns `true`
|
107
|
+
// - `map-has-key((white: ''), 'white')` correctly returns `false`
|
108
|
+
// - `map-has-key(('white': ''), white)` correctly returns `false`
|
109
|
+
// This means we can cobble together a replacement for `type-of()`. And a
|
110
|
+
// partial replacement for `inspect()` that works for everything except
|
111
|
+
// dangerous color keywords.
|
112
|
+
//
|
113
|
+
// @TODO: Remove when LibSass 3.2.5 support is dropped.
|
114
|
+
//
|
115
|
+
// Style guide: internals._is-old-libsass
|
116
|
+
@function _is-old-libsass() {
|
117
|
+
@return if(type-of('white') == 'color', true, false);
|
118
|
+
}
|
119
|
+
|
120
|
+
// _is-keyword-string($name)
|
121
|
+
//
|
122
|
+
// Normally, `type-of()` can be used to tell if a given value is a string. But
|
123
|
+
// LibSass versions before 3.3.0 think that color keywords in strings are still
|
124
|
+
// colors and not strings. This function works, regardless of LibSass bugs.
|
125
|
+
//
|
126
|
+
// @TODO: Remove when LibSass 3.2.5 support is dropped.
|
127
|
+
//
|
128
|
+
// Style guide: internals._is-keyword-string
|
129
|
+
@function _is-keyword-string($name) {
|
130
|
+
@return if(map-has-key($_chroma-css4-color-keywords-in-strings, $name), true, false);
|
131
|
+
}
|
data/sass/chroma/_variables.scss
CHANGED
@@ -419,3 +419,34 @@ $_chroma-css4-color-keywords: (
|
|
419
419
|
'yellowgreen': 'yellowgreen',
|
420
420
|
'#9acd32': 'yellowgreen',
|
421
421
|
);
|
422
|
+
|
423
|
+
// libsass before 3.3.0 can't turn color keywords into strings of the same name,
|
424
|
+
// so we have to compare map keys using keywords plus a "salt" string.
|
425
|
+
//
|
426
|
+
// @TODO: Remove when LibSass 3.2.5 support is dropped.
|
427
|
+
|
428
|
+
$_chroma-css4-color-keywords-in-strings: ();
|
429
|
+
@if type-of('white') == 'color' {
|
430
|
+
// Convert the dangerous color keyword list.
|
431
|
+
$_new-list: ();
|
432
|
+
@each $name, $string in $_chroma-dangerous-keywords {
|
433
|
+
$_new-list: map-merge($_new-list, ("keyword:#{$name}": $string));
|
434
|
+
}
|
435
|
+
$_chroma-dangerous-keywords: $_new-list !global;
|
436
|
+
|
437
|
+
// Convert the dangerous converted color keyword list.
|
438
|
+
$_new-list: ();
|
439
|
+
@each $name, $string in $_chroma-dangerous-converted-keywords {
|
440
|
+
$_new-list: map-merge($_new-list, ("keyword:#{$name}": $string));
|
441
|
+
}
|
442
|
+
$_chroma-dangerous-converted-keywords: $_new-list !global;
|
443
|
+
|
444
|
+
// Convert the css4 color keyword list, but keep a copy around to check for
|
445
|
+
// color keywords in strings.
|
446
|
+
$_chroma-css4-color-keywords-in-strings: $_chroma-css4-color-keywords !global;
|
447
|
+
$_new-list: ();
|
448
|
+
@each $name, $string in $_chroma-css4-color-keywords {
|
449
|
+
$_new-list: map-merge($_new-list, ("keyword:#{$name}": $string));
|
450
|
+
}
|
451
|
+
$_chroma-css4-color-keywords: $_new-list !global;
|
452
|
+
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chroma-sass
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Albin Wilkins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: sass
|
@@ -61,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
requirements: []
|
64
|
-
rubyforge_project: 1.0
|
64
|
+
rubyforge_project: 1.1.0
|
65
65
|
rubygems_version: 2.4.8
|
66
66
|
signing_key:
|
67
67
|
specification_version: 4
|