Commit | Line | Data |
---|---|---|
f474c2a3 DV |
1 | /**\r |
2 | * A class to parse color values\r | |
3 | *\r | |
4 | * NOTE: modified by danvk. I removed the "getHelpXML" function to reduce the\r | |
5 | * file size.\r | |
6 | *\r | |
7 | * @author Stoyan Stefanov <sstoo@gmail.com>\r | |
8 | * @link http://www.phpied.com/rgb-color-parser-in-javascript/\r | |
9 | * @license Use it if you like it\r | |
10 | */\r | |
11 | function RGBColor(color_string)\r | |
12 | {\r | |
13 | this.ok = false;\r | |
14 | \r | |
15 | // strip any leading #\r | |
16 | if (color_string.charAt(0) == '#') { // remove # if any\r | |
17 | color_string = color_string.substr(1,6);\r | |
18 | }\r | |
19 | \r | |
20 | color_string = color_string.replace(/ /g,'');\r | |
21 | color_string = color_string.toLowerCase();\r | |
22 | \r | |
23 | // before getting into regexps, try simple matches\r | |
24 | // and overwrite the input\r | |
25 | var simple_colors = {\r | |
26 | aliceblue: 'f0f8ff',\r | |
27 | antiquewhite: 'faebd7',\r | |
28 | aqua: '00ffff',\r | |
29 | aquamarine: '7fffd4',\r | |
30 | azure: 'f0ffff',\r | |
31 | beige: 'f5f5dc',\r | |
32 | bisque: 'ffe4c4',\r | |
33 | black: '000000',\r | |
34 | blanchedalmond: 'ffebcd',\r | |
35 | blue: '0000ff',\r | |
36 | blueviolet: '8a2be2',\r | |
37 | brown: 'a52a2a',\r | |
38 | burlywood: 'deb887',\r | |
39 | cadetblue: '5f9ea0',\r | |
40 | chartreuse: '7fff00',\r | |
41 | chocolate: 'd2691e',\r | |
42 | coral: 'ff7f50',\r | |
43 | cornflowerblue: '6495ed',\r | |
44 | cornsilk: 'fff8dc',\r | |
45 | crimson: 'dc143c',\r | |
46 | cyan: '00ffff',\r | |
47 | darkblue: '00008b',\r | |
48 | darkcyan: '008b8b',\r | |
49 | darkgoldenrod: 'b8860b',\r | |
50 | darkgray: 'a9a9a9',\r | |
51 | darkgreen: '006400',\r | |
52 | darkkhaki: 'bdb76b',\r | |
53 | darkmagenta: '8b008b',\r | |
54 | darkolivegreen: '556b2f',\r | |
55 | darkorange: 'ff8c00',\r | |
56 | darkorchid: '9932cc',\r | |
57 | darkred: '8b0000',\r | |
58 | darksalmon: 'e9967a',\r | |
59 | darkseagreen: '8fbc8f',\r | |
60 | darkslateblue: '483d8b',\r | |
61 | darkslategray: '2f4f4f',\r | |
62 | darkturquoise: '00ced1',\r | |
63 | darkviolet: '9400d3',\r | |
64 | deeppink: 'ff1493',\r | |
65 | deepskyblue: '00bfff',\r | |
66 | dimgray: '696969',\r | |
67 | dodgerblue: '1e90ff',\r | |
68 | feldspar: 'd19275',\r | |
69 | firebrick: 'b22222',\r | |
70 | floralwhite: 'fffaf0',\r | |
71 | forestgreen: '228b22',\r | |
72 | fuchsia: 'ff00ff',\r | |
73 | gainsboro: 'dcdcdc',\r | |
74 | ghostwhite: 'f8f8ff',\r | |
75 | gold: 'ffd700',\r | |
76 | goldenrod: 'daa520',\r | |
77 | gray: '808080',\r | |
78 | green: '008000',\r | |
79 | greenyellow: 'adff2f',\r | |
80 | honeydew: 'f0fff0',\r | |
81 | hotpink: 'ff69b4',\r | |
82 | indianred : 'cd5c5c',\r | |
83 | indigo : '4b0082',\r | |
84 | ivory: 'fffff0',\r | |
85 | khaki: 'f0e68c',\r | |
86 | lavender: 'e6e6fa',\r | |
87 | lavenderblush: 'fff0f5',\r | |
88 | lawngreen: '7cfc00',\r | |
89 | lemonchiffon: 'fffacd',\r | |
90 | lightblue: 'add8e6',\r | |
91 | lightcoral: 'f08080',\r | |
92 | lightcyan: 'e0ffff',\r | |
93 | lightgoldenrodyellow: 'fafad2',\r | |
94 | lightgrey: 'd3d3d3',\r | |
95 | lightgreen: '90ee90',\r | |
96 | lightpink: 'ffb6c1',\r | |
97 | lightsalmon: 'ffa07a',\r | |
98 | lightseagreen: '20b2aa',\r | |
99 | lightskyblue: '87cefa',\r | |
100 | lightslateblue: '8470ff',\r | |
101 | lightslategray: '778899',\r | |
102 | lightsteelblue: 'b0c4de',\r | |
103 | lightyellow: 'ffffe0',\r | |
104 | lime: '00ff00',\r | |
105 | limegreen: '32cd32',\r | |
106 | linen: 'faf0e6',\r | |
107 | magenta: 'ff00ff',\r | |
108 | maroon: '800000',\r | |
109 | mediumaquamarine: '66cdaa',\r | |
110 | mediumblue: '0000cd',\r | |
111 | mediumorchid: 'ba55d3',\r | |
112 | mediumpurple: '9370d8',\r | |
113 | mediumseagreen: '3cb371',\r | |
114 | mediumslateblue: '7b68ee',\r | |
115 | mediumspringgreen: '00fa9a',\r | |
116 | mediumturquoise: '48d1cc',\r | |
117 | mediumvioletred: 'c71585',\r | |
118 | midnightblue: '191970',\r | |
119 | mintcream: 'f5fffa',\r | |
120 | mistyrose: 'ffe4e1',\r | |
121 | moccasin: 'ffe4b5',\r | |
122 | navajowhite: 'ffdead',\r | |
123 | navy: '000080',\r | |
124 | oldlace: 'fdf5e6',\r | |
125 | olive: '808000',\r | |
126 | olivedrab: '6b8e23',\r | |
127 | orange: 'ffa500',\r | |
128 | orangered: 'ff4500',\r | |
129 | orchid: 'da70d6',\r | |
130 | palegoldenrod: 'eee8aa',\r | |
131 | palegreen: '98fb98',\r | |
132 | paleturquoise: 'afeeee',\r | |
133 | palevioletred: 'd87093',\r | |
134 | papayawhip: 'ffefd5',\r | |
135 | peachpuff: 'ffdab9',\r | |
136 | peru: 'cd853f',\r | |
137 | pink: 'ffc0cb',\r | |
138 | plum: 'dda0dd',\r | |
139 | powderblue: 'b0e0e6',\r | |
140 | purple: '800080',\r | |
141 | red: 'ff0000',\r | |
142 | rosybrown: 'bc8f8f',\r | |
143 | royalblue: '4169e1',\r | |
144 | saddlebrown: '8b4513',\r | |
145 | salmon: 'fa8072',\r | |
146 | sandybrown: 'f4a460',\r | |
147 | seagreen: '2e8b57',\r | |
148 | seashell: 'fff5ee',\r | |
149 | sienna: 'a0522d',\r | |
150 | silver: 'c0c0c0',\r | |
151 | skyblue: '87ceeb',\r | |
152 | slateblue: '6a5acd',\r | |
153 | slategray: '708090',\r | |
154 | snow: 'fffafa',\r | |
155 | springgreen: '00ff7f',\r | |
156 | steelblue: '4682b4',\r | |
157 | tan: 'd2b48c',\r | |
158 | teal: '008080',\r | |
159 | thistle: 'd8bfd8',\r | |
160 | tomato: 'ff6347',\r | |
161 | turquoise: '40e0d0',\r | |
162 | violet: 'ee82ee',\r | |
163 | violetred: 'd02090',\r | |
164 | wheat: 'f5deb3',\r | |
165 | white: 'ffffff',\r | |
166 | whitesmoke: 'f5f5f5',\r | |
167 | yellow: 'ffff00',\r | |
168 | yellowgreen: '9acd32'\r | |
169 | };\r | |
170 | for (var key in simple_colors) {\r | |
171 | if (color_string == key) {\r | |
172 | color_string = simple_colors[key];\r | |
173 | }\r | |
174 | }\r | |
175 | // emd of simple type-in colors\r | |
176 | \r | |
177 | // array of color definition objects\r | |
178 | var color_defs = [\r | |
179 | {\r | |
180 | re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,\r | |
181 | example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],\r | |
182 | process: function (bits){\r | |
183 | return [\r | |
184 | parseInt(bits[1]),\r | |
185 | parseInt(bits[2]),\r | |
186 | parseInt(bits[3])\r | |
187 | ];\r | |
188 | }\r | |
189 | },\r | |
190 | {\r | |
191 | re: /^(\w{2})(\w{2})(\w{2})$/,\r | |
192 | example: ['#00ff00', '336699'],\r | |
193 | process: function (bits){\r | |
194 | return [\r | |
195 | parseInt(bits[1], 16),\r | |
196 | parseInt(bits[2], 16),\r | |
197 | parseInt(bits[3], 16)\r | |
198 | ];\r | |
199 | }\r | |
200 | },\r | |
201 | {\r | |
202 | re: /^(\w{1})(\w{1})(\w{1})$/,\r | |
203 | example: ['#fb0', 'f0f'],\r | |
204 | process: function (bits){\r | |
205 | return [\r | |
206 | parseInt(bits[1] + bits[1], 16),\r | |
207 | parseInt(bits[2] + bits[2], 16),\r | |
208 | parseInt(bits[3] + bits[3], 16)\r | |
209 | ];\r | |
210 | }\r | |
211 | }\r | |
212 | ];\r | |
213 | \r | |
214 | // search through the definitions to find a match\r | |
215 | for (var i = 0; i < color_defs.length; i++) {\r | |
216 | var re = color_defs[i].re;\r | |
217 | var processor = color_defs[i].process;\r | |
218 | var bits = re.exec(color_string);\r | |
219 | if (bits) {\r | |
220 | channels = processor(bits);\r | |
221 | this.r = channels[0];\r | |
222 | this.g = channels[1];\r | |
223 | this.b = channels[2];\r | |
224 | this.ok = true;\r | |
225 | }\r | |
226 | \r | |
227 | }\r | |
228 | \r | |
229 | // validate/cleanup values\r | |
230 | this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);\r | |
231 | this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);\r | |
232 | this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);\r | |
233 | \r | |
234 | // some getters\r | |
235 | this.toRGB = function () {\r | |
236 | return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';\r | |
237 | }\r | |
238 | this.toHex = function () {\r | |
239 | var r = this.r.toString(16);\r | |
240 | var g = this.g.toString(16);\r | |
241 | var b = this.b.toString(16);\r | |
242 | if (r.length == 1) r = '0' + r;\r | |
243 | if (g.length == 1) g = '0' + g;\r | |
244 | if (b.length == 1) b = '0' + b;\r | |
245 | return '#' + r + g + b;\r | |
246 | }\r | |
247 | \r | |
248 | \r | |
249 | }\r | |
250 | \r |