wcolorpicker-rails 1.1 → 1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
  module Wcolorpicker
2
2
  module Rails
3
- VERSION = "1.1"
3
+ VERSION = "1.2"
4
4
  end
5
5
  end
@@ -8,350 +8,353 @@
8
8
  * @license This websanova color picker jQuery plug-in is dual licensed under the MIT and GPL licenses.
9
9
  * @link http://www.websanova.com
10
10
  * @docs http://www.websanova.com/plugins/websanova/color-picker
11
- * @version Version 1.1
11
+ * @version Version 1.2
12
12
  *
13
13
  ******************************************/
14
14
  (function($)
15
15
  {
16
- var defaultSettings = {
17
- color : 'black', // colors - black, white, cream, red, green, blue, yellow, orange, plum
18
- opacity : 0.8, // opacity level
19
- initColor : '#FF0000', // initial colour to set palette to
20
- mode : 'flat', // flat mode inserts the palette to container, other modes insert button into container - hover, click
21
- buttonSize : 20, // size of button if mode is ohter than flat
22
- effect : 'slide', // none/slide/fade
23
- showSpeed : 500, // time to run the effects on show
24
- hideSpeed : 500, // time to run the effects on hide
25
- onMouseover : null, // function to run when palette color is moused over
26
- onMouseout : null, // function to run when palette color is moused out
27
- onSelect : null // function to run when palette color is selected
28
- };
29
-
30
- $.fn.wColorPicker = function(settings)
31
- {
32
- settings = $.extend({}, defaultSettings, settings || {});
33
-
34
- return this.each(function()
35
- {
36
- var elem = $(this);
37
-
38
- var cp = new ColorPicker(settings);
39
-
40
- cp.generate();
41
-
42
- cp.appendToElement(elem);
43
-
44
- cp.colorSelect(cp, settings.initColor);
45
- });
46
- };
47
-
48
- /**
49
- * ColorPicker class definition
50
- */
51
- function ColorPicker(settings)
52
- {
53
- this.colorPicker = null;
54
- this.settings = settings;
55
- this.currentColor = settings.initColor;
56
-
57
- this.height = null; // init this, need to get height/width proper while element is still showing
58
- this.width = null;
59
- this.slideTopToBottom = null; // used to assist with sliding in proper direction
60
-
61
- this.customTarget = null;
62
- this.buttonColor = null;
63
- this.paletteHolder = null;
64
-
65
- return this;
66
- }
67
-
68
- ColorPicker.prototype =
69
- {
70
- generate: function ()
71
- {
72
- if(this.colorPicker) return this.colorPicker;
73
-
74
- var $this = this;
75
-
76
- var clearFloats = {clear: 'both', height: 0, lineHeight: 0, fontSize: 0};
77
-
78
- //custom colors
79
- this.customTarget = $('<div class="_wColorPicker_customTarget"></div>');
80
- this.customInput =
81
- $('<input type="text" class="_wColorPicker_customInput" value=""/>').keyup(function(e)
82
- {
83
- var code = (e.keyCode ? e.keyCode : e.which);
84
-
85
- var hex = $this.validHex($(this).val());
86
-
87
- $(this).val(hex)
88
-
89
- //auto set color in target if it's valid hex code
90
- if(hex.length == 7) $this.customTarget.css('backgroundColor', hex);
91
-
92
- if(code == 13)//set color if user hits enter while on input
93
- {
94
- $this.colorSelect($this, $(this).val());
95
- if($this.buttonColor) $this.hidePalette($this)
96
- }
97
- })
98
- .click(function(e){e.stopPropagation();});
99
-
100
- //setup custom area
101
- var custom =
102
- $('<div class="_wColorPicker_custom"></div>')
103
- .append(this.appendColors($('<div class="_wColorPicker_noColor">'), ['transparent'], 1))
104
- .append(this.customTarget)
105
- .append(this.customInput)
106
- //clear floats
107
- .append($('<div></div>').css(clearFloats))
108
-
109
- //grays/simple palette
110
- var simpleColors = ['000000', '333333', '666666', '999999', 'CCCCCC', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', '00FFFF', 'FF00FF'];
111
- var simplePalette = this.appendColors($('<div class="_wColorPicker_palette_simple"></div>'), simpleColors, 1);
112
-
113
- //colors palette
114
- var mixedColors = [
115
- '000000', '003300', '006600', '009900', '00CC00', '00FF00', '330000', '333300', '336600', '339900', '33CC00', '33FF00', '660000', '663300', '666600', '669900', '66CC00', '66FF00',
116
- '000033', '003333', '006633', '009933', '00CC33', '00FF33', '330033', '333333', '336633', '339933', '33CC33', '33FF33', '660033', '663333', '666633', '669933', '66CC33', '66FF33',
117
- '000066', '003366', '006666', '009966', '00CC66', '00FF66', '330066', '333366', '336666', '339966', '33CC66', '33FF66', '660066', '663366', '666666', '669966', '66CC66', '66FF66',
118
- '000099', '003399', '006699', '009999', '00CC99', '00FF99', '330099', '333399', '336699', '339999', '33CC99', '33FF99', '660099', '663399', '666699', '669999', '66CC99', '66FF99',
119
- '0000CC', '0033CC', '0066CC', '0099CC', '00CCCC', '00FFCC', '3300CC', '3333CC', '3366CC', '3399CC', '33CCCC', '33FFCC', '6600CC', '6633CC', '6666CC', '6699CC', '66CCCC', '66FFCC',
120
- '0000FF', '0033FF', '0066FF', '0099FF', '00CCFF', '00FFFF', '3300FF', '3333FF', '3366FF', '3399FF', '33CCFF', '33FFFF', '6600FF', '6633FF', '6666FF', '6699FF', '66CCFF', '66FFFF',
121
- '990000', '993300', '996600', '999900', '99CC00', '99FF00', 'CC0000', 'CC3300', 'CC6600', 'CC9900', 'CCCC00', 'CCFF00', 'FF0000', 'FF3300', 'FF6600', 'FF9900', 'FFCC00', 'FFFF00',
122
- '990033', '993333', '996633', '999933', '99CC33', '99FF33', 'CC0033', 'CC3333', 'CC6633', 'CC9933', 'CCCC33', 'CCFF33', 'FF0033', 'FF3333', 'FF6633', 'FF9933', 'FFCC33', 'FFFF33',
123
- '990066', '993366', '996666', '999966', '99CC66', '99FF66', 'CC0066', 'CC3366', 'CC6666', 'CC9966', 'CCCC66', 'CCFF66', 'FF0066', 'FF3366', 'FF6666', 'FF9966', 'FFCC66', 'FFFF66',
124
- '990099', '993399', '996699', '999999', '99CC99', '99FF99', 'CC0099', 'CC3399', 'CC6699', 'CC9999', 'CCCC99', 'CCFF99', 'FF0099', 'FF3399', 'FF6699', 'FF9999', 'FFCC99', 'FFFF99',
125
- '9900CC', '9933CC', '9966CC', '9999CC', '99CCCC', '99FFCC', 'CC00CC', 'CC33CC', 'CC66CC', 'CC99CC', 'CCCCCC', 'CCFFCC', 'FF00CC', 'FF33CC', 'FF66CC', 'FF99CC', 'FFCCCC', 'FFFFCC',
126
- '9900FF', '9933FF', '9966FF', '9999FF', '99CCFF', '99FFFF', 'CC00FF', 'CC33FF', 'CC66FF', 'CC99FF', 'CCCCFF', 'CCFFFF', 'FF00FF', 'FF33FF', 'FF66FF', 'FF99FF', 'FFCCFF', 'FFFFFF',
127
- ];
128
- var mixedPalette = this.appendColors($('<div class="_wColorPicker_palette_mixed"></div>'), mixedColors, 18);
129
-
130
- //palette container
131
- var bg = $('<div class="_wColorPicker_bg"></div>').css({opacity: this.settings.opacity});
132
- var content =
133
- $('<div class="_wColorPicker_content"></div>')
134
- .append(custom)
135
- .append(simplePalette)
136
- .append(mixedPalette)
137
- .append($('<div></div>').css(clearFloats));
138
-
139
- //put it all together
140
- this.colorPicker =
141
- $('<div class="_wColorPicker_holder"></div>')
142
- .click(function(e){e.stopPropagation();})
143
- .append(
144
- $('<div class="_wColorPicker_outer"></div>')
145
- .append(
146
- $('<div class="_wColorPicker_inner"></div>')
147
- .append( bg )
148
- .append( content )
149
- )
150
- )
151
- .addClass('_wColorPicker_' + this.settings.color)
152
-
153
- return this.colorPicker;
154
- },
155
-
156
- appendColors: function($palette, colors, lineCount)
157
- {
158
- var counter = 1;
159
- var $this = this;
160
-
161
- for(index in colors)
162
- {
163
- $palette.append(
164
- $('<div id="_wColorPicker_color_' + counter + '" class="_wColorPicker_color _wColorPicker_color_' + counter + '"></div>').css('backgroundColor', '#' + colors[index])
165
- .click(function(){$this.colorSelect($this, $(this).css('backgroundColor'));})
166
- .mouseout(function(e){$this.colorHoverOff($this, $(this));})
167
- .mouseover(function(){$this.colorHoverOn($this, $(this));})
168
- );
169
-
170
- if(counter == lineCount)
171
- {
172
- $palette.append($('<div></div>').css({clear:'both', height:0, fontSize:0, lineHeight:0, marginTop:-1}))
173
- counter = 0;
174
- }
175
-
176
- counter++;
177
- }
178
-
179
- return $palette;
180
- },
181
-
182
- colorSelect: function($this, color)
183
- {
184
- color = $this.toHex(color);;
185
-
186
- $this.customTarget.css('backgroundColor', color);
187
- $this.currentColor = color;
188
- $this.customInput.val(color);
189
-
190
- if($this.settings.onSelect) $this.settings.onSelect(color);
191
-
192
- if($this.buttonColor)
193
- {
194
- $this.buttonColor.css('backgroundColor', color);
195
- $this.hidePalette($this);
196
- }
197
- },
198
-
199
- colorHoverOn: function($this, $element)
200
- {
201
- $element.parent().children('active').removeClass('active');
202
- $element.addClass('active').next().addClass('activeLeft');
203
- $element.nextAll('.' + $element.attr('id') + ':first').addClass('activeTop');
204
-
205
- var color = $this.toHex($element.css('backgroundColor'));
206
-
207
- $this.customTarget.css('backgroundColor', color);
208
- $this.customInput.val(color);
209
-
210
- if($this.settings.onMouseover) $this.settings.onMouseover(color);
211
- },
212
-
213
- colorHoverOff: function($this, $element)
214
- {
215
- $element.removeClass('active').next().removeClass('activeLeft')
216
- $element.nextAll('.' + $element.attr('id') + ':first').removeClass('activeTop')
217
-
218
- $this.customTarget.css('backgroundColor', $this.currentColor);
219
- $this.customInput.val($this.currentColor);
220
-
221
- if($this.settings.onMouseout) $this.settings.onMouseout($this.currentColor);
222
- },
223
-
224
- appendToElement: function($element)
225
- {
226
- var $this = this;
227
-
228
- if($this.settings.mode == 'flat') $element.append($this.colorPicker);
229
- else
230
- {
231
- //setup button
232
- $this.paletteHolder = $('<div class="_wColorPicker_paletteHolder"></div>').css({position: 'absolute', overflow: 'hidden', width: 1000}).append($this.colorPicker);
233
-
234
- $this.buttonColor = $('<div class="_wColorPicker_buttonColor"></div>').css({width: $this.settings.buttonSize, height: $this.settings.buttonSize});
235
-
236
- var buttonHolder =
237
- $('<div class="_wColorPicker_buttonHolder"></div>')
238
- .css({position: 'relative'})
239
- .append($('<div class="_wColorPicker_buttonBorder"></div>').append($this.buttonColor))
240
- .append($this.paletteHolder);
241
-
242
- $element.append(buttonHolder);
243
-
244
- $this.width = $this.colorPicker.outerWidth();
245
- $this.height = $this.colorPicker.outerHeight();
246
- $this.paletteHolder.css({width: $this.width, height: $this.height}).hide();
247
-
248
- //setup events
249
- if($this.settings.mode == 'hover')
250
- {
251
- buttonHolder.hover(
252
- function(e){$this.showPalette(e, $this);},
253
- function(e){$this.hidePalette($this);}
254
- )
255
- }
256
- else if($this.settings.mode == 'click')
257
- {
258
- $(document).click(function(){if($this.paletteHolder.hasClass('active'))$this.hidePalette($this);});
259
-
260
- buttonHolder
261
- .click(function(e)
262
- {
263
- e.stopPropagation();
264
- $this.paletteHolder.hasClass('active') ? $this.hidePalette($this) : $this.showPalette(e, $this);
265
- });
266
- }
267
-
268
- $this.colorSelect($this, $this.settings.initColor);
269
- }
270
- },
271
-
272
- showPalette: function(e, $this)
273
- {
274
- var offset = $this.paletteHolder.parent().offset();
275
-
276
- //init some vars
277
- var left = 0;
278
- var top = $this.paletteHolder.parent().outerHeight();
279
- $this.slideTopToBottom = top;
280
-
281
- if(offset.left - $(window).scrollLeft() + $this.width > $(window).width()) left = -1 * ($this.width - $this.paletteHolder.parent().outerWidth());
282
- if(offset.top - $(window).scrollTop() + $this.height > $(window).height())
283
- {
284
- $this.slideTopToBottom = 0;
285
- top = -1 * ($this.height);
286
- }
287
-
288
- $this.paletteHolder.css({left: left, top: top});
289
-
290
- $this.paletteHolder.addClass('active')
291
-
292
- if($this.settings.effect == 'slide')
293
- {
294
- $this.paletteHolder.stop(true, false).css({height: 0, top: ($this.slideTopToBottom == 0 ? 0 : top)}).show().animate({height: $this.height, top: top}, $this.settings.showSpeed);
295
- }
296
- else if($this.settings.effect == 'fade')
297
- {
298
- $this.paletteHolder.stop(true, false).css({opacity: 0}).show().animate({opacity: 1}, $this.settings.showSpeed);
299
- }
300
- else
301
- {
302
- $this.paletteHolder.show();
303
- }
304
- },
305
-
306
- hidePalette: function($this)
307
- {
308
- //need this to avoid the double hide when you click on colour (once on click, once on mouse out) - this way it's only triggered once
309
- if($this.paletteHolder.hasClass('active'))
310
- {
311
- $this.paletteHolder.removeClass('active');
312
-
313
- if($this.settings.effect == 'slide')
314
- {
315
- $this.paletteHolder.stop(true, false).animate({height: 0, top: ($this.slideTopToBottom == 0 ? 0 : $this.slideTopToBottom)}, $this.settings.hideSpeed, function(){$this.paletteHolder.hide()});
316
- }
317
- else if($this.settings.effect == 'fade')
318
- {
319
- $this.paletteHolder.stop(true, false).animate({opacity: 0}, $this.settings.hideSpeed, function(){$this.paletteHolder.hide()});
320
- }
321
- else
322
- {
323
- $this.paletteHolder.hide();
324
- }
325
- }
326
- },
327
-
328
- toHex: function(color)
329
- {
330
- if(color.substring(0,3) == 'rgb')
331
- {
332
- var rgb = color.substring(4, color.length - 1).replace(/\s/g, '').split(',');
333
-
334
- for(i in rgb)
335
- {
336
- rgb[i] = parseInt(rgb[i]).toString(16);
337
- if(rgb[i] == '0') rgb[i] = '00';
338
- }
339
-
340
- var hex = '#' + rgb.join('').toUpperCase();
341
- }
342
- else
343
- {
344
- hex = color;//color.substring(0, 1) == '#' ? color.substring(1, color.length) : color;
345
- }
346
-
347
- return hex;
348
- },
349
-
350
- validHex: function(hex)
351
- {
352
- return '#' + hex.replace(/[^0-9a-f]/ig, '').substring(0,6).toUpperCase();
353
- }
354
- }
16
+ $.fn.wColorPicker = function(settings)
17
+ {
18
+ settings = $.extend({}, $.fn.wColorPicker.defaultSettings, settings || {});
19
+
20
+ return this.each(function()
21
+ {
22
+ var elem = $(this);
23
+ var $settings = jQuery.extend(true, {}, settings);
24
+
25
+ var cp = new ColorPicker($settings);
26
+
27
+ cp.generate();
28
+
29
+ cp.appendToElement(elem);
30
+
31
+ cp.colorSelect(cp, $settings.initColor);
32
+ });
33
+ };
34
+
35
+ $.fn.wColorPicker.defaultSettings = {
36
+ color : 'black', // colors - black, white, cream, red, green, blue, yellow, orange, plum
37
+ opacity : 0.8, // opacity level
38
+ initColor : '#FF0000', // initial colour to set palette to
39
+ onMouseover : null, // function to run when palette color is moused over
40
+ onMouseout : null, // function to run when palette color is moused out
41
+ onSelect : null, // function to run when palette color is selected
42
+ mode : 'flat', // flat mode inserts the palette to container, other modes insert button into container - hover, click
43
+ buttonSize : 20, // size of button if mode is ohter than flat
44
+ effect : 'slide', // none/slide/fade
45
+ showSpeed : 500, // time to run the effects on show
46
+ hideSpeed : 500 // time to run the effects on hide
47
+ };
48
+
49
+ /**
50
+ * ColorPicker class definition
51
+ */
52
+ function ColorPicker(settings)
53
+ {
54
+ this.colorPicker = null;
55
+ this.settings = settings;
56
+ this.currentColor = settings.initColor;
57
+
58
+ this.height = null; // init this, need to get height/width proper while element is still showing
59
+ this.width = null;
60
+ this.slideTopToBottom = null; // used to assist with sliding in proper direction
61
+
62
+ this.customTarget = null;
63
+ this.buttonColor = null;
64
+ this.paletteHolder = null;
65
+
66
+ return this;
67
+ }
68
+
69
+ ColorPicker.prototype =
70
+ {
71
+ generate: function ()
72
+ {
73
+ if(this.colorPicker) return this.colorPicker;
74
+
75
+ var $this = this;
76
+
77
+ var clearFloats = {clear: 'both', height: 0, lineHeight: 0, fontSize: 0};
78
+
79
+ //custom colors
80
+ this.customTarget = $('<div class="_wColorPicker_customTarget"></div>');
81
+ this.customInput =
82
+ $('<input type="text" class="_wColorPicker_customInput" value=""/>').keyup(function(e)
83
+ {
84
+ var code = (e.keyCode ? e.keyCode : e.which);
85
+
86
+ var hex = $this.validHex($(this).val());
87
+
88
+ $(this).val(hex)
89
+
90
+ //auto set color in target if it's valid hex code
91
+ if(hex.length == 7) $this.customTarget.css('backgroundColor', hex);
92
+
93
+ if(code == 13)//set color if user hits enter while on input
94
+ {
95
+ $this.colorSelect($this, $(this).val());
96
+ if($this.buttonColor) $this.hidePalette($this)
97
+ }
98
+ })
99
+ .click(function(e){e.stopPropagation();});
100
+
101
+ //setup custom area
102
+ var custom =
103
+ $('<div class="_wColorPicker_custom"></div>')
104
+ .append(this.appendColors($('<div class="_wColorPicker_noColor">'), ['transparent'], 1))
105
+ .append(this.customTarget)
106
+ .append(this.customInput)
107
+ //clear floats
108
+ .append($('<div></div>').css(clearFloats))
109
+
110
+ //grays/simple palette
111
+ var simpleColors = ['000000', '333333', '666666', '999999', 'CCCCCC', 'FFFFFF', 'FF0000', '00FF00', '0000FF', 'FFFF00', '00FFFF', 'FF00FF'];
112
+ var simplePalette = this.appendColors($('<div class="_wColorPicker_palette_simple"></div>'), simpleColors, 1);
113
+
114
+ //colors palette
115
+ var mixedColors = [
116
+ '000000', '003300', '006600', '009900', '00CC00', '00FF00', '330000', '333300', '336600', '339900', '33CC00', '33FF00', '660000', '663300', '666600', '669900', '66CC00', '66FF00',
117
+ '000033', '003333', '006633', '009933', '00CC33', '00FF33', '330033', '333333', '336633', '339933', '33CC33', '33FF33', '660033', '663333', '666633', '669933', '66CC33', '66FF33',
118
+ '000066', '003366', '006666', '009966', '00CC66', '00FF66', '330066', '333366', '336666', '339966', '33CC66', '33FF66', '660066', '663366', '666666', '669966', '66CC66', '66FF66',
119
+ '000099', '003399', '006699', '009999', '00CC99', '00FF99', '330099', '333399', '336699', '339999', '33CC99', '33FF99', '660099', '663399', '666699', '669999', '66CC99', '66FF99',
120
+ '0000CC', '0033CC', '0066CC', '0099CC', '00CCCC', '00FFCC', '3300CC', '3333CC', '3366CC', '3399CC', '33CCCC', '33FFCC', '6600CC', '6633CC', '6666CC', '6699CC', '66CCCC', '66FFCC',
121
+ '0000FF', '0033FF', '0066FF', '0099FF', '00CCFF', '00FFFF', '3300FF', '3333FF', '3366FF', '3399FF', '33CCFF', '33FFFF', '6600FF', '6633FF', '6666FF', '6699FF', '66CCFF', '66FFFF',
122
+ '990000', '993300', '996600', '999900', '99CC00', '99FF00', 'CC0000', 'CC3300', 'CC6600', 'CC9900', 'CCCC00', 'CCFF00', 'FF0000', 'FF3300', 'FF6600', 'FF9900', 'FFCC00', 'FFFF00',
123
+ '990033', '993333', '996633', '999933', '99CC33', '99FF33', 'CC0033', 'CC3333', 'CC6633', 'CC9933', 'CCCC33', 'CCFF33', 'FF0033', 'FF3333', 'FF6633', 'FF9933', 'FFCC33', 'FFFF33',
124
+ '990066', '993366', '996666', '999966', '99CC66', '99FF66', 'CC0066', 'CC3366', 'CC6666', 'CC9966', 'CCCC66', 'CCFF66', 'FF0066', 'FF3366', 'FF6666', 'FF9966', 'FFCC66', 'FFFF66',
125
+ '990099', '993399', '996699', '999999', '99CC99', '99FF99', 'CC0099', 'CC3399', 'CC6699', 'CC9999', 'CCCC99', 'CCFF99', 'FF0099', 'FF3399', 'FF6699', 'FF9999', 'FFCC99', 'FFFF99',
126
+ '9900CC', '9933CC', '9966CC', '9999CC', '99CCCC', '99FFCC', 'CC00CC', 'CC33CC', 'CC66CC', 'CC99CC', 'CCCCCC', 'CCFFCC', 'FF00CC', 'FF33CC', 'FF66CC', 'FF99CC', 'FFCCCC', 'FFFFCC',
127
+ '9900FF', '9933FF', '9966FF', '9999FF', '99CCFF', '99FFFF', 'CC00FF', 'CC33FF', 'CC66FF', 'CC99FF', 'CCCCFF', 'CCFFFF', 'FF00FF', 'FF33FF', 'FF66FF', 'FF99FF', 'FFCCFF', 'FFFFFF',
128
+ ];
129
+ var mixedPalette = this.appendColors($('<div class="_wColorPicker_palette_mixed"></div>'), mixedColors, 18);
130
+
131
+ //palette container
132
+ var bg = $('<div class="_wColorPicker_bg"></div>').css({opacity: this.settings.opacity});
133
+ var content =
134
+ $('<div class="_wColorPicker_content"></div>')
135
+ .append(custom)
136
+ .append(simplePalette)
137
+ .append(mixedPalette)
138
+ .append($('<div></div>').css(clearFloats));
139
+
140
+ //put it all together
141
+ this.colorPicker =
142
+ $('<div class="_wColorPicker_holder"></div>')
143
+ .click(function(e){e.stopPropagation();})
144
+ .append(
145
+ $('<div class="_wColorPicker_outer"></div>')
146
+ .append(
147
+ $('<div class="_wColorPicker_inner"></div>')
148
+ .append( bg )
149
+ .append( content )
150
+ )
151
+ )
152
+ .addClass('_wColorPicker_' + this.settings.color)
153
+
154
+ return this.colorPicker;
155
+ },
156
+
157
+ appendColors: function($palette, colors, lineCount)
158
+ {
159
+ var counter = 1;
160
+ var $this = this;
161
+
162
+ for(index in colors)
163
+ {
164
+ $palette.append(
165
+ $('<div id="_wColorPicker_color_' + counter + '" class="_wColorPicker_color _wColorPicker_color_' + counter + '"></div>').css('backgroundColor', '#' + colors[index])
166
+ .click(function(){$this.colorSelect($this, $(this).css('backgroundColor'));})
167
+ .mouseout(function(e){$this.colorHoverOff($this, $(this));})
168
+ .mouseover(function(){$this.colorHoverOn($this, $(this));})
169
+ );
170
+
171
+ if(counter == lineCount)
172
+ {
173
+ $palette.append($('<div></div>').css({clear:'both', height:0, fontSize:0, lineHeight:0, marginTop:-1}))
174
+ counter = 0;
175
+ }
176
+
177
+ counter++;
178
+ }
179
+
180
+ return $palette;
181
+ },
182
+
183
+ colorSelect: function($this, color)
184
+ {
185
+ color = $this.toHex(color);;
186
+
187
+ $this.customTarget.css('backgroundColor', color);
188
+ $this.currentColor = color;
189
+ $this.customInput.val(color);
190
+
191
+ if($this.settings.onSelect) $this.settings.onSelect(color);
192
+
193
+ if($this.buttonColor)
194
+ {
195
+ $this.buttonColor.css('backgroundColor', color);
196
+ $this.hidePalette($this);
197
+ }
198
+ },
199
+
200
+ colorHoverOn: function($this, $element)
201
+ {
202
+ $element.parent().children('active').removeClass('active');
203
+ $element.addClass('active').next().addClass('activeLeft');
204
+ $element.nextAll('.' + $element.attr('id') + ':first').addClass('activeTop');
205
+
206
+ var color = $this.toHex($element.css('backgroundColor'));
207
+
208
+ $this.customTarget.css('backgroundColor', color);
209
+ $this.customInput.val(color);
210
+
211
+ if($this.settings.onMouseover) $this.settings.onMouseover(color);
212
+ },
213
+
214
+ colorHoverOff: function($this, $element)
215
+ {
216
+ $element.removeClass('active').next().removeClass('activeLeft')
217
+ $element.nextAll('.' + $element.attr('id') + ':first').removeClass('activeTop')
218
+
219
+ $this.customTarget.css('backgroundColor', $this.currentColor);
220
+ $this.customInput.val($this.currentColor);
221
+
222
+ if($this.settings.onMouseout) $this.settings.onMouseout($this.currentColor);
223
+ },
224
+
225
+ appendToElement: function($element)
226
+ {
227
+ var $this = this;
228
+
229
+ if($this.settings.mode == 'flat') $element.append($this.colorPicker);
230
+ else
231
+ {
232
+ //setup button
233
+ $this.paletteHolder = $('<div class="_wColorPicker_paletteHolder"></div>').css({position: 'absolute', overflow: 'hidden', width: 1000}).append($this.colorPicker);
234
+
235
+ $this.buttonColor = $('<div class="_wColorPicker_buttonColor"></div>').css({width: $this.settings.buttonSize, height: $this.settings.buttonSize});
236
+
237
+ var buttonHolder =
238
+ $('<div class="_wColorPicker_buttonHolder"></div>')
239
+ .css({position: 'relative'})
240
+ .append($('<div class="_wColorPicker_buttonBorder"></div>').append($this.buttonColor))
241
+ .append($this.paletteHolder);
242
+
243
+ $element.append(buttonHolder);
244
+
245
+ $this.width = $this.colorPicker.outerWidth();
246
+ $this.height = $this.colorPicker.outerHeight();
247
+ $this.paletteHolder.css({width: $this.width, height: $this.height}).hide();
248
+
249
+ if($this.settings.effect == 'fade') $this.paletteHolder.css({opacity: 0});
250
+
251
+ //setup events
252
+ if($this.settings.mode == 'hover')
253
+ {
254
+ buttonHolder.hover(
255
+ function(e){$this.showPalette(e, $this);},
256
+ function(e){$this.hidePalette($this);}
257
+ )
258
+ }
259
+ else if($this.settings.mode == 'click')
260
+ {
261
+ $(document).click(function(){if($this.paletteHolder.hasClass('active'))$this.hidePalette($this);});
262
+
263
+ buttonHolder
264
+ .click(function(e)
265
+ {
266
+ e.stopPropagation();
267
+ $this.paletteHolder.hasClass('active') ? $this.hidePalette($this) : $this.showPalette(e, $this);
268
+ });
269
+ }
270
+
271
+ $this.colorSelect($this, $this.settings.initColor);
272
+ }
273
+ },
274
+
275
+ showPalette: function(e, $this)
276
+ {
277
+ var offset = $this.paletteHolder.parent().offset();
278
+
279
+ //init some vars
280
+ var left = 0;
281
+ var top = $this.paletteHolder.parent().outerHeight();
282
+ $this.slideTopToBottom = top;
283
+
284
+ if(offset.left - $(window).scrollLeft() + $this.width > $(window).width()) left = -1 * ($this.width - $this.paletteHolder.parent().outerWidth());
285
+ if(offset.top - $(window).scrollTop() + $this.height > $(window).height())
286
+ {
287
+ $this.slideTopToBottom = 0;
288
+ top = -1 * ($this.height);
289
+ }
290
+
291
+ $this.paletteHolder.css({left: left, top: top});
292
+
293
+ $this.paletteHolder.addClass('active')
294
+
295
+ if($this.settings.effect == 'slide')
296
+ {
297
+ $this.paletteHolder.stop(true, false).css({height: 0, top: ($this.slideTopToBottom == 0 ? 0 : top)}).show().animate({height: $this.height, top: top}, $this.settings.showSpeed);
298
+ }
299
+ else if($this.settings.effect == 'fade')
300
+ {
301
+ $this.paletteHolder.stop(true, false).show().animate({opacity: 1}, $this.settings.showSpeed);
302
+ }
303
+ else
304
+ {
305
+ $this.paletteHolder.show();
306
+ }
307
+ },
308
+
309
+ hidePalette: function($this)
310
+ {
311
+ //need this to avoid the double hide when you click on colour (once on click, once on mouse out) - this way it's only triggered once
312
+ if($this.paletteHolder.hasClass('active'))
313
+ {
314
+ $this.paletteHolder.removeClass('active');
315
+
316
+ if($this.settings.effect == 'slide')
317
+ {
318
+ $this.paletteHolder.stop(true, false).animate({height: 0, top: ($this.slideTopToBottom == 0 ? 0 : $this.slideTopToBottom)}, $this.settings.hideSpeed, function(){$this.paletteHolder.hide()});
319
+ }
320
+ else if($this.settings.effect == 'fade')
321
+ {
322
+ $this.paletteHolder.stop(true, false).animate({opacity: 0}, $this.settings.hideSpeed, function(){$this.paletteHolder.hide()});
323
+ }
324
+ else
325
+ {
326
+ $this.paletteHolder.hide();
327
+ }
328
+ }
329
+ },
330
+
331
+ toHex: function(color)
332
+ {
333
+ if(color.substring(0,3) == 'rgb')
334
+ {
335
+ var rgb = color.substring(4, color.length - 1).replace(/\s/g, '').split(',');
336
+
337
+ for(i in rgb)
338
+ {
339
+ rgb[i] = parseInt(rgb[i]).toString(16);
340
+ if(rgb[i] == '0') rgb[i] = '00';
341
+ }
342
+
343
+ var hex = '#' + rgb.join('').toUpperCase();
344
+ }
345
+ else
346
+ {
347
+ hex = color;//color.substring(0, 1) == '#' ? color.substring(1, color.length) : color;
348
+ }
349
+
350
+ return hex;
351
+ },
352
+
353
+ validHex: function(hex)
354
+ {
355
+ return '#' + hex.replace(/[^0-9a-f]/ig, '').substring(0,6).toUpperCase();
356
+ }
357
+ }
355
358
 
356
359
  })(jQuery);
357
360
 
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wcolorpicker-rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 1
8
- - 1
9
- version: "1.1"
8
+ - 2
9
+ version: "1.2"
10
10
  platform: ruby
11
11
  authors:
12
12
  - RogerE
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2012-03-28 00:00:00 Z
17
+ date: 2012-04-12 00:00:00 Z
18
18
  dependencies: []
19
19
 
20
20
  description: This gem Provides the Websanova Color Picker assets for your Rails application .