12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051 |
- (function(f){var g;if(typeof window!=='undefined'){g=window}else if(typeof self!=='undefined'){g=self}g.diagnostics=f()})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(_dereq_,module,exports){
- 'use strict';
- var colorspace = _dereq_('colorspace');
- var enabled = _dereq_('enabled');
- /**
- * Bare minimum browser version of diagnostics. It doesn't need fancy pancy
- * detection algorithms. The code is only enabled when *you* enable it for
- * debugging purposes.
- *
- * @param {String} name Namespace of the diagnostics instance.
- * @returns {Function} The logger.
- * @public
- */
- module.exports = function factory(name) {
- if (!enabled(name)) return function diagnopes() {};
- //
- // The color for the namespace.
- //
- var color = colorspace(name);
- /**
- * The actual function that does the logging.
- *
- * @param {...args} args The data that needs to be logged.
- * @public
- */
- return function diagnostics() {
- var args = Array.prototype.slice.call(arguments, 0);
- //
- // We cannot push a value as first argument of the argument array as
- // console's formatting %s, %d only works on the first argument it receives.
- // So in order to prepend our namespace we need to override and prefix the
- // first argument.
- //
- args[0] = '%c'+ name +'%c: '+ args[0];
- //
- // Now we want to inject the colors to the arguments, so they get colored.
- // The last empty argh here is to remove the color again so the log message
- // is not colored.
- //
- args.splice(1, 0, 'color:'+ color, '');
- //
- // So yea. IE8 doesn't have an apply so we need a work around to puke the
- // arguments in place.
- //
- try { Function.prototype.apply.call(console.log, console, args); }
- catch (e) {}
- };
- };
- },{"colorspace":7,"enabled":8}],2:[function(_dereq_,module,exports){
- /* MIT license */
- module.exports = {
- rgb2hsl: rgb2hsl,
- rgb2hsv: rgb2hsv,
- rgb2hwb: rgb2hwb,
- rgb2cmyk: rgb2cmyk,
- rgb2keyword: rgb2keyword,
- rgb2xyz: rgb2xyz,
- rgb2lab: rgb2lab,
- rgb2lch: rgb2lch,
- hsl2rgb: hsl2rgb,
- hsl2hsv: hsl2hsv,
- hsl2hwb: hsl2hwb,
- hsl2cmyk: hsl2cmyk,
- hsl2keyword: hsl2keyword,
- hsv2rgb: hsv2rgb,
- hsv2hsl: hsv2hsl,
- hsv2hwb: hsv2hwb,
- hsv2cmyk: hsv2cmyk,
- hsv2keyword: hsv2keyword,
- hwb2rgb: hwb2rgb,
- hwb2hsl: hwb2hsl,
- hwb2hsv: hwb2hsv,
- hwb2cmyk: hwb2cmyk,
- hwb2keyword: hwb2keyword,
- cmyk2rgb: cmyk2rgb,
- cmyk2hsl: cmyk2hsl,
- cmyk2hsv: cmyk2hsv,
- cmyk2hwb: cmyk2hwb,
- cmyk2keyword: cmyk2keyword,
- keyword2rgb: keyword2rgb,
- keyword2hsl: keyword2hsl,
- keyword2hsv: keyword2hsv,
- keyword2hwb: keyword2hwb,
- keyword2cmyk: keyword2cmyk,
- keyword2lab: keyword2lab,
- keyword2xyz: keyword2xyz,
- xyz2rgb: xyz2rgb,
- xyz2lab: xyz2lab,
- xyz2lch: xyz2lch,
- lab2xyz: lab2xyz,
- lab2rgb: lab2rgb,
- lab2lch: lab2lch,
- lch2lab: lch2lab,
- lch2xyz: lch2xyz,
- lch2rgb: lch2rgb
- }
- function rgb2hsl(rgb) {
- var r = rgb[0]/255,
- g = rgb[1]/255,
- b = rgb[2]/255,
- min = Math.min(r, g, b),
- max = Math.max(r, g, b),
- delta = max - min,
- h, s, l;
- if (max == min)
- h = 0;
- else if (r == max)
- h = (g - b) / delta;
- else if (g == max)
- h = 2 + (b - r) / delta;
- else if (b == max)
- h = 4 + (r - g)/ delta;
- h = Math.min(h * 60, 360);
- if (h < 0)
- h += 360;
- l = (min + max) / 2;
- if (max == min)
- s = 0;
- else if (l <= 0.5)
- s = delta / (max + min);
- else
- s = delta / (2 - max - min);
- return [h, s * 100, l * 100];
- }
- function rgb2hsv(rgb) {
- var r = rgb[0],
- g = rgb[1],
- b = rgb[2],
- min = Math.min(r, g, b),
- max = Math.max(r, g, b),
- delta = max - min,
- h, s, v;
- if (max == 0)
- s = 0;
- else
- s = (delta/max * 1000)/10;
- if (max == min)
- h = 0;
- else if (r == max)
- h = (g - b) / delta;
- else if (g == max)
- h = 2 + (b - r) / delta;
- else if (b == max)
- h = 4 + (r - g) / delta;
- h = Math.min(h * 60, 360);
- if (h < 0)
- h += 360;
- v = ((max / 255) * 1000) / 10;
- return [h, s, v];
- }
- function rgb2hwb(rgb) {
- var r = rgb[0],
- g = rgb[1],
- b = rgb[2],
- h = rgb2hsl(rgb)[0],
- w = 1/255 * Math.min(r, Math.min(g, b)),
- b = 1 - 1/255 * Math.max(r, Math.max(g, b));
- return [h, w * 100, b * 100];
- }
- function rgb2cmyk(rgb) {
- var r = rgb[0] / 255,
- g = rgb[1] / 255,
- b = rgb[2] / 255,
- c, m, y, k;
- k = Math.min(1 - r, 1 - g, 1 - b);
- c = (1 - r - k) / (1 - k) || 0;
- m = (1 - g - k) / (1 - k) || 0;
- y = (1 - b - k) / (1 - k) || 0;
- return [c * 100, m * 100, y * 100, k * 100];
- }
- function rgb2keyword(rgb) {
- return reverseKeywords[JSON.stringify(rgb)];
- }
- function rgb2xyz(rgb) {
- var r = rgb[0] / 255,
- g = rgb[1] / 255,
- b = rgb[2] / 255;
- // assume sRGB
- r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
- g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
- b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
- var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
- return [x * 100, y *100, z * 100];
- }
- function rgb2lab(rgb) {
- var xyz = rgb2xyz(rgb),
- x = xyz[0],
- y = xyz[1],
- z = xyz[2],
- l, a, b;
- x /= 95.047;
- y /= 100;
- z /= 108.883;
- x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
- return [l, a, b];
- }
- function rgb2lch(args) {
- return lab2lch(rgb2lab(args));
- }
- function hsl2rgb(hsl) {
- var h = hsl[0] / 360,
- s = hsl[1] / 100,
- l = hsl[2] / 100,
- t1, t2, t3, rgb, val;
- if (s == 0) {
- val = l * 255;
- return [val, val, val];
- }
- if (l < 0.5)
- t2 = l * (1 + s);
- else
- t2 = l + s - l * s;
- t1 = 2 * l - t2;
- rgb = [0, 0, 0];
- for (var i = 0; i < 3; i++) {
- t3 = h + 1 / 3 * - (i - 1);
- t3 < 0 && t3++;
- t3 > 1 && t3--;
- if (6 * t3 < 1)
- val = t1 + (t2 - t1) * 6 * t3;
- else if (2 * t3 < 1)
- val = t2;
- else if (3 * t3 < 2)
- val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
- else
- val = t1;
- rgb[i] = val * 255;
- }
- return rgb;
- }
- function hsl2hsv(hsl) {
- var h = hsl[0],
- s = hsl[1] / 100,
- l = hsl[2] / 100,
- sv, v;
- if(l === 0) {
- // no need to do calc on black
- // also avoids divide by 0 error
- return [0, 0, 0];
- }
- l *= 2;
- s *= (l <= 1) ? l : 2 - l;
- v = (l + s) / 2;
- sv = (2 * s) / (l + s);
- return [h, sv * 100, v * 100];
- }
- function hsl2hwb(args) {
- return rgb2hwb(hsl2rgb(args));
- }
- function hsl2cmyk(args) {
- return rgb2cmyk(hsl2rgb(args));
- }
- function hsl2keyword(args) {
- return rgb2keyword(hsl2rgb(args));
- }
- function hsv2rgb(hsv) {
- var h = hsv[0] / 60,
- s = hsv[1] / 100,
- v = hsv[2] / 100,
- hi = Math.floor(h) % 6;
- var f = h - Math.floor(h),
- p = 255 * v * (1 - s),
- q = 255 * v * (1 - (s * f)),
- t = 255 * v * (1 - (s * (1 - f))),
- v = 255 * v;
- switch(hi) {
- case 0:
- return [v, t, p];
- case 1:
- return [q, v, p];
- case 2:
- return [p, v, t];
- case 3:
- return [p, q, v];
- case 4:
- return [t, p, v];
- case 5:
- return [v, p, q];
- }
- }
- function hsv2hsl(hsv) {
- var h = hsv[0],
- s = hsv[1] / 100,
- v = hsv[2] / 100,
- sl, l;
- l = (2 - s) * v;
- sl = s * v;
- sl /= (l <= 1) ? l : 2 - l;
- sl = sl || 0;
- l /= 2;
- return [h, sl * 100, l * 100];
- }
- function hsv2hwb(args) {
- return rgb2hwb(hsv2rgb(args))
- }
- function hsv2cmyk(args) {
- return rgb2cmyk(hsv2rgb(args));
- }
- function hsv2keyword(args) {
- return rgb2keyword(hsv2rgb(args));
- }
- // http://dev.w3.org/csswg/css-color/#hwb-to-rgb
- function hwb2rgb(hwb) {
- var h = hwb[0] / 360,
- wh = hwb[1] / 100,
- bl = hwb[2] / 100,
- ratio = wh + bl,
- i, v, f, n;
- // wh + bl cant be > 1
- if (ratio > 1) {
- wh /= ratio;
- bl /= ratio;
- }
- i = Math.floor(6 * h);
- v = 1 - bl;
- f = 6 * h - i;
- if ((i & 0x01) != 0) {
- f = 1 - f;
- }
- n = wh + f * (v - wh); // linear interpolation
- switch (i) {
- default:
- case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
- }
- return [r * 255, g * 255, b * 255];
- }
- function hwb2hsl(args) {
- return rgb2hsl(hwb2rgb(args));
- }
- function hwb2hsv(args) {
- return rgb2hsv(hwb2rgb(args));
- }
- function hwb2cmyk(args) {
- return rgb2cmyk(hwb2rgb(args));
- }
- function hwb2keyword(args) {
- return rgb2keyword(hwb2rgb(args));
- }
- function cmyk2rgb(cmyk) {
- var c = cmyk[0] / 100,
- m = cmyk[1] / 100,
- y = cmyk[2] / 100,
- k = cmyk[3] / 100,
- r, g, b;
- r = 1 - Math.min(1, c * (1 - k) + k);
- g = 1 - Math.min(1, m * (1 - k) + k);
- b = 1 - Math.min(1, y * (1 - k) + k);
- return [r * 255, g * 255, b * 255];
- }
- function cmyk2hsl(args) {
- return rgb2hsl(cmyk2rgb(args));
- }
- function cmyk2hsv(args) {
- return rgb2hsv(cmyk2rgb(args));
- }
- function cmyk2hwb(args) {
- return rgb2hwb(cmyk2rgb(args));
- }
- function cmyk2keyword(args) {
- return rgb2keyword(cmyk2rgb(args));
- }
- function xyz2rgb(xyz) {
- var x = xyz[0] / 100,
- y = xyz[1] / 100,
- z = xyz[2] / 100,
- r, g, b;
- r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
- g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
- b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
- // assume sRGB
- r = r > 0.0031308 ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
- : r = (r * 12.92);
- g = g > 0.0031308 ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
- : g = (g * 12.92);
- b = b > 0.0031308 ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
- : b = (b * 12.92);
- r = Math.min(Math.max(0, r), 1);
- g = Math.min(Math.max(0, g), 1);
- b = Math.min(Math.max(0, b), 1);
- return [r * 255, g * 255, b * 255];
- }
- function xyz2lab(xyz) {
- var x = xyz[0],
- y = xyz[1],
- z = xyz[2],
- l, a, b;
- x /= 95.047;
- y /= 100;
- z /= 108.883;
- x = x > 0.008856 ? Math.pow(x, 1/3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1/3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1/3) : (7.787 * z) + (16 / 116);
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
- return [l, a, b];
- }
- function xyz2lch(args) {
- return lab2lch(xyz2lab(args));
- }
- function lab2xyz(lab) {
- var l = lab[0],
- a = lab[1],
- b = lab[2],
- x, y, z, y2;
- if (l <= 8) {
- y = (l * 100) / 903.3;
- y2 = (7.787 * (y / 100)) + (16 / 116);
- } else {
- y = 100 * Math.pow((l + 16) / 116, 3);
- y2 = Math.pow(y / 100, 1/3);
- }
- x = x / 95.047 <= 0.008856 ? x = (95.047 * ((a / 500) + y2 - (16 / 116))) / 7.787 : 95.047 * Math.pow((a / 500) + y2, 3);
- z = z / 108.883 <= 0.008859 ? z = (108.883 * (y2 - (b / 200) - (16 / 116))) / 7.787 : 108.883 * Math.pow(y2 - (b / 200), 3);
- return [x, y, z];
- }
- function lab2lch(lab) {
- var l = lab[0],
- a = lab[1],
- b = lab[2],
- hr, h, c;
- hr = Math.atan2(b, a);
- h = hr * 360 / 2 / Math.PI;
- if (h < 0) {
- h += 360;
- }
- c = Math.sqrt(a * a + b * b);
- return [l, c, h];
- }
- function lab2rgb(args) {
- return xyz2rgb(lab2xyz(args));
- }
- function lch2lab(lch) {
- var l = lch[0],
- c = lch[1],
- h = lch[2],
- a, b, hr;
- hr = h / 360 * 2 * Math.PI;
- a = c * Math.cos(hr);
- b = c * Math.sin(hr);
- return [l, a, b];
- }
- function lch2xyz(args) {
- return lab2xyz(lch2lab(args));
- }
- function lch2rgb(args) {
- return lab2rgb(lch2lab(args));
- }
- function keyword2rgb(keyword) {
- return cssKeywords[keyword];
- }
- function keyword2hsl(args) {
- return rgb2hsl(keyword2rgb(args));
- }
- function keyword2hsv(args) {
- return rgb2hsv(keyword2rgb(args));
- }
- function keyword2hwb(args) {
- return rgb2hwb(keyword2rgb(args));
- }
- function keyword2cmyk(args) {
- return rgb2cmyk(keyword2rgb(args));
- }
- function keyword2lab(args) {
- return rgb2lab(keyword2rgb(args));
- }
- function keyword2xyz(args) {
- return rgb2xyz(keyword2rgb(args));
- }
- var cssKeywords = {
- aliceblue: [240,248,255],
- antiquewhite: [250,235,215],
- aqua: [0,255,255],
- aquamarine: [127,255,212],
- azure: [240,255,255],
- beige: [245,245,220],
- bisque: [255,228,196],
- black: [0,0,0],
- blanchedalmond: [255,235,205],
- blue: [0,0,255],
- blueviolet: [138,43,226],
- brown: [165,42,42],
- burlywood: [222,184,135],
- cadetblue: [95,158,160],
- chartreuse: [127,255,0],
- chocolate: [210,105,30],
- coral: [255,127,80],
- cornflowerblue: [100,149,237],
- cornsilk: [255,248,220],
- crimson: [220,20,60],
- cyan: [0,255,255],
- darkblue: [0,0,139],
- darkcyan: [0,139,139],
- darkgoldenrod: [184,134,11],
- darkgray: [169,169,169],
- darkgreen: [0,100,0],
- darkgrey: [169,169,169],
- darkkhaki: [189,183,107],
- darkmagenta: [139,0,139],
- darkolivegreen: [85,107,47],
- darkorange: [255,140,0],
- darkorchid: [153,50,204],
- darkred: [139,0,0],
- darksalmon: [233,150,122],
- darkseagreen: [143,188,143],
- darkslateblue: [72,61,139],
- darkslategray: [47,79,79],
- darkslategrey: [47,79,79],
- darkturquoise: [0,206,209],
- darkviolet: [148,0,211],
- deeppink: [255,20,147],
- deepskyblue: [0,191,255],
- dimgray: [105,105,105],
- dimgrey: [105,105,105],
- dodgerblue: [30,144,255],
- firebrick: [178,34,34],
- floralwhite: [255,250,240],
- forestgreen: [34,139,34],
- fuchsia: [255,0,255],
- gainsboro: [220,220,220],
- ghostwhite: [248,248,255],
- gold: [255,215,0],
- goldenrod: [218,165,32],
- gray: [128,128,128],
- green: [0,128,0],
- greenyellow: [173,255,47],
- grey: [128,128,128],
- honeydew: [240,255,240],
- hotpink: [255,105,180],
- indianred: [205,92,92],
- indigo: [75,0,130],
- ivory: [255,255,240],
- khaki: [240,230,140],
- lavender: [230,230,250],
- lavenderblush: [255,240,245],
- lawngreen: [124,252,0],
- lemonchiffon: [255,250,205],
- lightblue: [173,216,230],
- lightcoral: [240,128,128],
- lightcyan: [224,255,255],
- lightgoldenrodyellow: [250,250,210],
- lightgray: [211,211,211],
- lightgreen: [144,238,144],
- lightgrey: [211,211,211],
- lightpink: [255,182,193],
- lightsalmon: [255,160,122],
- lightseagreen: [32,178,170],
- lightskyblue: [135,206,250],
- lightslategray: [119,136,153],
- lightslategrey: [119,136,153],
- lightsteelblue: [176,196,222],
- lightyellow: [255,255,224],
- lime: [0,255,0],
- limegreen: [50,205,50],
- linen: [250,240,230],
- magenta: [255,0,255],
- maroon: [128,0,0],
- mediumaquamarine: [102,205,170],
- mediumblue: [0,0,205],
- mediumorchid: [186,85,211],
- mediumpurple: [147,112,219],
- mediumseagreen: [60,179,113],
- mediumslateblue: [123,104,238],
- mediumspringgreen: [0,250,154],
- mediumturquoise: [72,209,204],
- mediumvioletred: [199,21,133],
- midnightblue: [25,25,112],
- mintcream: [245,255,250],
- mistyrose: [255,228,225],
- moccasin: [255,228,181],
- navajowhite: [255,222,173],
- navy: [0,0,128],
- oldlace: [253,245,230],
- olive: [128,128,0],
- olivedrab: [107,142,35],
- orange: [255,165,0],
- orangered: [255,69,0],
- orchid: [218,112,214],
- palegoldenrod: [238,232,170],
- palegreen: [152,251,152],
- paleturquoise: [175,238,238],
- palevioletred: [219,112,147],
- papayawhip: [255,239,213],
- peachpuff: [255,218,185],
- peru: [205,133,63],
- pink: [255,192,203],
- plum: [221,160,221],
- powderblue: [176,224,230],
- purple: [128,0,128],
- rebeccapurple: [102, 51, 153],
- red: [255,0,0],
- rosybrown: [188,143,143],
- royalblue: [65,105,225],
- saddlebrown: [139,69,19],
- salmon: [250,128,114],
- sandybrown: [244,164,96],
- seagreen: [46,139,87],
- seashell: [255,245,238],
- sienna: [160,82,45],
- silver: [192,192,192],
- skyblue: [135,206,235],
- slateblue: [106,90,205],
- slategray: [112,128,144],
- slategrey: [112,128,144],
- snow: [255,250,250],
- springgreen: [0,255,127],
- steelblue: [70,130,180],
- tan: [210,180,140],
- teal: [0,128,128],
- thistle: [216,191,216],
- tomato: [255,99,71],
- turquoise: [64,224,208],
- violet: [238,130,238],
- wheat: [245,222,179],
- white: [255,255,255],
- whitesmoke: [245,245,245],
- yellow: [255,255,0],
- yellowgreen: [154,205,50]
- };
- var reverseKeywords = {};
- for (var key in cssKeywords) {
- reverseKeywords[JSON.stringify(cssKeywords[key])] = key;
- }
- },{}],3:[function(_dereq_,module,exports){
- var conversions = _dereq_("./conversions");
- var convert = function() {
- return new Converter();
- }
- for (var func in conversions) {
- // export Raw versions
- convert[func + "Raw"] = (function(func) {
- // accept array or plain args
- return function(arg) {
- if (typeof arg == "number")
- arg = Array.prototype.slice.call(arguments);
- return conversions[func](arg);
- }
- })(func);
- var pair = /(\w+)2(\w+)/.exec(func),
- from = pair[1],
- to = pair[2];
- // export rgb2hsl and ["rgb"]["hsl"]
- convert[from] = convert[from] || {};
- convert[from][to] = convert[func] = (function(func) {
- return function(arg) {
- if (typeof arg == "number")
- arg = Array.prototype.slice.call(arguments);
-
- var val = conversions[func](arg);
- if (typeof val == "string" || val === undefined)
- return val; // keyword
- for (var i = 0; i < val.length; i++)
- val[i] = Math.round(val[i]);
- return val;
- }
- })(func);
- }
- /* Converter does lazy conversion and caching */
- var Converter = function() {
- this.convs = {};
- };
- /* Either get the values for a space or
- set the values for a space, depending on args */
- Converter.prototype.routeSpace = function(space, args) {
- var values = args[0];
- if (values === undefined) {
- // color.rgb()
- return this.getValues(space);
- }
- // color.rgb(10, 10, 10)
- if (typeof values == "number") {
- values = Array.prototype.slice.call(args);
- }
- return this.setValues(space, values);
- };
-
- /* Set the values for a space, invalidating cache */
- Converter.prototype.setValues = function(space, values) {
- this.space = space;
- this.convs = {};
- this.convs[space] = values;
- return this;
- };
- /* Get the values for a space. If there's already
- a conversion for the space, fetch it, otherwise
- compute it */
- Converter.prototype.getValues = function(space) {
- var vals = this.convs[space];
- if (!vals) {
- var fspace = this.space,
- from = this.convs[fspace];
- vals = convert[fspace][space](from);
- this.convs[space] = vals;
- }
- return vals;
- };
- ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) {
- Converter.prototype[space] = function(vals) {
- return this.routeSpace(space, arguments);
- }
- });
- module.exports = convert;
- },{"./conversions":2}],4:[function(_dereq_,module,exports){
- 'use strict'
- module.exports = {
- "aliceblue": [240, 248, 255],
- "antiquewhite": [250, 235, 215],
- "aqua": [0, 255, 255],
- "aquamarine": [127, 255, 212],
- "azure": [240, 255, 255],
- "beige": [245, 245, 220],
- "bisque": [255, 228, 196],
- "black": [0, 0, 0],
- "blanchedalmond": [255, 235, 205],
- "blue": [0, 0, 255],
- "blueviolet": [138, 43, 226],
- "brown": [165, 42, 42],
- "burlywood": [222, 184, 135],
- "cadetblue": [95, 158, 160],
- "chartreuse": [127, 255, 0],
- "chocolate": [210, 105, 30],
- "coral": [255, 127, 80],
- "cornflowerblue": [100, 149, 237],
- "cornsilk": [255, 248, 220],
- "crimson": [220, 20, 60],
- "cyan": [0, 255, 255],
- "darkblue": [0, 0, 139],
- "darkcyan": [0, 139, 139],
- "darkgoldenrod": [184, 134, 11],
- "darkgray": [169, 169, 169],
- "darkgreen": [0, 100, 0],
- "darkgrey": [169, 169, 169],
- "darkkhaki": [189, 183, 107],
- "darkmagenta": [139, 0, 139],
- "darkolivegreen": [85, 107, 47],
- "darkorange": [255, 140, 0],
- "darkorchid": [153, 50, 204],
- "darkred": [139, 0, 0],
- "darksalmon": [233, 150, 122],
- "darkseagreen": [143, 188, 143],
- "darkslateblue": [72, 61, 139],
- "darkslategray": [47, 79, 79],
- "darkslategrey": [47, 79, 79],
- "darkturquoise": [0, 206, 209],
- "darkviolet": [148, 0, 211],
- "deeppink": [255, 20, 147],
- "deepskyblue": [0, 191, 255],
- "dimgray": [105, 105, 105],
- "dimgrey": [105, 105, 105],
- "dodgerblue": [30, 144, 255],
- "firebrick": [178, 34, 34],
- "floralwhite": [255, 250, 240],
- "forestgreen": [34, 139, 34],
- "fuchsia": [255, 0, 255],
- "gainsboro": [220, 220, 220],
- "ghostwhite": [248, 248, 255],
- "gold": [255, 215, 0],
- "goldenrod": [218, 165, 32],
- "gray": [128, 128, 128],
- "green": [0, 128, 0],
- "greenyellow": [173, 255, 47],
- "grey": [128, 128, 128],
- "honeydew": [240, 255, 240],
- "hotpink": [255, 105, 180],
- "indianred": [205, 92, 92],
- "indigo": [75, 0, 130],
- "ivory": [255, 255, 240],
- "khaki": [240, 230, 140],
- "lavender": [230, 230, 250],
- "lavenderblush": [255, 240, 245],
- "lawngreen": [124, 252, 0],
- "lemonchiffon": [255, 250, 205],
- "lightblue": [173, 216, 230],
- "lightcoral": [240, 128, 128],
- "lightcyan": [224, 255, 255],
- "lightgoldenrodyellow": [250, 250, 210],
- "lightgray": [211, 211, 211],
- "lightgreen": [144, 238, 144],
- "lightgrey": [211, 211, 211],
- "lightpink": [255, 182, 193],
- "lightsalmon": [255, 160, 122],
- "lightseagreen": [32, 178, 170],
- "lightskyblue": [135, 206, 250],
- "lightslategray": [119, 136, 153],
- "lightslategrey": [119, 136, 153],
- "lightsteelblue": [176, 196, 222],
- "lightyellow": [255, 255, 224],
- "lime": [0, 255, 0],
- "limegreen": [50, 205, 50],
- "linen": [250, 240, 230],
- "magenta": [255, 0, 255],
- "maroon": [128, 0, 0],
- "mediumaquamarine": [102, 205, 170],
- "mediumblue": [0, 0, 205],
- "mediumorchid": [186, 85, 211],
- "mediumpurple": [147, 112, 219],
- "mediumseagreen": [60, 179, 113],
- "mediumslateblue": [123, 104, 238],
- "mediumspringgreen": [0, 250, 154],
- "mediumturquoise": [72, 209, 204],
- "mediumvioletred": [199, 21, 133],
- "midnightblue": [25, 25, 112],
- "mintcream": [245, 255, 250],
- "mistyrose": [255, 228, 225],
- "moccasin": [255, 228, 181],
- "navajowhite": [255, 222, 173],
- "navy": [0, 0, 128],
- "oldlace": [253, 245, 230],
- "olive": [128, 128, 0],
- "olivedrab": [107, 142, 35],
- "orange": [255, 165, 0],
- "orangered": [255, 69, 0],
- "orchid": [218, 112, 214],
- "palegoldenrod": [238, 232, 170],
- "palegreen": [152, 251, 152],
- "paleturquoise": [175, 238, 238],
- "palevioletred": [219, 112, 147],
- "papayawhip": [255, 239, 213],
- "peachpuff": [255, 218, 185],
- "peru": [205, 133, 63],
- "pink": [255, 192, 203],
- "plum": [221, 160, 221],
- "powderblue": [176, 224, 230],
- "purple": [128, 0, 128],
- "rebeccapurple": [102, 51, 153],
- "red": [255, 0, 0],
- "rosybrown": [188, 143, 143],
- "royalblue": [65, 105, 225],
- "saddlebrown": [139, 69, 19],
- "salmon": [250, 128, 114],
- "sandybrown": [244, 164, 96],
- "seagreen": [46, 139, 87],
- "seashell": [255, 245, 238],
- "sienna": [160, 82, 45],
- "silver": [192, 192, 192],
- "skyblue": [135, 206, 235],
- "slateblue": [106, 90, 205],
- "slategray": [112, 128, 144],
- "slategrey": [112, 128, 144],
- "snow": [255, 250, 250],
- "springgreen": [0, 255, 127],
- "steelblue": [70, 130, 180],
- "tan": [210, 180, 140],
- "teal": [0, 128, 128],
- "thistle": [216, 191, 216],
- "tomato": [255, 99, 71],
- "turquoise": [64, 224, 208],
- "violet": [238, 130, 238],
- "wheat": [245, 222, 179],
- "white": [255, 255, 255],
- "whitesmoke": [245, 245, 245],
- "yellow": [255, 255, 0],
- "yellowgreen": [154, 205, 50]
- };
- },{}],5:[function(_dereq_,module,exports){
- /* MIT license */
- var colorNames = _dereq_('color-name');
- module.exports = {
- getRgba: getRgba,
- getHsla: getHsla,
- getRgb: getRgb,
- getHsl: getHsl,
- getHwb: getHwb,
- getAlpha: getAlpha,
- hexString: hexString,
- rgbString: rgbString,
- rgbaString: rgbaString,
- percentString: percentString,
- percentaString: percentaString,
- hslString: hslString,
- hslaString: hslaString,
- hwbString: hwbString,
- keyword: keyword
- }
- function getRgba(string) {
- if (!string) {
- return;
- }
- var abbr = /^#([a-fA-F0-9]{3})$/,
- hex = /^#([a-fA-F0-9]{6})$/,
- rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
- per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,
- keyword = /(\D+)/;
- var rgb = [0, 0, 0],
- a = 1,
- match = string.match(abbr);
- if (match) {
- match = match[1];
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match[i] + match[i], 16);
- }
- }
- else if (match = string.match(hex)) {
- match = match[1];
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
- }
- }
- else if (match = string.match(rgba)) {
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match[i + 1]);
- }
- a = parseFloat(match[4]);
- }
- else if (match = string.match(per)) {
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
- }
- a = parseFloat(match[4]);
- }
- else if (match = string.match(keyword)) {
- if (match[1] == "transparent") {
- return [0, 0, 0, 0];
- }
- rgb = colorNames[match[1]];
- if (!rgb) {
- return;
- }
- }
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = scale(rgb[i], 0, 255);
- }
- if (!a && a != 0) {
- a = 1;
- }
- else {
- a = scale(a, 0, 1);
- }
- rgb[3] = a;
- return rgb;
- }
- function getHsla(string) {
- if (!string) {
- return;
- }
- var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
- var match = string.match(hsl);
- if (match) {
- var alpha = parseFloat(match[4]);
- var h = scale(parseInt(match[1]), 0, 360),
- s = scale(parseFloat(match[2]), 0, 100),
- l = scale(parseFloat(match[3]), 0, 100),
- a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
- return [h, s, l, a];
- }
- }
- function getHwb(string) {
- if (!string) {
- return;
- }
- var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
- var match = string.match(hwb);
- if (match) {
- var alpha = parseFloat(match[4]);
- var h = scale(parseInt(match[1]), 0, 360),
- w = scale(parseFloat(match[2]), 0, 100),
- b = scale(parseFloat(match[3]), 0, 100),
- a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
- return [h, w, b, a];
- }
- }
- function getRgb(string) {
- var rgba = getRgba(string);
- return rgba && rgba.slice(0, 3);
- }
- function getHsl(string) {
- var hsla = getHsla(string);
- return hsla && hsla.slice(0, 3);
- }
- function getAlpha(string) {
- var vals = getRgba(string);
- if (vals) {
- return vals[3];
- }
- else if (vals = getHsla(string)) {
- return vals[3];
- }
- else if (vals = getHwb(string)) {
- return vals[3];
- }
- }
- // generators
- function hexString(rgb) {
- return "#" + hexDouble(rgb[0]) + hexDouble(rgb[1])
- + hexDouble(rgb[2]);
- }
- function rgbString(rgba, alpha) {
- if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
- return rgbaString(rgba, alpha);
- }
- return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
- }
- function rgbaString(rgba, alpha) {
- if (alpha === undefined) {
- alpha = (rgba[3] !== undefined ? rgba[3] : 1);
- }
- return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
- + ", " + alpha + ")";
- }
- function percentString(rgba, alpha) {
- if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
- return percentaString(rgba, alpha);
- }
- var r = Math.round(rgba[0]/255 * 100),
- g = Math.round(rgba[1]/255 * 100),
- b = Math.round(rgba[2]/255 * 100);
- return "rgb(" + r + "%, " + g + "%, " + b + "%)";
- }
- function percentaString(rgba, alpha) {
- var r = Math.round(rgba[0]/255 * 100),
- g = Math.round(rgba[1]/255 * 100),
- b = Math.round(rgba[2]/255 * 100);
- return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
- }
- function hslString(hsla, alpha) {
- if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
- return hslaString(hsla, alpha);
- }
- return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
- }
- function hslaString(hsla, alpha) {
- if (alpha === undefined) {
- alpha = (hsla[3] !== undefined ? hsla[3] : 1);
- }
- return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
- + alpha + ")";
- }
- // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
- // (hwb have alpha optional & 1 is default value)
- function hwbString(hwb, alpha) {
- if (alpha === undefined) {
- alpha = (hwb[3] !== undefined ? hwb[3] : 1);
- }
- return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
- + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
- }
- function keyword(rgb) {
- return reverseNames[rgb.slice(0, 3)];
- }
- // helpers
- function scale(num, min, max) {
- return Math.min(Math.max(min, num), max);
- }
- function hexDouble(num) {
- var str = num.toString(16).toUpperCase();
- return (str.length < 2) ? "0" + str : str;
- }
- //create a list of reverse color names
- var reverseNames = {};
- for (var name in colorNames) {
- reverseNames[colorNames[name]] = name;
- }
- },{"color-name":4}],6:[function(_dereq_,module,exports){
- /* MIT license */
- var convert = _dereq_("color-convert"),
- string = _dereq_("color-string");
- var Color = function(obj) {
- if (obj instanceof Color) return obj;
- if (! (this instanceof Color)) return new Color(obj);
- this.values = {
- rgb: [0, 0, 0],
- hsl: [0, 0, 0],
- hsv: [0, 0, 0],
- hwb: [0, 0, 0],
- cmyk: [0, 0, 0, 0],
- alpha: 1
- }
- // parse Color() argument
- if (typeof obj == "string") {
- var vals = string.getRgba(obj);
- if (vals) {
- this.setValues("rgb", vals);
- }
- else if(vals = string.getHsla(obj)) {
- this.setValues("hsl", vals);
- }
- else if(vals = string.getHwb(obj)) {
- this.setValues("hwb", vals);
- }
- else {
- throw new Error("Unable to parse color from string \"" + obj + "\"");
- }
- }
- else if (typeof obj == "object") {
- var vals = obj;
- if(vals["r"] !== undefined || vals["red"] !== undefined) {
- this.setValues("rgb", vals)
- }
- else if(vals["l"] !== undefined || vals["lightness"] !== undefined) {
- this.setValues("hsl", vals)
- }
- else if(vals["v"] !== undefined || vals["value"] !== undefined) {
- this.setValues("hsv", vals)
- }
- else if(vals["w"] !== undefined || vals["whiteness"] !== undefined) {
- this.setValues("hwb", vals)
- }
- else if(vals["c"] !== undefined || vals["cyan"] !== undefined) {
- this.setValues("cmyk", vals)
- }
- else {
- throw new Error("Unable to parse color from object " + JSON.stringify(obj));
- }
- }
- }
- Color.prototype = {
- rgb: function (vals) {
- return this.setSpace("rgb", arguments);
- },
- hsl: function(vals) {
- return this.setSpace("hsl", arguments);
- },
- hsv: function(vals) {
- return this.setSpace("hsv", arguments);
- },
- hwb: function(vals) {
- return this.setSpace("hwb", arguments);
- },
- cmyk: function(vals) {
- return this.setSpace("cmyk", arguments);
- },
- rgbArray: function() {
- return this.values.rgb;
- },
- hslArray: function() {
- return this.values.hsl;
- },
- hsvArray: function() {
- return this.values.hsv;
- },
- hwbArray: function() {
- if (this.values.alpha !== 1) {
- return this.values.hwb.concat([this.values.alpha])
- }
- return this.values.hwb;
- },
- cmykArray: function() {
- return this.values.cmyk;
- },
- rgbaArray: function() {
- var rgb = this.values.rgb;
- return rgb.concat([this.values.alpha]);
- },
- hslaArray: function() {
- var hsl = this.values.hsl;
- return hsl.concat([this.values.alpha]);
- },
- alpha: function(val) {
- if (val === undefined) {
- return this.values.alpha;
- }
- this.setValues("alpha", val);
- return this;
- },
- red: function(val) {
- return this.setChannel("rgb", 0, val);
- },
- green: function(val) {
- return this.setChannel("rgb", 1, val);
- },
- blue: function(val) {
- return this.setChannel("rgb", 2, val);
- },
- hue: function(val) {
- return this.setChannel("hsl", 0, val);
- },
- saturation: function(val) {
- return this.setChannel("hsl", 1, val);
- },
- lightness: function(val) {
- return this.setChannel("hsl", 2, val);
- },
- saturationv: function(val) {
- return this.setChannel("hsv", 1, val);
- },
- whiteness: function(val) {
- return this.setChannel("hwb", 1, val);
- },
- blackness: function(val) {
- return this.setChannel("hwb", 2, val);
- },
- value: function(val) {
- return this.setChannel("hsv", 2, val);
- },
- cyan: function(val) {
- return this.setChannel("cmyk", 0, val);
- },
- magenta: function(val) {
- return this.setChannel("cmyk", 1, val);
- },
- yellow: function(val) {
- return this.setChannel("cmyk", 2, val);
- },
- black: function(val) {
- return this.setChannel("cmyk", 3, val);
- },
- hexString: function() {
- return string.hexString(this.values.rgb);
- },
- rgbString: function() {
- return string.rgbString(this.values.rgb, this.values.alpha);
- },
- rgbaString: function() {
- return string.rgbaString(this.values.rgb, this.values.alpha);
- },
- percentString: function() {
- return string.percentString(this.values.rgb, this.values.alpha);
- },
- hslString: function() {
- return string.hslString(this.values.hsl, this.values.alpha);
- },
- hslaString: function() {
- return string.hslaString(this.values.hsl, this.values.alpha);
- },
- hwbString: function() {
- return string.hwbString(this.values.hwb, this.values.alpha);
- },
- keyword: function() {
- return string.keyword(this.values.rgb, this.values.alpha);
- },
- rgbNumber: function() {
- return (this.values.rgb[0] << 16) | (this.values.rgb[1] << 8) | this.values.rgb[2];
- },
- luminosity: function() {
- // http://www.w3.org/TR/WCAG20/#relativeluminancedef
- var rgb = this.values.rgb;
- var lum = [];
- for (var i = 0; i < rgb.length; i++) {
- var chan = rgb[i] / 255;
- lum[i] = (chan <= 0.03928) ? chan / 12.92
- : Math.pow(((chan + 0.055) / 1.055), 2.4)
- }
- return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
- },
- contrast: function(color2) {
- // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
- var lum1 = this.luminosity();
- var lum2 = color2.luminosity();
- if (lum1 > lum2) {
- return (lum1 + 0.05) / (lum2 + 0.05)
- };
- return (lum2 + 0.05) / (lum1 + 0.05);
- },
- level: function(color2) {
- var contrastRatio = this.contrast(color2);
- return (contrastRatio >= 7.1)
- ? 'AAA'
- : (contrastRatio >= 4.5)
- ? 'AA'
- : '';
- },
- dark: function() {
- // YIQ equation from http://24ways.org/2010/calculating-color-contrast
- var rgb = this.values.rgb,
- yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
- return yiq < 128;
- },
- light: function() {
- return !this.dark();
- },
- negate: function() {
- var rgb = []
- for (var i = 0; i < 3; i++) {
- rgb[i] = 255 - this.values.rgb[i];
- }
- this.setValues("rgb", rgb);
- return this;
- },
- lighten: function(ratio) {
- this.values.hsl[2] += this.values.hsl[2] * ratio;
- this.setValues("hsl", this.values.hsl);
- return this;
- },
- darken: function(ratio) {
- this.values.hsl[2] -= this.values.hsl[2] * ratio;
- this.setValues("hsl", this.values.hsl);
- return this;
- },
- saturate: function(ratio) {
- this.values.hsl[1] += this.values.hsl[1] * ratio;
- this.setValues("hsl", this.values.hsl);
- return this;
- },
- desaturate: function(ratio) {
- this.values.hsl[1] -= this.values.hsl[1] * ratio;
- this.setValues("hsl", this.values.hsl);
- return this;
- },
- whiten: function(ratio) {
- this.values.hwb[1] += this.values.hwb[1] * ratio;
- this.setValues("hwb", this.values.hwb);
- return this;
- },
- blacken: function(ratio) {
- this.values.hwb[2] += this.values.hwb[2] * ratio;
- this.setValues("hwb", this.values.hwb);
- return this;
- },
- greyscale: function() {
- var rgb = this.values.rgb;
- // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
- var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
- this.setValues("rgb", [val, val, val]);
- return this;
- },
- clearer: function(ratio) {
- this.setValues("alpha", this.values.alpha - (this.values.alpha * ratio));
- return this;
- },
- opaquer: function(ratio) {
- this.setValues("alpha", this.values.alpha + (this.values.alpha * ratio));
- return this;
- },
- rotate: function(degrees) {
- var hue = this.values.hsl[0];
- hue = (hue + degrees) % 360;
- hue = hue < 0 ? 360 + hue : hue;
- this.values.hsl[0] = hue;
- this.setValues("hsl", this.values.hsl);
- return this;
- },
- mix: function(color2, weight) {
- weight = 1 - (weight == null ? 0.5 : weight);
- // algorithm from Sass's mix(). Ratio of first color in mix is
- // determined by the alphas of both colors and the weight
- var t1 = weight * 2 - 1,
- d = this.alpha() - color2.alpha();
- var weight1 = (((t1 * d == -1) ? t1 : (t1 + d) / (1 + t1 * d)) + 1) / 2;
- var weight2 = 1 - weight1;
- var rgb = this.rgbArray();
- var rgb2 = color2.rgbArray();
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = rgb[i] * weight1 + rgb2[i] * weight2;
- }
- this.setValues("rgb", rgb);
- var alpha = this.alpha() * weight + color2.alpha() * (1 - weight);
- this.setValues("alpha", alpha);
- return this;
- },
- toJSON: function() {
- return this.rgb();
- },
- clone: function() {
- return new Color(this.rgb());
- }
- }
- Color.prototype.getValues = function(space) {
- var vals = {};
- for (var i = 0; i < space.length; i++) {
- vals[space.charAt(i)] = this.values[space][i];
- }
- if (this.values.alpha != 1) {
- vals["a"] = this.values.alpha;
- }
- // {r: 255, g: 255, b: 255, a: 0.4}
- return vals;
- }
- Color.prototype.setValues = function(space, vals) {
- var spaces = {
- "rgb": ["red", "green", "blue"],
- "hsl": ["hue", "saturation", "lightness"],
- "hsv": ["hue", "saturation", "value"],
- "hwb": ["hue", "whiteness", "blackness"],
- "cmyk": ["cyan", "magenta", "yellow", "black"]
- };
- var maxes = {
- "rgb": [255, 255, 255],
- "hsl": [360, 100, 100],
- "hsv": [360, 100, 100],
- "hwb": [360, 100, 100],
- "cmyk": [100, 100, 100, 100]
- };
- var alpha = 1;
- if (space == "alpha") {
- alpha = vals;
- }
- else if (vals.length) {
- // [10, 10, 10]
- this.values[space] = vals.slice(0, space.length);
- alpha = vals[space.length];
- }
- else if (vals[space.charAt(0)] !== undefined) {
- // {r: 10, g: 10, b: 10}
- for (var i = 0; i < space.length; i++) {
- this.values[space][i] = vals[space.charAt(i)];
- }
- alpha = vals.a;
- }
- else if (vals[spaces[space][0]] !== undefined) {
- // {red: 10, green: 10, blue: 10}
- var chans = spaces[space];
- for (var i = 0; i < space.length; i++) {
- this.values[space][i] = vals[chans[i]];
- }
- alpha = vals.alpha;
- }
- this.values.alpha = Math.max(0, Math.min(1, (alpha !== undefined ? alpha : this.values.alpha) ));
- if (space == "alpha") {
- return;
- }
- // cap values of the space prior converting all values
- for (var i = 0; i < space.length; i++) {
- var capped = Math.max(0, Math.min(maxes[space][i], this.values[space][i]));
- this.values[space][i] = Math.round(capped);
- }
- // convert to all the other color spaces
- for (var sname in spaces) {
- if (sname != space) {
- this.values[sname] = convert[space][sname](this.values[space])
- }
- // cap values
- for (var i = 0; i < sname.length; i++) {
- var capped = Math.max(0, Math.min(maxes[sname][i], this.values[sname][i]));
- this.values[sname][i] = Math.round(capped);
- }
- }
- return true;
- }
- Color.prototype.setSpace = function(space, args) {
- var vals = args[0];
- if (vals === undefined) {
- // color.rgb()
- return this.getValues(space);
- }
- // color.rgb(10, 10, 10)
- if (typeof vals == "number") {
- vals = Array.prototype.slice.call(args);
- }
- this.setValues(space, vals);
- return this;
- }
- Color.prototype.setChannel = function(space, index, val) {
- if (val === undefined) {
- // color.red()
- return this.values[space][index];
- }
- // color.red(100)
- this.values[space][index] = val;
- this.setValues(space, this.values[space]);
- return this;
- }
- module.exports = Color;
- },{"color-convert":3,"color-string":5}],7:[function(_dereq_,module,exports){
- 'use strict';
- var colorjs = _dereq_('color')
- , hex = _dereq_('text-hex');
- /**
- * Generate a color for a given name. But be reasonably smart about it by
- * understanding name spaces and coloring each namespace a bit lighter so they
- * still have the same base color as the root.
- *
- * @param {String} name The namespace
- * @returns {String} color
- * @api private
- */
- module.exports = function colorspace(namespace, delimiter) {
- namespace = namespace.split(delimiter || ':');
- for (var base = hex(namespace[0]), i = 0, l = namespace.length - 1; i < l; i++) {
- base = colorjs(base).mix(colorjs(hex(namespace[i + 1]))).saturate(1).hexString();
- }
- return base;
- };
- },{"color":6,"text-hex":11}],8:[function(_dereq_,module,exports){
- 'use strict';
- var env = _dereq_('env-variable');
- /**
- * Checks if a given namespace is allowed by the environment variables.
- *
- * @param {String} name namespace that should be included.
- * @param {Array} variables
- * @returns {Boolean}
- * @api public
- */
- module.exports = function enabled(name, variables) {
- var envy = env()
- , variable
- , i = 0;
- variables = variables || ['diagnostics', 'debug'];
- for (; i < variables.length; i++) {
- if ((variable = envy[variables[i]])) break;
- }
- if (!variable) return false;
- variables = variable.split(/[\s,]+/);
- i = 0;
- for (; i < variables.length; i++) {
- variable = variables[i].replace('*', '.*?');
- if ('-' === variable.charAt(0)) {
- if ((new RegExp('^'+ variable.substr(1) +'$')).test(name)) {
- return false;
- }
- continue;
- }
- if ((new RegExp('^'+ variable +'$')).test(name)) {
- return true;
- }
- }
- return false;
- };
- },{"env-variable":9}],9:[function(_dereq_,module,exports){
- (function (process){
- 'use strict';
- var has = Object.prototype.hasOwnProperty;
- /**
- * Gather environment variables from various locations.
- *
- * @param {Object} environment The default environment variables.
- * @returns {Object} environment.
- * @api public
- */
- function env(environment) {
- environment = environment || {};
- if ('object' === typeof process && 'object' === typeof process.env) {
- env.merge(environment, process.env);
- }
- if ('undefined' !== typeof window) {
- if ('string' === window.name && window.name.length) {
- env.merge(environment, env.parse(window.name));
- }
- if (window.localStorage) {
- try { env.merge(environment, env.parse(window.localStorage.env || window.localStorage.debug)); }
- catch (e) {}
- }
- if (
- 'object' === typeof window.location
- && 'string' === typeof window.location.hash
- && window.location.hash.length
- ) {
- env.merge(environment, env.parse(window.location.hash.charAt(0) === '#'
- ? window.location.hash.slice(1)
- : window.location.hash
- ));
- }
- }
- //
- // Also add lower case variants to the object for easy access.
- //
- var key, lower;
- for (key in environment) {
- lower = key.toLowerCase();
- if (!(lower in environment)) {
- environment[lower] = environment[key];
- }
- }
- return environment;
- }
- /**
- * A poor man's merge utility.
- *
- * @param {Object} base Object where the add object is merged in.
- * @param {Object} add Object that needs to be added to the base object.
- * @returns {Object} base
- * @api private
- */
- env.merge = function merge(base, add) {
- for (var key in add) {
- if (has.call(add, key)) {
- base[key] = add[key];
- }
- }
- return base;
- };
- /**
- * A poor man's query string parser.
- *
- * @param {String} query The query string that needs to be parsed.
- * @returns {Object} Key value mapped query string.
- * @api private
- */
- env.parse = function parse(query) {
- var parser = /([^=?&]+)=([^&]*)/g
- , result = {}
- , part;
- if (!query) return result;
- for (;
- part = parser.exec(query);
- result[decodeURIComponent(part[1])] = decodeURIComponent(part[2])
- );
- return result.env || result;
- };
- //
- // Expose the module
- //
- module.exports = env;
- }).call(this,_dereq_('_process'))
- },{"_process":10}],10:[function(_dereq_,module,exports){
- // shim for using process in browser
- var process = module.exports = {};
- // cached from whatever global is present so that test runners that stub it
- // don't break things. But we need to wrap it in a try catch in case it is
- // wrapped in strict mode code which doesn't define any globals. It's inside a
- // function because try/catches deoptimize in certain engines.
- var cachedSetTimeout;
- var cachedClearTimeout;
- function defaultSetTimout() {
- throw new Error('setTimeout has not been defined');
- }
- function defaultClearTimeout () {
- throw new Error('clearTimeout has not been defined');
- }
- (function () {
- try {
- if (typeof setTimeout === 'function') {
- cachedSetTimeout = setTimeout;
- } else {
- cachedSetTimeout = defaultSetTimout;
- }
- } catch (e) {
- cachedSetTimeout = defaultSetTimout;
- }
- try {
- if (typeof clearTimeout === 'function') {
- cachedClearTimeout = clearTimeout;
- } else {
- cachedClearTimeout = defaultClearTimeout;
- }
- } catch (e) {
- cachedClearTimeout = defaultClearTimeout;
- }
- } ())
- function runTimeout(fun) {
- if (cachedSetTimeout === setTimeout) {
- //normal enviroments in sane situations
- return setTimeout(fun, 0);
- }
- // if setTimeout wasn't available but was latter defined
- if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
- cachedSetTimeout = setTimeout;
- return setTimeout(fun, 0);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedSetTimeout(fun, 0);
- } catch(e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedSetTimeout.call(null, fun, 0);
- } catch(e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
- return cachedSetTimeout.call(this, fun, 0);
- }
- }
- }
- function runClearTimeout(marker) {
- if (cachedClearTimeout === clearTimeout) {
- //normal enviroments in sane situations
- return clearTimeout(marker);
- }
- // if clearTimeout wasn't available but was latter defined
- if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
- cachedClearTimeout = clearTimeout;
- return clearTimeout(marker);
- }
- try {
- // when when somebody has screwed with setTimeout but no I.E. maddness
- return cachedClearTimeout(marker);
- } catch (e){
- try {
- // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
- return cachedClearTimeout.call(null, marker);
- } catch (e){
- // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
- // Some versions of I.E. have different rules for clearTimeout vs setTimeout
- return cachedClearTimeout.call(this, marker);
- }
- }
- }
- var queue = [];
- var draining = false;
- var currentQueue;
- var queueIndex = -1;
- function cleanUpNextTick() {
- if (!draining || !currentQueue) {
- return;
- }
- draining = false;
- if (currentQueue.length) {
- queue = currentQueue.concat(queue);
- } else {
- queueIndex = -1;
- }
- if (queue.length) {
- drainQueue();
- }
- }
- function drainQueue() {
- if (draining) {
- return;
- }
- var timeout = runTimeout(cleanUpNextTick);
- draining = true;
- var len = queue.length;
- while(len) {
- currentQueue = queue;
- queue = [];
- while (++queueIndex < len) {
- if (currentQueue) {
- currentQueue[queueIndex].run();
- }
- }
- queueIndex = -1;
- len = queue.length;
- }
- currentQueue = null;
- draining = false;
- runClearTimeout(timeout);
- }
- process.nextTick = function (fun) {
- var args = new Array(arguments.length - 1);
- if (arguments.length > 1) {
- for (var i = 1; i < arguments.length; i++) {
- args[i - 1] = arguments[i];
- }
- }
- queue.push(new Item(fun, args));
- if (queue.length === 1 && !draining) {
- runTimeout(drainQueue);
- }
- };
- // v8 likes predictible objects
- function Item(fun, array) {
- this.fun = fun;
- this.array = array;
- }
- Item.prototype.run = function () {
- this.fun.apply(null, this.array);
- };
- process.title = 'browser';
- process.browser = true;
- process.env = {};
- process.argv = [];
- process.version = ''; // empty string to avoid regexp issues
- process.versions = {};
- function noop() {}
- process.on = noop;
- process.addListener = noop;
- process.once = noop;
- process.off = noop;
- process.removeListener = noop;
- process.removeAllListeners = noop;
- process.emit = noop;
- process.prependListener = noop;
- process.prependOnceListener = noop;
- process.listeners = function (name) { return [] }
- process.binding = function (name) {
- throw new Error('process.binding is not supported');
- };
- process.cwd = function () { return '/' };
- process.chdir = function (dir) {
- throw new Error('process.chdir is not supported');
- };
- process.umask = function() { return 0; };
- },{}],11:[function(_dereq_,module,exports){
- 'use strict';
- /***
- * Convert string to hex color.
- *
- * @param {String} str Text to hash and convert to hex.
- * @returns {String}
- * @api public
- */
- module.exports = function hex(str) {
- for (
- var i = 0, hash = 0;
- i < str.length;
- hash = str.charCodeAt(i++) + ((hash << 5) - hash)
- );
- var color = Math.floor(
- Math.abs(
- (Math.sin(hash) * 10000) % 1 * 16777216
- )
- ).toString(16);
- return '#' + Array(6 - color.length + 1).join('0') + color;
- };
- },{}]},{},[1])(1)
- });
|