wcolorpicker-rails 1.1 → 1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 .