colors.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. /*
  2. Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojo.colors"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
  7. dojo._hasResource["dojo.colors"] = true;
  8. dojo.provide("dojo.colors");
  9. dojo.getObject("colors", true, dojo);
  10. //TODO: this module appears to break naming conventions
  11. /*=====
  12. dojo.colors = {
  13. // summary: Color utilities
  14. }
  15. =====*/
  16. (function(){
  17. // this is a standard conversion prescribed by the CSS3 Color Module
  18. var hue2rgb = function(m1, m2, h){
  19. if(h < 0){ ++h; }
  20. if(h > 1){ --h; }
  21. var h6 = 6 * h;
  22. if(h6 < 1){ return m1 + (m2 - m1) * h6; }
  23. if(2 * h < 1){ return m2; }
  24. if(3 * h < 2){ return m1 + (m2 - m1) * (2 / 3 - h) * 6; }
  25. return m1;
  26. };
  27. dojo.colorFromRgb = function(/*String*/ color, /*dojo.Color?*/ obj){
  28. // summary:
  29. // get rgb(a) array from css-style color declarations
  30. // description:
  31. // this function can handle all 4 CSS3 Color Module formats: rgb,
  32. // rgba, hsl, hsla, including rgb(a) with percentage values.
  33. var m = color.toLowerCase().match(/^(rgba?|hsla?)\(([\s\.\-,%0-9]+)\)/);
  34. if(m){
  35. var c = m[2].split(/\s*,\s*/), l = c.length, t = m[1], a;
  36. if((t == "rgb" && l == 3) || (t == "rgba" && l == 4)){
  37. var r = c[0];
  38. if(r.charAt(r.length - 1) == "%"){
  39. // 3 rgb percentage values
  40. a = dojo.map(c, function(x){
  41. return parseFloat(x) * 2.56;
  42. });
  43. if(l == 4){ a[3] = c[3]; }
  44. return dojo.colorFromArray(a, obj); // dojo.Color
  45. }
  46. return dojo.colorFromArray(c, obj); // dojo.Color
  47. }
  48. if((t == "hsl" && l == 3) || (t == "hsla" && l == 4)){
  49. // normalize hsl values
  50. var H = ((parseFloat(c[0]) % 360) + 360) % 360 / 360,
  51. S = parseFloat(c[1]) / 100,
  52. L = parseFloat(c[2]) / 100,
  53. // calculate rgb according to the algorithm
  54. // recommended by the CSS3 Color Module
  55. m2 = L <= 0.5 ? L * (S + 1) : L + S - L * S,
  56. m1 = 2 * L - m2;
  57. a = [
  58. hue2rgb(m1, m2, H + 1 / 3) * 256,
  59. hue2rgb(m1, m2, H) * 256,
  60. hue2rgb(m1, m2, H - 1 / 3) * 256,
  61. 1
  62. ];
  63. if(l == 4){ a[3] = c[3]; }
  64. return dojo.colorFromArray(a, obj); // dojo.Color
  65. }
  66. }
  67. return null; // dojo.Color
  68. };
  69. var confine = function(c, low, high){
  70. // summary:
  71. // sanitize a color component by making sure it is a number,
  72. // and clamping it to valid values
  73. c = Number(c);
  74. return isNaN(c) ? high : c < low ? low : c > high ? high : c; // Number
  75. };
  76. dojo.Color.prototype.sanitize = function(){
  77. // summary: makes sure that the object has correct attributes
  78. var t = this;
  79. t.r = Math.round(confine(t.r, 0, 255));
  80. t.g = Math.round(confine(t.g, 0, 255));
  81. t.b = Math.round(confine(t.b, 0, 255));
  82. t.a = confine(t.a, 0, 1);
  83. return this; // dojo.Color
  84. };
  85. })();
  86. dojo.colors.makeGrey = function(/*Number*/ g, /*Number?*/ a){
  87. // summary: creates a greyscale color with an optional alpha
  88. return dojo.colorFromArray([g, g, g, a]);
  89. };
  90. // mixin all CSS3 named colors not already in _base, along with SVG 1.0 variant spellings
  91. dojo.mixin(dojo.Color.named, {
  92. aliceblue: [240,248,255],
  93. antiquewhite: [250,235,215],
  94. aquamarine: [127,255,212],
  95. azure: [240,255,255],
  96. beige: [245,245,220],
  97. bisque: [255,228,196],
  98. blanchedalmond: [255,235,205],
  99. blueviolet: [138,43,226],
  100. brown: [165,42,42],
  101. burlywood: [222,184,135],
  102. cadetblue: [95,158,160],
  103. chartreuse: [127,255,0],
  104. chocolate: [210,105,30],
  105. coral: [255,127,80],
  106. cornflowerblue: [100,149,237],
  107. cornsilk: [255,248,220],
  108. crimson: [220,20,60],
  109. cyan: [0,255,255],
  110. darkblue: [0,0,139],
  111. darkcyan: [0,139,139],
  112. darkgoldenrod: [184,134,11],
  113. darkgray: [169,169,169],
  114. darkgreen: [0,100,0],
  115. darkgrey: [169,169,169],
  116. darkkhaki: [189,183,107],
  117. darkmagenta: [139,0,139],
  118. darkolivegreen: [85,107,47],
  119. darkorange: [255,140,0],
  120. darkorchid: [153,50,204],
  121. darkred: [139,0,0],
  122. darksalmon: [233,150,122],
  123. darkseagreen: [143,188,143],
  124. darkslateblue: [72,61,139],
  125. darkslategray: [47,79,79],
  126. darkslategrey: [47,79,79],
  127. darkturquoise: [0,206,209],
  128. darkviolet: [148,0,211],
  129. deeppink: [255,20,147],
  130. deepskyblue: [0,191,255],
  131. dimgray: [105,105,105],
  132. dimgrey: [105,105,105],
  133. dodgerblue: [30,144,255],
  134. firebrick: [178,34,34],
  135. floralwhite: [255,250,240],
  136. forestgreen: [34,139,34],
  137. gainsboro: [220,220,220],
  138. ghostwhite: [248,248,255],
  139. gold: [255,215,0],
  140. goldenrod: [218,165,32],
  141. greenyellow: [173,255,47],
  142. grey: [128,128,128],
  143. honeydew: [240,255,240],
  144. hotpink: [255,105,180],
  145. indianred: [205,92,92],
  146. indigo: [75,0,130],
  147. ivory: [255,255,240],
  148. khaki: [240,230,140],
  149. lavender: [230,230,250],
  150. lavenderblush: [255,240,245],
  151. lawngreen: [124,252,0],
  152. lemonchiffon: [255,250,205],
  153. lightblue: [173,216,230],
  154. lightcoral: [240,128,128],
  155. lightcyan: [224,255,255],
  156. lightgoldenrodyellow: [250,250,210],
  157. lightgray: [211,211,211],
  158. lightgreen: [144,238,144],
  159. lightgrey: [211,211,211],
  160. lightpink: [255,182,193],
  161. lightsalmon: [255,160,122],
  162. lightseagreen: [32,178,170],
  163. lightskyblue: [135,206,250],
  164. lightslategray: [119,136,153],
  165. lightslategrey: [119,136,153],
  166. lightsteelblue: [176,196,222],
  167. lightyellow: [255,255,224],
  168. limegreen: [50,205,50],
  169. linen: [250,240,230],
  170. magenta: [255,0,255],
  171. mediumaquamarine: [102,205,170],
  172. mediumblue: [0,0,205],
  173. mediumorchid: [186,85,211],
  174. mediumpurple: [147,112,219],
  175. mediumseagreen: [60,179,113],
  176. mediumslateblue: [123,104,238],
  177. mediumspringgreen: [0,250,154],
  178. mediumturquoise: [72,209,204],
  179. mediumvioletred: [199,21,133],
  180. midnightblue: [25,25,112],
  181. mintcream: [245,255,250],
  182. mistyrose: [255,228,225],
  183. moccasin: [255,228,181],
  184. navajowhite: [255,222,173],
  185. oldlace: [253,245,230],
  186. olivedrab: [107,142,35],
  187. orange: [255,165,0],
  188. orangered: [255,69,0],
  189. orchid: [218,112,214],
  190. palegoldenrod: [238,232,170],
  191. palegreen: [152,251,152],
  192. paleturquoise: [175,238,238],
  193. palevioletred: [219,112,147],
  194. papayawhip: [255,239,213],
  195. peachpuff: [255,218,185],
  196. peru: [205,133,63],
  197. pink: [255,192,203],
  198. plum: [221,160,221],
  199. powderblue: [176,224,230],
  200. rosybrown: [188,143,143],
  201. royalblue: [65,105,225],
  202. saddlebrown: [139,69,19],
  203. salmon: [250,128,114],
  204. sandybrown: [244,164,96],
  205. seagreen: [46,139,87],
  206. seashell: [255,245,238],
  207. sienna: [160,82,45],
  208. skyblue: [135,206,235],
  209. slateblue: [106,90,205],
  210. slategray: [112,128,144],
  211. slategrey: [112,128,144],
  212. snow: [255,250,250],
  213. springgreen: [0,255,127],
  214. steelblue: [70,130,180],
  215. tan: [210,180,140],
  216. thistle: [216,191,216],
  217. tomato: [255,99,71],
  218. transparent: [0, 0, 0, 0],
  219. turquoise: [64,224,208],
  220. violet: [238,130,238],
  221. wheat: [245,222,179],
  222. whitesmoke: [245,245,245],
  223. yellowgreen: [154,205,50]
  224. });
  225. }