obf 0.6.7 → 0.6.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/tinycolor_convert.js +320 -164
  3. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5b251556cc8a9274711c1fa358cc952f2ce280a0
4
- data.tar.gz: 6ba042655211c8f6b06ec0e8f00aafdbcf744900
3
+ metadata.gz: 3772ad4028a2e7e780d943bfe384dacf59c17c9d
4
+ data.tar.gz: 76fb2dc4d209f5ad9b1fbd94f22e2fe0c6937a16
5
5
  SHA512:
6
- metadata.gz: 0776169545a98e29e6f0f8c470263b3142fa2fbd0aaa248fe966e128514253221222e31bf350e65634f563b6eb9fa1dc040525353646121b6030c872d5555a83
7
- data.tar.gz: 87059a2a78e79ad6015ed7ebdf44fbd8cbf7a50804d0752655937b41f441d8f138b90d45b4a7b353ce56cc3c64cbe692a42573c7a0a20f3487238d9e42019521
6
+ metadata.gz: 68f6499271a9b143c8c6e9b45752d5b1729e281e4b2d7bd17ffc544f0a0848cd1248e12976592523ab00c72e31a7e76210add30abba2504a92498b9e0584a174
7
+ data.tar.gz: 672095044ab8a2ae7cf309393456135e9ae4de967caf16d11f66a268c5500708a3d9868b8657e72af82cd61b928f2831c0c67faa99208a4c02d56de1743b8072
@@ -1,8 +1,8 @@
1
- // TinyColor v0.9.16
1
+ var tiny = null;
2
+ // TinyColor v1.1.1
2
3
  // https://github.com/bgrins/TinyColor
3
- // 2013-08-10, Brian Grinstead, MIT License
4
+ // Brian Grinstead, MIT License
4
5
 
5
- var tiny = null;
6
6
  (function() {
7
7
 
8
8
  var trimLeft = /^[\s,#]+/,
@@ -14,154 +14,239 @@ var trimLeft = /^[\s,#]+/,
14
14
  mathMax = math.max,
15
15
  mathRandom = math.random;
16
16
 
17
- function tinycolor (color, opts) {
17
+ var tinycolor = function tinycolor (color, opts) {
18
18
 
19
19
  color = (color) ? color : '';
20
20
  opts = opts || { };
21
21
 
22
22
  // If input is already a tinycolor, return itself
23
- if (typeof color == "object" && color.hasOwnProperty("_tc_id")) {
23
+ if (color instanceof tinycolor) {
24
24
  return color;
25
25
  }
26
+ // If we are called as a function, call using new instead
27
+ if (!(this instanceof tinycolor)) {
28
+ return new tinycolor(color, opts);
29
+ }
26
30
 
27
31
  var rgb = inputToRGB(color);
28
- var r = rgb.r,
29
- g = rgb.g,
30
- b = rgb.b,
31
- a = rgb.a,
32
- roundA = mathRound(100*a) / 100,
33
- format = opts.format || rgb.format;
32
+ this._originalInput = color,
33
+ this._r = rgb.r,
34
+ this._g = rgb.g,
35
+ this._b = rgb.b,
36
+ this._a = rgb.a,
37
+ this._roundA = mathRound(100*this._a) / 100,
38
+ this._format = opts.format || rgb.format;
39
+ this._gradientType = opts.gradientType;
34
40
 
35
41
  // Don't let the range of [0,255] come back in [0,1].
36
42
  // Potentially lose a little bit of precision here, but will fix issues where
37
43
  // .5 gets interpreted as half of the total, instead of half of 1
38
44
  // If it was supposed to be 128, this was already taken care of by `inputToRgb`
39
- if (r < 1) { r = mathRound(r); }
40
- if (g < 1) { g = mathRound(g); }
41
- if (b < 1) { b = mathRound(b); }
42
-
43
- return {
44
- ok: rgb.ok,
45
- format: format,
46
- _tc_id: tinyCounter++,
47
- alpha: a,
48
- getAlpha: function() {
49
- return a;
50
- },
51
- setAlpha: function(value) {
52
- a = boundAlpha(value);
53
- roundA = mathRound(100*a) / 100;
54
- },
55
- toHsv: function() {
56
- var hsv = rgbToHsv(r, g, b);
57
- return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a };
58
- },
59
- toHsvString: function() {
60
- var hsv = rgbToHsv(r, g, b);
61
- var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
62
- return (a == 1) ?
63
- "hsv(" + h + ", " + s + "%, " + v + "%)" :
64
- "hsva(" + h + ", " + s + "%, " + v + "%, "+ roundA + ")";
65
- },
66
- toHsl: function() {
67
- var hsl = rgbToHsl(r, g, b);
68
- return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a };
69
- },
70
- toHslString: function() {
71
- var hsl = rgbToHsl(r, g, b);
72
- var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
73
- return (a == 1) ?
74
- "hsl(" + h + ", " + s + "%, " + l + "%)" :
75
- "hsla(" + h + ", " + s + "%, " + l + "%, "+ roundA + ")";
76
- },
77
- toHex: function(allow3Char) {
78
- return rgbToHex(r, g, b, allow3Char);
79
- },
80
- toHexString: function(allow3Char) {
81
- return '#' + this.toHex(allow3Char);
82
- },
83
- toHex8: function() {
84
- return rgbaToHex(r, g, b, a);
85
- },
86
- toHex8String: function() {
87
- return '#' + this.toHex8();
88
- },
89
- toRgb: function() {
90
- return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a };
91
- },
92
- toRgbString: function() {
93
- return (a == 1) ?
94
- "rgb(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ")" :
95
- "rgba(" + mathRound(r) + ", " + mathRound(g) + ", " + mathRound(b) + ", " + roundA + ")";
96
- },
97
- toPercentageRgb: function() {
98
- return { r: mathRound(bound01(r, 255) * 100) + "%", g: mathRound(bound01(g, 255) * 100) + "%", b: mathRound(bound01(b, 255) * 100) + "%", a: a };
99
- },
100
- toPercentageRgbString: function() {
101
- return (a == 1) ?
102
- "rgb(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%)" :
103
- "rgba(" + mathRound(bound01(r, 255) * 100) + "%, " + mathRound(bound01(g, 255) * 100) + "%, " + mathRound(bound01(b, 255) * 100) + "%, " + roundA + ")";
104
- },
105
- toName: function() {
106
- if (a === 0) {
107
- return "transparent";
108
- }
45
+ if (this._r < 1) { this._r = mathRound(this._r); }
46
+ if (this._g < 1) { this._g = mathRound(this._g); }
47
+ if (this._b < 1) { this._b = mathRound(this._b); }
109
48
 
110
- return hexNames[rgbToHex(r, g, b, true)] || false;
111
- },
112
- toFilter: function(secondColor) {
113
- var hex8String = '#' + rgbaToHex(r, g, b, a);
114
- var secondHex8String = hex8String;
115
- var gradientType = opts && opts.gradientType ? "GradientType = 1, " : "";
49
+ this._ok = rgb.ok;
50
+ this._tc_id = tinyCounter++;
51
+ };
116
52
 
117
- if (secondColor) {
118
- var s = tinycolor(secondColor);
119
- secondHex8String = s.toHex8String();
120
- }
53
+ tinycolor.prototype = {
54
+ isDark: function() {
55
+ return this.getBrightness() < 128;
56
+ },
57
+ isLight: function() {
58
+ return !this.isDark();
59
+ },
60
+ isValid: function() {
61
+ return this._ok;
62
+ },
63
+ getOriginalInput: function() {
64
+ return this._originalInput;
65
+ },
66
+ getFormat: function() {
67
+ return this._format;
68
+ },
69
+ getAlpha: function() {
70
+ return this._a;
71
+ },
72
+ getBrightness: function() {
73
+ var rgb = this.toRgb();
74
+ return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000;
75
+ },
76
+ setAlpha: function(value) {
77
+ this._a = boundAlpha(value);
78
+ this._roundA = mathRound(100*this._a) / 100;
79
+ return this;
80
+ },
81
+ toHsv: function() {
82
+ var hsv = rgbToHsv(this._r, this._g, this._b);
83
+ return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a };
84
+ },
85
+ toHsvString: function() {
86
+ var hsv = rgbToHsv(this._r, this._g, this._b);
87
+ var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);
88
+ return (this._a == 1) ?
89
+ "hsv(" + h + ", " + s + "%, " + v + "%)" :
90
+ "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")";
91
+ },
92
+ toHsl: function() {
93
+ var hsl = rgbToHsl(this._r, this._g, this._b);
94
+ return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a };
95
+ },
96
+ toHslString: function() {
97
+ var hsl = rgbToHsl(this._r, this._g, this._b);
98
+ var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);
99
+ return (this._a == 1) ?
100
+ "hsl(" + h + ", " + s + "%, " + l + "%)" :
101
+ "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")";
102
+ },
103
+ toHex: function(allow3Char) {
104
+ return rgbToHex(this._r, this._g, this._b, allow3Char);
105
+ },
106
+ toHexString: function(allow3Char) {
107
+ return '#' + this.toHex(allow3Char);
108
+ },
109
+ toHex8: function() {
110
+ return rgbaToHex(this._r, this._g, this._b, this._a);
111
+ },
112
+ toHex8String: function() {
113
+ return '#' + this.toHex8();
114
+ },
115
+ toRgb: function() {
116
+ return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a };
117
+ },
118
+ toRgbString: function() {
119
+ return (this._a == 1) ?
120
+ "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" :
121
+ "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")";
122
+ },
123
+ toPercentageRgb: function() {
124
+ return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a };
125
+ },
126
+ toPercentageRgbString: function() {
127
+ return (this._a == 1) ?
128
+ "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" :
129
+ "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
130
+ },
131
+ toName: function() {
132
+ if (this._a === 0) {
133
+ return "transparent";
134
+ }
121
135
 
122
- return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
123
- },
124
- toString: function(format) {
125
- var formatSet = !!format;
126
- format = format || this.format;
136
+ if (this._a < 1) {
137
+ return false;
138
+ }
127
139
 
128
- var formattedString = false;
129
- var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0;
130
- var formatWithAlpha = hasAlphaAndFormatNotSet && (format === "hex" || format === "hex6" || format === "hex3" || format === "name");
140
+ return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
141
+ },
142
+ toFilter: function(secondColor) {
143
+ var hex8String = '#' + rgbaToHex(this._r, this._g, this._b, this._a);
144
+ var secondHex8String = hex8String;
145
+ var gradientType = this._gradientType ? "GradientType = 1, " : "";
131
146
 
132
- if (format === "rgb") {
133
- formattedString = this.toRgbString();
134
- }
135
- if (format === "prgb") {
136
- formattedString = this.toPercentageRgbString();
137
- }
138
- if (format === "hex" || format === "hex6") {
139
- formattedString = this.toHexString();
140
- }
141
- if (format === "hex3") {
142
- formattedString = this.toHexString(true);
143
- }
144
- if (format === "hex8") {
145
- formattedString = this.toHex8String();
146
- }
147
- if (format === "name") {
148
- formattedString = this.toName();
149
- }
150
- if (format === "hsl") {
151
- formattedString = this.toHslString();
152
- }
153
- if (format === "hsv") {
154
- formattedString = this.toHsvString();
155
- }
147
+ if (secondColor) {
148
+ var s = tinycolor(secondColor);
149
+ secondHex8String = s.toHex8String();
150
+ }
156
151
 
157
- if (formatWithAlpha) {
158
- return this.toRgbString();
152
+ return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")";
153
+ },
154
+ toString: function(format) {
155
+ var formatSet = !!format;
156
+ format = format || this._format;
157
+
158
+ var formattedString = false;
159
+ var hasAlpha = this._a < 1 && this._a >= 0;
160
+ var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "name");
161
+
162
+ if (needsAlphaFormat) {
163
+ // Special case for "transparent", all other non-alpha formats
164
+ // will return rgba when there is transparency.
165
+ if (format === "name" && this._a === 0) {
166
+ return this.toName();
159
167
  }
160
-
161
- return formattedString || this.toHexString();
168
+ return this.toRgbString();
162
169
  }
163
- };
164
- }
170
+ if (format === "rgb") {
171
+ formattedString = this.toRgbString();
172
+ }
173
+ if (format === "prgb") {
174
+ formattedString = this.toPercentageRgbString();
175
+ }
176
+ if (format === "hex" || format === "hex6") {
177
+ formattedString = this.toHexString();
178
+ }
179
+ if (format === "hex3") {
180
+ formattedString = this.toHexString(true);
181
+ }
182
+ if (format === "hex8") {
183
+ formattedString = this.toHex8String();
184
+ }
185
+ if (format === "name") {
186
+ formattedString = this.toName();
187
+ }
188
+ if (format === "hsl") {
189
+ formattedString = this.toHslString();
190
+ }
191
+ if (format === "hsv") {
192
+ formattedString = this.toHsvString();
193
+ }
194
+
195
+ return formattedString || this.toHexString();
196
+ },
197
+
198
+ _applyModification: function(fn, args) {
199
+ var color = fn.apply(null, [this].concat([].slice.call(args)));
200
+ this._r = color._r;
201
+ this._g = color._g;
202
+ this._b = color._b;
203
+ this.setAlpha(color._a);
204
+ return this;
205
+ },
206
+ lighten: function() {
207
+ return this._applyModification(lighten, arguments);
208
+ },
209
+ brighten: function() {
210
+ return this._applyModification(brighten, arguments);
211
+ },
212
+ darken: function() {
213
+ return this._applyModification(darken, arguments);
214
+ },
215
+ desaturate: function() {
216
+ return this._applyModification(desaturate, arguments);
217
+ },
218
+ saturate: function() {
219
+ return this._applyModification(saturate, arguments);
220
+ },
221
+ greyscale: function() {
222
+ return this._applyModification(greyscale, arguments);
223
+ },
224
+ spin: function() {
225
+ return this._applyModification(spin, arguments);
226
+ },
227
+
228
+ _applyCombination: function(fn, args) {
229
+ return fn.apply(null, [this].concat([].slice.call(args)));
230
+ },
231
+ analogous: function() {
232
+ return this._applyCombination(analogous, arguments);
233
+ },
234
+ complement: function() {
235
+ return this._applyCombination(complement, arguments);
236
+ },
237
+ monochromatic: function() {
238
+ return this._applyCombination(monochromatic, arguments);
239
+ },
240
+ splitcomplement: function() {
241
+ return this._applyCombination(splitcomplement, arguments);
242
+ },
243
+ triad: function() {
244
+ return this._applyCombination(triad, arguments);
245
+ },
246
+ tetrad: function() {
247
+ return this._applyCombination(tetrad, arguments);
248
+ }
249
+ };
165
250
 
166
251
  // If input is an object, force 1 into "1.0" to handle ratios properly
167
252
  // String input requires "1.0" as input, so 1 will be treated as 1
@@ -441,50 +526,72 @@ tinycolor.random = function() {
441
526
  // Thanks to less.js for some of the basics here
442
527
  // <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>
443
528
 
444
- tinycolor.desaturate = function (color, amount) {
529
+ function desaturate(color, amount) {
445
530
  amount = (amount === 0) ? 0 : (amount || 10);
446
531
  var hsl = tinycolor(color).toHsl();
447
532
  hsl.s -= amount / 100;
448
533
  hsl.s = clamp01(hsl.s);
449
534
  return tinycolor(hsl);
450
- };
451
- tinycolor.saturate = function (color, amount) {
535
+ }
536
+
537
+ function saturate(color, amount) {
452
538
  amount = (amount === 0) ? 0 : (amount || 10);
453
539
  var hsl = tinycolor(color).toHsl();
454
540
  hsl.s += amount / 100;
455
541
  hsl.s = clamp01(hsl.s);
456
542
  return tinycolor(hsl);
457
- };
458
- tinycolor.greyscale = function(color) {
459
- return tinycolor.desaturate(color, 100);
460
- };
461
- tinycolor.lighten = function(color, amount) {
543
+ }
544
+
545
+ function greyscale(color) {
546
+ return tinycolor(color).desaturate(100);
547
+ }
548
+
549
+ function lighten (color, amount) {
462
550
  amount = (amount === 0) ? 0 : (amount || 10);
463
551
  var hsl = tinycolor(color).toHsl();
464
552
  hsl.l += amount / 100;
465
553
  hsl.l = clamp01(hsl.l);
466
554
  return tinycolor(hsl);
467
- };
468
- tinycolor.darken = function (color, amount) {
555
+ }
556
+
557
+ function brighten(color, amount) {
558
+ amount = (amount === 0) ? 0 : (amount || 10);
559
+ var rgb = tinycolor(color).toRgb();
560
+ rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100))));
561
+ rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100))));
562
+ rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100))));
563
+ return tinycolor(rgb);
564
+ }
565
+
566
+ function darken (color, amount) {
469
567
  amount = (amount === 0) ? 0 : (amount || 10);
470
568
  var hsl = tinycolor(color).toHsl();
471
569
  hsl.l -= amount / 100;
472
570
  hsl.l = clamp01(hsl.l);
473
571
  return tinycolor(hsl);
474
- };
475
- tinycolor.complement = function(color) {
572
+ }
573
+
574
+ // Spin takes a positive or negative amount within [-360, 360] indicating the change of hue.
575
+ // Values outside of this range will be wrapped into this range.
576
+ function spin(color, amount) {
476
577
  var hsl = tinycolor(color).toHsl();
477
- hsl.h = (hsl.h + 180) % 360;
578
+ var hue = (mathRound(hsl.h) + amount) % 360;
579
+ hsl.h = hue < 0 ? 360 + hue : hue;
478
580
  return tinycolor(hsl);
479
- };
480
-
581
+ }
481
582
 
482
583
  // Combination Functions
483
584
  // ---------------------
484
585
  // Thanks to jQuery xColor for some of the ideas behind these
485
586
  // <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>
486
587
 
487
- tinycolor.triad = function(color) {
588
+ function complement(color) {
589
+ var hsl = tinycolor(color).toHsl();
590
+ hsl.h = (hsl.h + 180) % 360;
591
+ return tinycolor(hsl);
592
+ }
593
+
594
+ function triad(color) {
488
595
  var hsl = tinycolor(color).toHsl();
489
596
  var h = hsl.h;
490
597
  return [
@@ -492,8 +599,9 @@ tinycolor.triad = function(color) {
492
599
  tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),
493
600
  tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })
494
601
  ];
495
- };
496
- tinycolor.tetrad = function(color) {
602
+ }
603
+
604
+ function tetrad(color) {
497
605
  var hsl = tinycolor(color).toHsl();
498
606
  var h = hsl.h;
499
607
  return [
@@ -502,8 +610,9 @@ tinycolor.tetrad = function(color) {
502
610
  tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),
503
611
  tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })
504
612
  ];
505
- };
506
- tinycolor.splitcomplement = function(color) {
613
+ }
614
+
615
+ function splitcomplement(color) {
507
616
  var hsl = tinycolor(color).toHsl();
508
617
  var h = hsl.h;
509
618
  return [
@@ -511,8 +620,9 @@ tinycolor.splitcomplement = function(color) {
511
620
  tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),
512
621
  tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})
513
622
  ];
514
- };
515
- tinycolor.analogous = function(color, results, slices) {
623
+ }
624
+
625
+ function analogous(color, results, slices) {
516
626
  results = results || 6;
517
627
  slices = slices || 30;
518
628
 
@@ -525,8 +635,9 @@ tinycolor.analogous = function(color, results, slices) {
525
635
  ret.push(tinycolor(hsl));
526
636
  }
527
637
  return ret;
528
- };
529
- tinycolor.monochromatic = function(color, results) {
638
+ }
639
+
640
+ function monochromatic(color, results) {
530
641
  results = results || 6;
531
642
  var hsv = tinycolor(color).toHsv();
532
643
  var h = hsv.h, s = hsv.s, v = hsv.v;
@@ -539,6 +650,41 @@ tinycolor.monochromatic = function(color, results) {
539
650
  }
540
651
 
541
652
  return ret;
653
+ }
654
+
655
+ // Utility Functions
656
+ // ---------------------
657
+
658
+ tinycolor.mix = function(color1, color2, amount) {
659
+ amount = (amount === 0) ? 0 : (amount || 50);
660
+
661
+ var rgb1 = tinycolor(color1).toRgb();
662
+ var rgb2 = tinycolor(color2).toRgb();
663
+
664
+ var p = amount / 100;
665
+ var w = p * 2 - 1;
666
+ var a = rgb2.a - rgb1.a;
667
+
668
+ var w1;
669
+
670
+ if (w * a == -1) {
671
+ w1 = w;
672
+ } else {
673
+ w1 = (w + a) / (1 + w * a);
674
+ }
675
+
676
+ w1 = (w1 + 1) / 2;
677
+
678
+ var w2 = 1 - w1;
679
+
680
+ var rgba = {
681
+ r: rgb2.r * w1 + rgb1.r * w2,
682
+ g: rgb2.g * w1 + rgb1.g * w2,
683
+ b: rgb2.b * w1 + rgb1.b * w2,
684
+ a: rgb2.a * p + rgb1.a * (1 - p)
685
+ };
686
+
687
+ return tinycolor(rgba);
542
688
  };
543
689
 
544
690
 
@@ -551,14 +697,16 @@ tinycolor.monochromatic = function(color, results) {
551
697
  // `brightness`: difference in brightness between the two colors
552
698
  // `color`: difference in color/hue between the two colors
553
699
  tinycolor.readability = function(color1, color2) {
554
- var a = tinycolor(color1).toRgb();
555
- var b = tinycolor(color2).toRgb();
556
- var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000;
557
- var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000;
700
+ var c1 = tinycolor(color1);
701
+ var c2 = tinycolor(color2);
702
+ var rgb1 = c1.toRgb();
703
+ var rgb2 = c2.toRgb();
704
+ var brightnessA = c1.getBrightness();
705
+ var brightnessB = c2.getBrightness();
558
706
  var colorDiff = (
559
- Math.max(a.r, b.r) - Math.min(a.r, b.r) +
560
- Math.max(a.g, b.g) - Math.min(a.g, b.g) +
561
- Math.max(a.b, b.b) - Math.min(a.b, b.b)
707
+ Math.max(rgb1.r, rgb2.r) - Math.min(rgb1.r, rgb2.r) +
708
+ Math.max(rgb1.g, rgb2.g) - Math.min(rgb1.g, rgb2.g) +
709
+ Math.max(rgb1.b, rgb2.b) - Math.min(rgb1.b, rgb2.b)
562
710
  );
563
711
 
564
712
  return {
@@ -571,8 +719,8 @@ tinycolor.readability = function(color1, color2) {
571
719
  // http://www.w3.org/TR/AERT#color-contrast
572
720
  // Ensure that foreground and background color combinations provide sufficient contrast.
573
721
  // *Example*
574
- // tinycolor.readable("#000", "#111") => false
575
- tinycolor.readable = function(color1, color2) {
722
+ // tinycolor.isReadable("#000", "#111") => false
723
+ tinycolor.isReadable = function(color1, color2) {
576
724
  var readability = tinycolor.readability(color1, color2);
577
725
  return readability.brightness > 125 && readability.color > 500;
578
726
  };
@@ -731,6 +879,7 @@ var names = tinycolor.names = {
731
879
  plum: "dda0dd",
732
880
  powderblue: "b0e0e6",
733
881
  purple: "800080",
882
+ rebeccapurple: "663399",
734
883
  red: "f00",
735
884
  rosybrown: "bc8f8f",
736
885
  royalblue: "4169e1",
@@ -878,6 +1027,7 @@ var matchers = (function() {
878
1027
  hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
879
1028
  hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
880
1029
  hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
1030
+ hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
881
1031
  hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
882
1032
  hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
883
1033
  hex8: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
@@ -919,6 +1069,9 @@ function stringInputToObject(color) {
919
1069
  if ((match = matchers.hsv.exec(color))) {
920
1070
  return { h: match[1], s: match[2], v: match[3] };
921
1071
  }
1072
+ if ((match = matchers.hsva.exec(color))) {
1073
+ return { h: match[1], s: match[2], v: match[3], a: match[4] };
1074
+ }
922
1075
  if ((match = matchers.hex8.exec(color))) {
923
1076
  return {
924
1077
  a: convertHexToDecimal(match[1]),
@@ -954,7 +1107,7 @@ if (typeof module !== "undefined" && module.exports) {
954
1107
  tiny = tinycolor;
955
1108
  }
956
1109
  // AMD/requirejs: Define the module
957
- else if (typeof define !== "undefined") {
1110
+ else if (typeof define === 'function' && define.amd) {
958
1111
  define(function () {return tinycolor;});
959
1112
  }
960
1113
  // Browser: Expose to window
@@ -964,10 +1117,13 @@ else {
964
1117
 
965
1118
  })();
966
1119
 
967
-
968
1120
  var color = tiny(process.argv[2]);
969
1121
  if(process.argv[3] == 'rgb') {
970
1122
  console.log(color.toRgbString());
971
1123
  } else {
1124
+ if(color.getAlpha() < 1.0) {
1125
+ var brightness_factor = (255 - color.getBrightness()) / 255;
1126
+ color = color.lighten(100 * brightness_factor * (1.0 - color.getAlpha()));
1127
+ }
972
1128
  console.log(color.toHex());
973
1129
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: obf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Whitmer