Revision 5d20692e
Added by Andreas Kohlbecker over 8 years ago
themes/zen_dataportal/js/colorpicker/js/colorpicker.js | ||
---|---|---|
1 |
/**
|
|
2 |
*
|
|
3 |
* Color picker
|
|
4 |
* Author: Stefan Petre www.eyecon.ro
|
|
5 |
*
|
|
6 |
* Dual licensed under the MIT and GPL licenses
|
|
7 |
*
|
|
8 |
*/
|
|
9 |
(function ($) {
|
|
10 |
var ColorPicker = function () {
|
|
11 |
var
|
|
12 |
ids = {},
|
|
13 |
inAction,
|
|
14 |
charMin = 65,
|
|
15 |
visible,
|
|
16 |
tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>',
|
|
17 |
defaults = {
|
|
18 |
eventName: 'click',
|
|
19 |
onShow: function () {},
|
|
20 |
onBeforeShow: function(){},
|
|
21 |
onHide: function () {},
|
|
22 |
onChange: function () {},
|
|
23 |
onSubmit: function () {},
|
|
24 |
color: 'ff0000',
|
|
25 |
livePreview: true,
|
|
26 |
flat: false
|
|
27 |
},
|
|
28 |
fillRGBFields = function (hsb, cal) {
|
|
29 |
var rgb = HSBToRGB(hsb);
|
|
30 |
$(cal).data('colorpicker').fields
|
|
31 |
.eq(1).val(rgb.r).end()
|
|
32 |
.eq(2).val(rgb.g).end()
|
|
33 |
.eq(3).val(rgb.b).end();
|
|
34 |
},
|
|
35 |
fillHSBFields = function (hsb, cal) {
|
|
36 |
$(cal).data('colorpicker').fields
|
|
37 |
.eq(4).val(hsb.h).end()
|
|
38 |
.eq(5).val(hsb.s).end()
|
|
39 |
.eq(6).val(hsb.b).end();
|
|
40 |
},
|
|
41 |
fillHexFields = function (hsb, cal) {
|
|
42 |
$(cal).data('colorpicker').fields
|
|
43 |
.eq(0).val(HSBToHex(hsb)).end();
|
|
44 |
},
|
|
45 |
setSelector = function (hsb, cal) {
|
|
46 |
$(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100}));
|
|
47 |
$(cal).data('colorpicker').selectorIndic.css({
|
|
48 |
left: parseInt(150 * hsb.s/100, 10),
|
|
49 |
top: parseInt(150 * (100-hsb.b)/100, 10)
|
|
50 |
});
|
|
51 |
},
|
|
52 |
setHue = function (hsb, cal) {
|
|
53 |
$(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10));
|
|
54 |
},
|
|
55 |
setCurrentColor = function (hsb, cal) {
|
|
56 |
$(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb));
|
|
57 |
},
|
|
58 |
setNewColor = function (hsb, cal) {
|
|
59 |
$(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));
|
|
60 |
},
|
|
61 |
keyDown = function (ev) {
|
|
62 |
var pressedKey = ev.charCode || ev.keyCode || -1;
|
|
63 |
if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) {
|
|
64 |
return false;
|
|
65 |
}
|
|
66 |
var cal = $(this).parent().parent();
|
|
67 |
if (cal.data('colorpicker').livePreview === true) {
|
|
68 |
change.apply(this);
|
|
69 |
}
|
|
70 |
},
|
|
71 |
change = function (ev) {
|
|
72 |
var cal = $(this).parent().parent(), col;
|
|
73 |
if (this.parentNode.className.indexOf('_hex') > 0) {
|
|
74 |
cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value));
|
|
75 |
} else if (this.parentNode.className.indexOf('_hsb') > 0) {
|
|
76 |
cal.data('colorpicker').color = col = fixHSB({
|
|
77 |
h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10),
|
|
78 |
s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10),
|
|
79 |
b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10)
|
|
80 |
});
|
|
81 |
} else {
|
|
82 |
cal.data('colorpicker').color = col = RGBToHSB(fixRGB({
|
|
83 |
r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10),
|
|
84 |
g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10),
|
|
85 |
b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10)
|
|
86 |
}));
|
|
87 |
}
|
|
88 |
if (ev) {
|
|
89 |
fillRGBFields(col, cal.get(0));
|
|
90 |
fillHexFields(col, cal.get(0));
|
|
91 |
fillHSBFields(col, cal.get(0));
|
|
92 |
}
|
|
93 |
setSelector(col, cal.get(0));
|
|
94 |
setHue(col, cal.get(0));
|
|
95 |
setNewColor(col, cal.get(0));
|
|
96 |
cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]);
|
|
97 |
},
|
|
98 |
blur = function (ev) {
|
|
99 |
var cal = $(this).parent().parent();
|
|
100 |
cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus');
|
|
101 |
},
|
|
102 |
focus = function () {
|
|
103 |
charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65;
|
|
104 |
$(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus');
|
|
105 |
$(this).parent().addClass('colorpicker_focus');
|
|
106 |
},
|
|
107 |
downIncrement = function (ev) {
|
|
108 |
var field = $(this).parent().find('input').focus();
|
|
109 |
var current = {
|
|
110 |
el: $(this).parent().addClass('colorpicker_slider'),
|
|
111 |
max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),
|
|
112 |
y: ev.pageY,
|
|
113 |
field: field,
|
|
114 |
val: parseInt(field.val(), 10),
|
|
115 |
preview: $(this).parent().parent().data('colorpicker').livePreview
|
|
116 |
};
|
|
117 |
$(document).bind('mouseup', current, upIncrement);
|
|
118 |
$(document).bind('mousemove', current, moveIncrement);
|
|
119 |
},
|
|
120 |
moveIncrement = function (ev) {
|
|
121 |
ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10))));
|
|
122 |
if (ev.data.preview) {
|
|
123 |
change.apply(ev.data.field.get(0), [true]);
|
|
124 |
}
|
|
125 |
return false;
|
|
126 |
},
|
|
127 |
upIncrement = function (ev) {
|
|
128 |
change.apply(ev.data.field.get(0), [true]);
|
|
129 |
ev.data.el.removeClass('colorpicker_slider').find('input').focus();
|
|
130 |
$(document).unbind('mouseup', upIncrement);
|
|
131 |
$(document).unbind('mousemove', moveIncrement);
|
|
132 |
return false;
|
|
133 |
},
|
|
134 |
downHue = function (ev) {
|
|
135 |
var current = {
|
|
136 |
cal: $(this).parent(),
|
|
137 |
y: $(this).offset().top
|
|
138 |
};
|
|
139 |
current.preview = current.cal.data('colorpicker').livePreview;
|
|
140 |
$(document).bind('mouseup', current, upHue);
|
|
141 |
$(document).bind('mousemove', current, moveHue);
|
|
142 |
},
|
|
143 |
moveHue = function (ev) {
|
|
144 |
change.apply(
|
|
145 |
ev.data.cal.data('colorpicker')
|
|
146 |
.fields
|
|
147 |
.eq(4)
|
|
148 |
.val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10))
|
|
149 |
.get(0),
|
|
150 |
[ev.data.preview]
|
|
151 |
);
|
|
152 |
return false;
|
|
153 |
},
|
|
154 |
upHue = function (ev) {
|
|
155 |
fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
|
|
156 |
fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
|
|
157 |
$(document).unbind('mouseup', upHue);
|
|
158 |
$(document).unbind('mousemove', moveHue);
|
|
159 |
return false;
|
|
160 |
},
|
|
161 |
downSelector = function (ev) {
|
|
162 |
var current = {
|
|
163 |
cal: $(this).parent(),
|
|
164 |
pos: $(this).offset()
|
|
165 |
};
|
|
166 |
current.preview = current.cal.data('colorpicker').livePreview;
|
|
167 |
$(document).bind('mouseup', current, upSelector);
|
|
168 |
$(document).bind('mousemove', current, moveSelector);
|
|
169 |
},
|
|
170 |
moveSelector = function (ev) {
|
|
171 |
change.apply(
|
|
172 |
ev.data.cal.data('colorpicker')
|
|
173 |
.fields
|
|
174 |
.eq(6)
|
|
175 |
.val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10))
|
|
176 |
.end()
|
|
177 |
.eq(5)
|
|
178 |
.val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10))
|
|
179 |
.get(0),
|
|
180 |
[ev.data.preview]
|
|
181 |
);
|
|
182 |
return false;
|
|
183 |
},
|
|
184 |
upSelector = function (ev) {
|
|
185 |
fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
|
|
186 |
fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
|
|
187 |
$(document).unbind('mouseup', upSelector);
|
|
188 |
$(document).unbind('mousemove', moveSelector);
|
|
189 |
return false;
|
|
190 |
},
|
|
191 |
enterSubmit = function (ev) {
|
|
192 |
$(this).addClass('colorpicker_focus');
|
|
193 |
},
|
|
194 |
leaveSubmit = function (ev) {
|
|
195 |
$(this).removeClass('colorpicker_focus');
|
|
196 |
},
|
|
197 |
clickSubmit = function (ev) {
|
|
198 |
var cal = $(this).parent();
|
|
199 |
var col = cal.data('colorpicker').color;
|
|
200 |
cal.data('colorpicker').origColor = col;
|
|
201 |
setCurrentColor(col, cal.get(0));
|
|
202 |
cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el);
|
|
203 |
},
|
|
204 |
show = function (ev) {
|
|
205 |
var cal = $('#' + $(this).data('colorpickerId'));
|
|
206 |
cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]);
|
|
207 |
var pos = $(this).offset();
|
|
208 |
var viewPort = getViewport();
|
|
209 |
var top = pos.top + this.offsetHeight;
|
|
210 |
var left = pos.left;
|
|
211 |
if (top + 176 > viewPort.t + viewPort.h) {
|
|
212 |
top -= this.offsetHeight + 176;
|
|
213 |
}
|
|
214 |
if (left + 356 > viewPort.l + viewPort.w) {
|
|
215 |
left -= 356;
|
|
216 |
}
|
|
217 |
cal.css({left: left + 'px', top: top + 'px'});
|
|
218 |
if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) {
|
|
219 |
cal.show();
|
|
220 |
}
|
|
221 |
$(document).bind('mousedown', {cal: cal}, hide);
|
|
222 |
return false;
|
|
223 |
},
|
|
224 |
hide = function (ev) {
|
|
225 |
if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {
|
|
226 |
if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {
|
|
227 |
ev.data.cal.hide();
|
|
228 |
}
|
|
229 |
$(document).unbind('mousedown', hide);
|
|
230 |
}
|
|
231 |
},
|
|
232 |
isChildOf = function(parentEl, el, container) {
|
|
233 |
if (parentEl == el) {
|
|
234 |
return true;
|
|
235 |
}
|
|
236 |
if (parentEl.contains) {
|
|
237 |
return parentEl.contains(el);
|
|
238 |
}
|
|
239 |
if ( parentEl.compareDocumentPosition ) {
|
|
240 |
return !!(parentEl.compareDocumentPosition(el) & 16);
|
|
241 |
}
|
|
242 |
var prEl = el.parentNode;
|
|
243 |
while(prEl && prEl != container) {
|
|
244 |
if (prEl == parentEl)
|
|
245 |
return true;
|
|
246 |
prEl = prEl.parentNode;
|
|
247 |
}
|
|
248 |
return false;
|
|
249 |
},
|
|
250 |
getViewport = function () {
|
|
251 |
var m = document.compatMode == 'CSS1Compat';
|
|
252 |
return {
|
|
253 |
l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
|
|
254 |
t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),
|
|
255 |
w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),
|
|
256 |
h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)
|
|
257 |
};
|
|
258 |
},
|
|
259 |
fixHSB = function (hsb) {
|
|
260 |
return {
|
|
261 |
h: Math.min(360, Math.max(0, hsb.h)),
|
|
262 |
s: Math.min(100, Math.max(0, hsb.s)),
|
|
263 |
b: Math.min(100, Math.max(0, hsb.b))
|
|
264 |
};
|
|
265 |
},
|
|
266 |
fixRGB = function (rgb) {
|
|
267 |
return {
|
|
268 |
r: Math.min(255, Math.max(0, rgb.r)),
|
|
269 |
g: Math.min(255, Math.max(0, rgb.g)),
|
|
270 |
b: Math.min(255, Math.max(0, rgb.b))
|
|
271 |
};
|
|
272 |
},
|
|
273 |
fixHex = function (hex) {
|
|
274 |
var len = 6 - hex.length;
|
|
275 |
if (len > 0) {
|
|
276 |
var o = [];
|
|
277 |
for (var i=0; i<len; i++) {
|
|
278 |
o.push('0');
|
|
279 |
}
|
|
280 |
o.push(hex);
|
|
281 |
hex = o.join('');
|
|
282 |
}
|
|
283 |
return hex;
|
|
284 |
},
|
|
285 |
HexToRGB = function (hex) {
|
|
286 |
var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
|
|
287 |
return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)};
|
|
288 |
},
|
|
289 |
HexToHSB = function (hex) {
|
|
290 |
return RGBToHSB(HexToRGB(hex));
|
|
291 |
},
|
|
292 |
RGBToHSB = function (rgb) {
|
|
293 |
var hsb = {
|
|
294 |
h: 0,
|
|
295 |
s: 0,
|
|
296 |
b: 0
|
|
297 |
};
|
|
298 |
var min = Math.min(rgb.r, rgb.g, rgb.b);
|
|
299 |
var max = Math.max(rgb.r, rgb.g, rgb.b);
|
|
300 |
var delta = max - min;
|
|
301 |
hsb.b = max;
|
|
302 |
if (max != 0) {
|
|
303 |
|
|
304 |
}
|
|
305 |
hsb.s = max != 0 ? 255 * delta / max : 0;
|
|
306 |
if (hsb.s != 0) {
|
|
307 |
if (rgb.r == max) {
|
|
308 |
hsb.h = (rgb.g - rgb.b) / delta;
|
|
309 |
} else if (rgb.g == max) {
|
|
310 |
hsb.h = 2 + (rgb.b - rgb.r) / delta;
|
|
311 |
} else {
|
|
312 |
hsb.h = 4 + (rgb.r - rgb.g) / delta;
|
|
313 |
}
|
|
314 |
} else {
|
|
315 |
hsb.h = -1;
|
|
316 |
}
|
|
317 |
hsb.h *= 60;
|
|
318 |
if (hsb.h < 0) {
|
|
319 |
hsb.h += 360;
|
|
320 |
}
|
|
321 |
hsb.s *= 100/255;
|
|
322 |
hsb.b *= 100/255;
|
|
323 |
return hsb;
|
|
324 |
},
|
|
325 |
HSBToRGB = function (hsb) {
|
|
326 |
var rgb = {};
|
|
327 |
var h = Math.round(hsb.h);
|
|
328 |
var s = Math.round(hsb.s*255/100);
|
|
329 |
var v = Math.round(hsb.b*255/100);
|
|
330 |
if(s == 0) {
|
|
331 |
rgb.r = rgb.g = rgb.b = v;
|
|
332 |
} else {
|
|
333 |
var t1 = v;
|
|
334 |
var t2 = (255-s)*v/255;
|
|
335 |
var t3 = (t1-t2)*(h%60)/60;
|
|
336 |
if(h==360) h = 0;
|
|
337 |
if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3}
|
|
338 |
else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3}
|
|
339 |
else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3}
|
|
340 |
else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3}
|
|
341 |
else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3}
|
|
342 |
else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3}
|
|
343 |
else {rgb.r=0; rgb.g=0; rgb.b=0}
|
|
344 |
}
|
|
345 |
return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};
|
|
346 |
},
|
|
347 |
RGBToHex = function (rgb) {
|
|
348 |
var hex = [
|
|
349 |
rgb.r.toString(16),
|
|
350 |
rgb.g.toString(16),
|
|
351 |
rgb.b.toString(16)
|
|
352 |
];
|
|
353 |
$.each(hex, function (nr, val) {
|
|
354 |
if (val.length == 1) {
|
|
355 |
hex[nr] = '0' + val;
|
|
356 |
}
|
|
357 |
});
|
|
358 |
return hex.join('');
|
|
359 |
},
|
|
360 |
HSBToHex = function (hsb) {
|
|
361 |
return RGBToHex(HSBToRGB(hsb));
|
|
362 |
},
|
|
363 |
restoreOriginal = function () {
|
|
364 |
var cal = $(this).parent();
|
|
365 |
var col = cal.data('colorpicker').origColor;
|
|
366 |
cal.data('colorpicker').color = col;
|
|
367 |
fillRGBFields(col, cal.get(0));
|
|
368 |
fillHexFields(col, cal.get(0));
|
|
369 |
fillHSBFields(col, cal.get(0));
|
|
370 |
setSelector(col, cal.get(0));
|
|
371 |
setHue(col, cal.get(0));
|
|
372 |
setNewColor(col, cal.get(0));
|
|
373 |
};
|
|
374 |
return {
|
|
375 |
init: function (opt) {
|
|
376 |
opt = $.extend({}, defaults, opt||{});
|
|
377 |
if (typeof opt.color == 'string') {
|
|
378 |
opt.color = HexToHSB(opt.color);
|
|
379 |
} else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) {
|
|
380 |
opt.color = RGBToHSB(opt.color);
|
|
381 |
} else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) {
|
|
382 |
opt.color = fixHSB(opt.color);
|
|
383 |
} else {
|
|
384 |
return this;
|
|
385 |
}
|
|
386 |
return this.each(function () {
|
|
387 |
if (!$(this).data('colorpickerId')) {
|
|
388 |
var options = $.extend({}, opt);
|
|
389 |
options.origColor = opt.color;
|
|
390 |
var id = 'collorpicker_' + parseInt(Math.random() * 1000);
|
|
391 |
$(this).data('colorpickerId', id);
|
|
392 |
var cal = $(tpl).attr('id', id);
|
|
393 |
if (options.flat) {
|
|
394 |
cal.appendTo(this).show();
|
|
395 |
} else {
|
|
396 |
cal.appendTo(document.body);
|
|
397 |
}
|
|
398 |
options.fields = cal
|
|
399 |
.find('input')
|
|
400 |
.bind('keyup', keyDown)
|
|
401 |
.bind('change', change)
|
|
402 |
.bind('blur', blur)
|
|
403 |
.bind('focus', focus);
|
|
404 |
cal
|
|
405 |
.find('span').bind('mousedown', downIncrement).end()
|
|
406 |
.find('>div.colorpicker_current_color').bind('click', restoreOriginal);
|
|
407 |
options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector);
|
|
408 |
options.selectorIndic = options.selector.find('div div');
|
|
409 |
options.el = this;
|
|
410 |
options.hue = cal.find('div.colorpicker_hue div');
|
|
411 |
cal.find('div.colorpicker_hue').bind('mousedown', downHue);
|
|
412 |
options.newColor = cal.find('div.colorpicker_new_color');
|
|
413 |
options.currentColor = cal.find('div.colorpicker_current_color');
|
|
414 |
cal.data('colorpicker', options);
|
|
415 |
cal.find('div.colorpicker_submit')
|
|
416 |
.bind('mouseenter', enterSubmit)
|
|
417 |
.bind('mouseleave', leaveSubmit)
|
|
418 |
.bind('click', clickSubmit);
|
|
419 |
fillRGBFields(options.color, cal.get(0));
|
|
420 |
fillHSBFields(options.color, cal.get(0));
|
|
421 |
fillHexFields(options.color, cal.get(0));
|
|
422 |
setHue(options.color, cal.get(0));
|
|
423 |
setSelector(options.color, cal.get(0));
|
|
424 |
setCurrentColor(options.color, cal.get(0));
|
|
425 |
setNewColor(options.color, cal.get(0));
|
|
426 |
if (options.flat) {
|
|
427 |
cal.css({
|
|
428 |
position: 'relative',
|
|
429 |
display: 'block'
|
|
430 |
});
|
|
431 |
} else {
|
|
432 |
$(this).bind(options.eventName, show);
|
|
433 |
}
|
|
434 |
}
|
|
435 |
});
|
|
436 |
},
|
|
437 |
showPicker: function() {
|
|
438 |
return this.each( function () {
|
|
439 |
if ($(this).data('colorpickerId')) {
|
|
440 |
show.apply(this);
|
|
441 |
}
|
|
442 |
});
|
|
443 |
},
|
|
444 |
hidePicker: function() {
|
|
445 |
return this.each( function () {
|
|
446 |
if ($(this).data('colorpickerId')) {
|
|
447 |
$('#' + $(this).data('colorpickerId')).hide();
|
|
448 |
}
|
|
449 |
});
|
|
450 |
},
|
|
451 |
setColor: function(col) {
|
|
452 |
if (typeof col == 'string') {
|
|
453 |
col = HexToHSB(col);
|
|
454 |
} else if (col.r != undefined && col.g != undefined && col.b != undefined) {
|
|
455 |
col = RGBToHSB(col);
|
|
456 |
} else if (col.h != undefined && col.s != undefined && col.b != undefined) {
|
|
457 |
col = fixHSB(col);
|
|
458 |
} else {
|
|
459 |
return this;
|
|
460 |
}
|
|
461 |
return this.each(function(){
|
|
462 |
if ($(this).data('colorpickerId')) {
|
|
463 |
var cal = $('#' + $(this).data('colorpickerId'));
|
|
464 |
cal.data('colorpicker').color = col;
|
|
465 |
cal.data('colorpicker').origColor = col;
|
|
466 |
fillRGBFields(col, cal.get(0));
|
|
467 |
fillHSBFields(col, cal.get(0));
|
|
468 |
fillHexFields(col, cal.get(0));
|
|
469 |
setHue(col, cal.get(0));
|
|
470 |
setSelector(col, cal.get(0));
|
|
471 |
setCurrentColor(col, cal.get(0));
|
|
472 |
setNewColor(col, cal.get(0));
|
|
473 |
}
|
|
474 |
});
|
|
475 |
}
|
|
476 |
};
|
|
477 |
}();
|
|
478 |
$.fn.extend({
|
|
479 |
ColorPicker: ColorPicker.init,
|
|
480 |
ColorPickerHide: ColorPicker.hidePicker,
|
|
481 |
ColorPickerShow: ColorPicker.showPicker,
|
|
482 |
ColorPickerSetColor: ColorPicker.setColor
|
|
483 |
});
|
|
1 |
/** |
|
2 |
* |
|
3 |
* Color picker |
|
4 |
* Author: Stefan Petre www.eyecon.ro |
|
5 |
* |
|
6 |
* Dual licensed under the MIT and GPL licenses |
|
7 |
* |
|
8 |
*/ |
|
9 |
(function ($) { |
|
10 |
var ColorPicker = function () { |
|
11 |
var |
|
12 |
ids = {}, |
|
13 |
inAction, |
|
14 |
charMin = 65, |
|
15 |
visible, |
|
16 |
tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>', |
|
17 |
defaults = { |
|
18 |
eventName: 'click', |
|
19 |
onShow: function () {}, |
|
20 |
onBeforeShow: function(){}, |
|
21 |
onHide: function () {}, |
|
22 |
onChange: function () {}, |
|
23 |
onSubmit: function () {}, |
|
24 |
color: 'ff0000', |
|
25 |
livePreview: true, |
|
26 |
flat: false |
|
27 |
}, |
|
28 |
fillRGBFields = function (hsb, cal) { |
|
29 |
var rgb = HSBToRGB(hsb); |
|
30 |
$(cal).data('colorpicker').fields |
|
31 |
.eq(1).val(rgb.r).end() |
|
32 |
.eq(2).val(rgb.g).end() |
|
33 |
.eq(3).val(rgb.b).end(); |
|
34 |
}, |
|
35 |
fillHSBFields = function (hsb, cal) { |
|
36 |
$(cal).data('colorpicker').fields |
|
37 |
.eq(4).val(hsb.h).end() |
|
38 |
.eq(5).val(hsb.s).end() |
|
39 |
.eq(6).val(hsb.b).end(); |
|
40 |
}, |
|
41 |
fillHexFields = function (hsb, cal) { |
|
42 |
$(cal).data('colorpicker').fields |
|
43 |
.eq(0).val(HSBToHex(hsb)).end(); |
|
44 |
}, |
|
45 |
setSelector = function (hsb, cal) { |
|
46 |
$(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100})); |
|
47 |
$(cal).data('colorpicker').selectorIndic.css({ |
|
48 |
left: parseInt(150 * hsb.s/100, 10), |
|
49 |
top: parseInt(150 * (100-hsb.b)/100, 10) |
|
50 |
}); |
|
51 |
}, |
|
52 |
setHue = function (hsb, cal) { |
|
53 |
$(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10)); |
|
54 |
}, |
|
55 |
setCurrentColor = function (hsb, cal) { |
|
56 |
$(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb)); |
|
57 |
}, |
|
58 |
setNewColor = function (hsb, cal) { |
|
59 |
$(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb)); |
|
60 |
}, |
|
61 |
keyDown = function (ev) { |
|
62 |
var pressedKey = ev.charCode || ev.keyCode || -1; |
|
63 |
if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) { |
|
64 |
return false; |
|
65 |
} |
|
66 |
var cal = $(this).parent().parent(); |
|
67 |
if (cal.data('colorpicker').livePreview === true) { |
|
68 |
change.apply(this); |
|
69 |
} |
|
70 |
}, |
|
71 |
change = function (ev) { |
|
72 |
var cal = $(this).parent().parent(), col; |
|
73 |
if (this.parentNode.className.indexOf('_hex') > 0) { |
|
74 |
cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value)); |
|
75 |
} else if (this.parentNode.className.indexOf('_hsb') > 0) { |
|
76 |
cal.data('colorpicker').color = col = fixHSB({ |
|
77 |
h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10), |
|
78 |
s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10), |
|
79 |
b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10) |
|
80 |
}); |
|
81 |
} else { |
|
82 |
cal.data('colorpicker').color = col = RGBToHSB(fixRGB({ |
|
83 |
r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10), |
|
84 |
g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10), |
|
85 |
b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10) |
|
86 |
})); |
|
87 |
} |
|
88 |
if (ev) { |
|
89 |
fillRGBFields(col, cal.get(0)); |
|
90 |
fillHexFields(col, cal.get(0)); |
|
91 |
fillHSBFields(col, cal.get(0)); |
|
92 |
} |
|
93 |
setSelector(col, cal.get(0)); |
|
94 |
setHue(col, cal.get(0)); |
|
95 |
setNewColor(col, cal.get(0)); |
|
96 |
cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]); |
|
97 |
}, |
|
98 |
blur = function (ev) { |
|
99 |
var cal = $(this).parent().parent(); |
|
100 |
cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus'); |
|
101 |
}, |
|
102 |
focus = function () { |
|
103 |
charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65; |
|
104 |
$(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus'); |
|
105 |
$(this).parent().addClass('colorpicker_focus'); |
|
106 |
}, |
|
107 |
downIncrement = function (ev) { |
|
108 |
var field = $(this).parent().find('input').focus(); |
|
109 |
var current = { |
|
110 |
el: $(this).parent().addClass('colorpicker_slider'), |
|
111 |
max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255), |
|
112 |
y: ev.pageY, |
|
113 |
field: field, |
|
114 |
val: parseInt(field.val(), 10), |
|
115 |
preview: $(this).parent().parent().data('colorpicker').livePreview |
|
116 |
}; |
|
117 |
$(document).bind('mouseup', current, upIncrement); |
|
118 |
$(document).bind('mousemove', current, moveIncrement); |
|
119 |
}, |
|
120 |
moveIncrement = function (ev) { |
|
121 |
ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10)))); |
|
122 |
if (ev.data.preview) { |
|
123 |
change.apply(ev.data.field.get(0), [true]); |
|
124 |
} |
|
125 |
return false; |
|
126 |
}, |
|
127 |
upIncrement = function (ev) { |
|
128 |
change.apply(ev.data.field.get(0), [true]); |
|
129 |
ev.data.el.removeClass('colorpicker_slider').find('input').focus(); |
|
130 |
$(document).unbind('mouseup', upIncrement); |
|
131 |
$(document).unbind('mousemove', moveIncrement); |
|
132 |
return false; |
|
133 |
}, |
|
134 |
downHue = function (ev) { |
|
135 |
var current = { |
|
136 |
cal: $(this).parent(), |
|
137 |
y: $(this).offset().top |
|
138 |
}; |
|
139 |
current.preview = current.cal.data('colorpicker').livePreview; |
|
140 |
$(document).bind('mouseup', current, upHue); |
|
141 |
$(document).bind('mousemove', current, moveHue); |
|
142 |
}, |
|
143 |
moveHue = function (ev) { |
|
144 |
change.apply( |
|
145 |
ev.data.cal.data('colorpicker') |
|
146 |
.fields |
|
147 |
.eq(4) |
|
148 |
.val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10)) |
|
149 |
.get(0), |
|
150 |
[ev.data.preview] |
|
151 |
); |
|
152 |
return false; |
|
153 |
}, |
|
154 |
upHue = function (ev) { |
|
155 |
fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); |
|
156 |
fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); |
|
157 |
$(document).unbind('mouseup', upHue); |
|
158 |
$(document).unbind('mousemove', moveHue); |
|
159 |
return false; |
|
160 |
}, |
|
161 |
downSelector = function (ev) { |
|
162 |
var current = { |
|
163 |
cal: $(this).parent(), |
|
164 |
pos: $(this).offset() |
|
165 |
}; |
|
166 |
current.preview = current.cal.data('colorpicker').livePreview; |
|
167 |
$(document).bind('mouseup', current, upSelector); |
|
168 |
$(document).bind('mousemove', current, moveSelector); |
|
169 |
}, |
|
170 |
moveSelector = function (ev) { |
|
171 |
change.apply( |
|
172 |
ev.data.cal.data('colorpicker') |
|
173 |
.fields |
|
174 |
.eq(6) |
|
175 |
.val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10)) |
|
176 |
.end() |
|
177 |
.eq(5) |
|
178 |
.val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10)) |
|
179 |
.get(0), |
|
180 |
[ev.data.preview] |
|
181 |
); |
|
182 |
return false; |
|
183 |
}, |
|
184 |
upSelector = function (ev) { |
|
185 |
fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); |
|
186 |
fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0)); |
|
187 |
$(document).unbind('mouseup', upSelector); |
|
188 |
$(document).unbind('mousemove', moveSelector); |
|
189 |
return false; |
|
190 |
}, |
|
191 |
enterSubmit = function (ev) { |
|
192 |
$(this).addClass('colorpicker_focus'); |
|
193 |
}, |
|
194 |
leaveSubmit = function (ev) { |
|
195 |
$(this).removeClass('colorpicker_focus'); |
|
196 |
}, |
|
197 |
clickSubmit = function (ev) { |
|
198 |
var cal = $(this).parent(); |
|
199 |
var col = cal.data('colorpicker').color; |
|
200 |
cal.data('colorpicker').origColor = col; |
|
201 |
setCurrentColor(col, cal.get(0)); |
|
202 |
cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el); |
|
203 |
}, |
|
204 |
show = function (ev) { |
|
205 |
var cal = $('#' + $(this).data('colorpickerId')); |
|
206 |
cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]); |
|
207 |
var pos = $(this).offset(); |
|
208 |
var viewPort = getViewport(); |
|
209 |
var top = pos.top + this.offsetHeight; |
|
210 |
var left = pos.left; |
|
211 |
if (top + 176 > viewPort.t + viewPort.h) { |
|
212 |
top -= this.offsetHeight + 176; |
|
213 |
} |
|
214 |
if (left + 356 > viewPort.l + viewPort.w) { |
|
215 |
left -= 356; |
|
216 |
} |
|
217 |
cal.css({left: left + 'px', top: top + 'px'}); |
|
218 |
if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) { |
|
219 |
cal.show(); |
|
220 |
} |
|
221 |
$(document).bind('mousedown', {cal: cal}, hide); |
|
222 |
return false; |
|
223 |
}, |
|
224 |
hide = function (ev) { |
|
225 |
if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) { |
|
226 |
if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) { |
|
227 |
ev.data.cal.hide(); |
|
228 |
} |
|
229 |
$(document).unbind('mousedown', hide); |
|
230 |
} |
|
231 |
}, |
|
232 |
isChildOf = function(parentEl, el, container) { |
|
233 |
if (parentEl == el) { |
|
234 |
return true; |
|
235 |
} |
|
236 |
if (parentEl.contains) { |
|
237 |
return parentEl.contains(el); |
|
238 |
} |
|
239 |
if ( parentEl.compareDocumentPosition ) { |
|
240 |
return !!(parentEl.compareDocumentPosition(el) & 16); |
|
241 |
} |
|
242 |
var prEl = el.parentNode; |
|
243 |
while(prEl && prEl != container) { |
|
244 |
if (prEl == parentEl) |
|
245 |
return true; |
|
246 |
prEl = prEl.parentNode; |
|
247 |
} |
|
248 |
return false; |
|
249 |
}, |
|
250 |
getViewport = function () { |
|
251 |
var m = document.compatMode == 'CSS1Compat'; |
|
252 |
return { |
|
253 |
l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft), |
|
254 |
t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop), |
|
255 |
w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth), |
|
256 |
h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight) |
|
257 |
}; |
|
258 |
}, |
|
259 |
fixHSB = function (hsb) { |
|
260 |
return { |
|
261 |
h: Math.min(360, Math.max(0, hsb.h)), |
|
262 |
s: Math.min(100, Math.max(0, hsb.s)), |
|
263 |
b: Math.min(100, Math.max(0, hsb.b)) |
|
264 |
}; |
|
265 |
}, |
|
266 |
fixRGB = function (rgb) { |
|
267 |
return { |
|
268 |
r: Math.min(255, Math.max(0, rgb.r)), |
|
269 |
g: Math.min(255, Math.max(0, rgb.g)), |
|
270 |
b: Math.min(255, Math.max(0, rgb.b)) |
|
271 |
}; |
|
272 |
}, |
|
273 |
fixHex = function (hex) { |
|
274 |
var len = 6 - hex.length; |
|
275 |
if (len > 0) { |
|
276 |
var o = []; |
|
277 |
for (var i=0; i<len; i++) { |
|
278 |
o.push('0'); |
|
279 |
} |
|
280 |
o.push(hex); |
|
281 |
hex = o.join(''); |
|
282 |
} |
|
283 |
return hex; |
|
284 |
}, |
|
285 |
HexToRGB = function (hex) { |
|
286 |
var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16); |
|
287 |
return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)}; |
|
288 |
}, |
|
289 |
HexToHSB = function (hex) { |
|
290 |
return RGBToHSB(HexToRGB(hex)); |
|
291 |
}, |
|
292 |
RGBToHSB = function (rgb) { |
|
293 |
var hsb = { |
|
294 |
h: 0, |
|
295 |
s: 0, |
|
296 |
b: 0 |
|
297 |
}; |
|
298 |
var min = Math.min(rgb.r, rgb.g, rgb.b); |
|
299 |
var max = Math.max(rgb.r, rgb.g, rgb.b); |
|
300 |
var delta = max - min; |
|
301 |
hsb.b = max; |
|
302 |
if (max != 0) { |
|
303 |
|
|
304 |
} |
|
305 |
hsb.s = max != 0 ? 255 * delta / max : 0; |
|
306 |
if (hsb.s != 0) { |
|
307 |
if (rgb.r == max) { |
|
308 |
hsb.h = (rgb.g - rgb.b) / delta; |
|
309 |
} else if (rgb.g == max) { |
|
310 |
hsb.h = 2 + (rgb.b - rgb.r) / delta; |
|
311 |
} else { |
|
312 |
hsb.h = 4 + (rgb.r - rgb.g) / delta; |
|
313 |
} |
|
314 |
} else { |
|
315 |
hsb.h = -1; |
|
316 |
} |
|
317 |
hsb.h *= 60; |
|
318 |
if (hsb.h < 0) { |
|
319 |
hsb.h += 360; |
|
320 |
} |
|
321 |
hsb.s *= 100/255; |
|
322 |
hsb.b *= 100/255; |
|
323 |
return hsb; |
|
324 |
}, |
|
325 |
HSBToRGB = function (hsb) { |
|
326 |
var rgb = {}; |
|
327 |
var h = Math.round(hsb.h); |
|
328 |
var s = Math.round(hsb.s*255/100); |
|
329 |
var v = Math.round(hsb.b*255/100); |
|
330 |
if(s == 0) { |
|
331 |
rgb.r = rgb.g = rgb.b = v; |
|
332 |
} else { |
|
333 |
var t1 = v; |
|
334 |
var t2 = (255-s)*v/255; |
|
335 |
var t3 = (t1-t2)*(h%60)/60; |
|
336 |
if(h==360) h = 0; |
|
337 |
if(h<60) {rgb.r=t1; rgb.b=t2; rgb.g=t2+t3} |
|
338 |
else if(h<120) {rgb.g=t1; rgb.b=t2; rgb.r=t1-t3} |
|
339 |
else if(h<180) {rgb.g=t1; rgb.r=t2; rgb.b=t2+t3} |
|
340 |
else if(h<240) {rgb.b=t1; rgb.r=t2; rgb.g=t1-t3} |
|
341 |
else if(h<300) {rgb.b=t1; rgb.g=t2; rgb.r=t2+t3} |
|
342 |
else if(h<360) {rgb.r=t1; rgb.g=t2; rgb.b=t1-t3} |
|
343 |
else {rgb.r=0; rgb.g=0; rgb.b=0} |
|
344 |
} |
|
345 |
return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)}; |
|
346 |
}, |
|
347 |
RGBToHex = function (rgb) { |
|
348 |
var hex = [ |
|
349 |
rgb.r.toString(16), |
|
350 |
rgb.g.toString(16), |
|
351 |
rgb.b.toString(16) |
|
352 |
]; |
|
353 |
$.each(hex, function (nr, val) { |
|
354 |
if (val.length == 1) { |
|
355 |
hex[nr] = '0' + val; |
|
356 |
} |
|
357 |
}); |
|
358 |
return hex.join(''); |
|
359 |
}, |
|
360 |
HSBToHex = function (hsb) { |
|
361 |
return RGBToHex(HSBToRGB(hsb)); |
|
362 |
}, |
|
363 |
restoreOriginal = function () { |
|
364 |
var cal = $(this).parent(); |
|
365 |
var col = cal.data('colorpicker').origColor; |
|
366 |
cal.data('colorpicker').color = col; |
|
367 |
fillRGBFields(col, cal.get(0)); |
|
368 |
fillHexFields(col, cal.get(0)); |
|
369 |
fillHSBFields(col, cal.get(0)); |
|
370 |
setSelector(col, cal.get(0)); |
|
371 |
setHue(col, cal.get(0)); |
|
372 |
setNewColor(col, cal.get(0)); |
|
373 |
}; |
|
374 |
return { |
|
375 |
init: function (opt) { |
|
376 |
opt = $.extend({}, defaults, opt||{}); |
|
377 |
if (typeof opt.color == 'string') { |
|
378 |
opt.color = HexToHSB(opt.color); |
|
379 |
} else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) { |
|
380 |
opt.color = RGBToHSB(opt.color); |
|
381 |
} else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) { |
|
382 |
opt.color = fixHSB(opt.color); |
|
383 |
} else { |
|
384 |
return this; |
|
385 |
} |
|
386 |
return this.each(function () { |
|
387 |
if (!$(this).data('colorpickerId')) { |
|
388 |
var options = $.extend({}, opt); |
|
389 |
options.origColor = opt.color; |
|
390 |
var id = 'collorpicker_' + parseInt(Math.random() * 1000); |
|
391 |
$(this).data('colorpickerId', id); |
|
392 |
var cal = $(tpl).attr('id', id); |
|
393 |
if (options.flat) { |
|
394 |
cal.appendTo(this).show(); |
|
395 |
} else { |
|
396 |
cal.appendTo(document.body); |
|
397 |
} |
|
398 |
options.fields = cal |
|
399 |
.find('input') |
|
400 |
.bind('keyup', keyDown) |
|
401 |
.bind('change', change) |
|
402 |
.bind('blur', blur) |
|
403 |
.bind('focus', focus); |
|
404 |
cal |
|
405 |
.find('span').bind('mousedown', downIncrement).end() |
|
406 |
.find('>div.colorpicker_current_color').bind('click', restoreOriginal); |
|
407 |
options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector); |
|
408 |
options.selectorIndic = options.selector.find('div div'); |
|
409 |
options.el = this; |
|
410 |
options.hue = cal.find('div.colorpicker_hue div'); |
|
411 |
cal.find('div.colorpicker_hue').bind('mousedown', downHue); |
|
412 |
options.newColor = cal.find('div.colorpicker_new_color'); |
|
413 |
options.currentColor = cal.find('div.colorpicker_current_color'); |
|
414 |
cal.data('colorpicker', options); |
|
415 |
cal.find('div.colorpicker_submit') |
|
416 |
.bind('mouseenter', enterSubmit) |
|
417 |
.bind('mouseleave', leaveSubmit) |
|
418 |
.bind('click', clickSubmit); |
|
419 |
fillRGBFields(options.color, cal.get(0)); |
|
420 |
fillHSBFields(options.color, cal.get(0)); |
|
421 |
fillHexFields(options.color, cal.get(0)); |
|
422 |
setHue(options.color, cal.get(0)); |
|
423 |
setSelector(options.color, cal.get(0)); |
|
424 |
setCurrentColor(options.color, cal.get(0)); |
|
425 |
setNewColor(options.color, cal.get(0)); |
|
426 |
if (options.flat) { |
|
427 |
cal.css({ |
|
428 |
position: 'relative', |
|
429 |
display: 'block' |
|
430 |
}); |
|
431 |
} else { |
|
432 |
$(this).bind(options.eventName, show); |
|
433 |
} |
|
434 |
} |
|
435 |
}); |
|
436 |
}, |
|
437 |
showPicker: function() { |
|
438 |
return this.each( function () { |
|
439 |
if ($(this).data('colorpickerId')) { |
|
440 |
show.apply(this); |
|
441 |
} |
|
442 |
}); |
|
443 |
}, |
|
444 |
hidePicker: function() { |
|
445 |
return this.each( function () { |
|
446 |
if ($(this).data('colorpickerId')) { |
|
447 |
$('#' + $(this).data('colorpickerId')).hide(); |
|
448 |
} |
|
449 |
}); |
|
450 |
}, |
|
451 |
setColor: function(col) { |
|
452 |
if (typeof col == 'string') { |
|
453 |
col = HexToHSB(col); |
|
454 |
} else if (col.r != undefined && col.g != undefined && col.b != undefined) { |
|
455 |
col = RGBToHSB(col); |
|
456 |
} else if (col.h != undefined && col.s != undefined && col.b != undefined) { |
|
457 |
col = fixHSB(col); |
|
458 |
} else { |
|
459 |
return this; |
|
460 |
} |
|
461 |
return this.each(function(){ |
|
462 |
if ($(this).data('colorpickerId')) { |
|
463 |
var cal = $('#' + $(this).data('colorpickerId')); |
|
464 |
cal.data('colorpicker').color = col; |
|
465 |
cal.data('colorpicker').origColor = col; |
|
466 |
fillRGBFields(col, cal.get(0)); |
|
467 |
fillHSBFields(col, cal.get(0)); |
|
468 |
fillHexFields(col, cal.get(0)); |
|
469 |
setHue(col, cal.get(0)); |
|
470 |
setSelector(col, cal.get(0)); |
|
471 |
setCurrentColor(col, cal.get(0)); |
|
472 |
setNewColor(col, cal.get(0)); |
|
473 |
} |
|
474 |
}); |
|
475 |
} |
|
476 |
}; |
|
477 |
}(); |
|
478 |
$.fn.extend({ |
|
479 |
ColorPicker: ColorPicker.init, |
|
480 |
ColorPickerHide: ColorPicker.hidePicker, |
|
481 |
ColorPickerShow: ColorPicker.showPicker, |
|
482 |
ColorPickerSetColor: ColorPicker.setColor |
|
483 |
}); |
|
484 | 484 |
})(jQuery) |
Also available in: Unified diff
Normalize all the line endings