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