jquery-simplecolorpicker-rails 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -27,31 +27,39 @@ Add the following stylesheet file to `app/assets/stylesheets/application.css`:
27
27
 
28
28
  *= require jquery.simplecolorpicker.css
29
29
 
30
- If you use [simple_form](https://github.com/plataformatec/simple_form) then write this inside your form:
30
+ If you use [simple_form](https://github.com/plataformatec/simple_form) write this inside your form:
31
31
 
32
32
  <%= f.input :color, collection: MY_COLORS, selected: my_default_color %>
33
33
 
34
- With `MY_COLORS` being:
34
+ And then inside your JavaScript:
35
35
 
36
- # Colors from Google Calendar
37
- MY_COLORS = {
38
- 'Green' => '#7bd148',
39
- 'Bold blue' => '#5484ed',
40
- 'Blue' => '#a4bdfc',
41
- 'Turquoise' => '#46d6db',
42
- 'Light green' => '#7ae7bf',
43
- 'Bold green' => '#51b749',
44
- 'Yellow' => '#fbd75b',
45
- 'Orange' => '#ffb878',
46
- 'Red' => '#ff887c',
47
- 'Bold red' => '#dc2127',
48
- 'Purple' => '#dbadff',
49
- 'Gray' => '#e1e1e1',
50
- }
36
+ ```JavaScript
37
+ $('#color').simplecolorpicker();
38
+ ```
51
39
 
52
- And `my_default_color` being:
40
+ With `MY_COLORS` being:
41
+ ```ruby
42
+ # Colors from Google Calendar
43
+ MY_COLORS = {
44
+ green: '#7bd148',
45
+ bold_blue: '#5484ed',
46
+ blue: '#a4bdfc',
47
+ turquoise: '#46d6db',
48
+ light_green: '#7ae7bf',
49
+ bold_green: '#51b749',
50
+ yellow: '#fbd75b',
51
+ orange: '#ffb878',
52
+ red: '#ff887c',
53
+ bold_red: '#dc2127',
54
+ purple: '#dbadff',
55
+ gray: '#e1e1e1'
56
+ }
57
+ ```
53
58
 
54
- my_default_color = MY_COLORS['Yellow']
59
+ And `my_default_color` being:
60
+ ```ruby
61
+ my_default_color = MY_COLORS[:green]
62
+ ```
55
63
 
56
64
  ## License
57
65
 
@@ -1,7 +1,7 @@
1
1
  module Jquery
2
2
  module Simplecolorpicker
3
3
  module Rails
4
- VERSION = "0.0.3"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -7,57 +7,13 @@
7
7
  */
8
8
 
9
9
  (function($) {
10
- "use strict";
10
+ 'use strict';
11
11
 
12
12
  /**
13
13
  * Constructor.
14
14
  */
15
- var SimpleColorPicker = function(element, options) {
16
- this.select = $(element);
17
- this.options = $.extend({}, $.fn.simplecolorpicker.defaults, options);
18
-
19
- this.select.hide();
20
-
21
- // Trick: fix span alignment
22
- // When a span does not contain any text, its alignment is not correct
23
- var fakeText = '&nbsp;&nbsp;&nbsp;&nbsp;';
24
-
25
- // Build the list of colors
26
- // <div class="selected" title="Green" style="background-color: #7bd148;" role="button"></div>
27
- var colorList = '';
28
- $('option', this.select).each(function() {
29
- var option = $(this);
30
- var color = option.val();
31
- var title = option.text();
32
- var selected = '';
33
- if (option.attr('selected')) {
34
- selected = 'class="selected"';
35
- }
36
- colorList += '<div ' + selected + ' title="' + title + '" style="background-color: ' + color + ';" role="button" tabindex="0">'
37
- + fakeText
38
- + '</div>';
39
- });
40
-
41
- if (this.options.picker) {
42
- var selectText = this.select.find('option:selected').text();
43
- var selectValue = this.select.val();
44
- this.icon = $('<span class="simplecolorpicker icon" title="' + selectText + '" style="background-color: ' + selectValue + ';" role="button" tabindex="0">'
45
- + fakeText
46
- + '</span>').insertAfter(this.select);
47
- this.icon.on('click', $.proxy(this.show, this));
48
-
49
- this.picker = $('<span class="simplecolorpicker picker"></span>').appendTo(document.body);
50
- this.picker.html(colorList);
51
- this.picker.on('click', $.proxy(this.click, this));
52
-
53
- // Hide picker when clicking outside
54
- $(document).on('mousedown', $.proxy(this.hide, this));
55
- this.picker.on('mousedown', $.proxy(this.mousedown, this));
56
- } else {
57
- this.inline = $('<span class="simplecolorpicker inline"></span>').insertAfter(this.select);
58
- this.inline.html(colorList);
59
- this.inline.on('click', $.proxy(this.click, this));
60
- }
15
+ var SimpleColorPicker = function(select, options) {
16
+ this.init('simplecolorpicker', select, options);
61
17
  };
62
18
 
63
19
  /**
@@ -66,19 +22,69 @@
66
22
  SimpleColorPicker.prototype = {
67
23
  constructor: SimpleColorPicker,
68
24
 
69
- show: function() {
25
+ init: function(type, select, options) {
26
+ this.type = type;
27
+
28
+ this.$select = $(select);
29
+ this.options = $.extend({}, $.fn.simplecolorpicker.defaults, options);
30
+
31
+ this.$select.hide();
32
+
33
+ // Trick: fix span alignment
34
+ // When a span does not contain any text, its alignment is not correct
35
+ var fakeText = '&nbsp;&nbsp;&nbsp;&nbsp;';
36
+
37
+ // Build the list of colors
38
+ // <div class="selected" title="Green" style="background-color: #7bd148;" role="button"></div>
39
+ var colorList = '';
40
+ $('option', this.$select).each(function() {
41
+ var option = $(this);
42
+ var color = option.val();
43
+ var title = option.text();
44
+ var selected = '';
45
+ if (option.attr('selected')) {
46
+ selected = 'class="selected"';
47
+ }
48
+ colorList += '<div ' + selected + ' title="' + title + '" style="background-color: ' + color + ';" role="button" tabindex="0">'
49
+ + fakeText
50
+ + '</div>';
51
+ });
52
+
53
+ if (this.options.picker) {
54
+ var selectText = this.$select.find('option:selected').text();
55
+ var selectValue = this.$select.val();
56
+ this.$icon = $('<span class="simplecolorpicker icon" title="' + selectText + '" style="background-color: ' + selectValue + ';" role="button" tabindex="0">'
57
+ + fakeText
58
+ + '</span>').insertAfter(this.$select);
59
+ this.$icon.on('click.' + this.type, $.proxy(this.showPicker, this));
60
+
61
+ this.$picker = $('<span class="simplecolorpicker picker"></span>').appendTo(document.body);
62
+ this.$picker.html(colorList);
63
+ this.$picker.on('click.' + this.type, $.proxy(this.click, this));
64
+
65
+ // Hide picker when clicking outside
66
+ $(document).on('mousedown.' + this.type, $.proxy(this.hidePicker, this));
67
+ this.$picker.on('mousedown.' + this.type, $.proxy(this.mousedown, this));
68
+ } else {
69
+ this.$inline = $('<span class="simplecolorpicker inline"></span>').insertAfter(this.$select);
70
+ this.$inline.html(colorList);
71
+ this.$inline.on('click.' + this.type, $.proxy(this.click, this));
72
+ }
73
+ },
74
+
75
+ showPicker: function() {
70
76
  var bootstrapArrowWidth = 16; // Empirical value
71
- var pos = this.icon.offset();
72
- this.picker.css({
73
- left: pos.left + this.icon.width() / 2 - bootstrapArrowWidth, // Middle of the icon
74
- top: pos.top + this.icon.outerHeight()
77
+ var pos = this.$icon.offset();
78
+ this.$picker.css({
79
+ left: pos.left + this.$icon.width() / 2 - bootstrapArrowWidth, // Middle of the icon
80
+ top: pos.top + this.$icon.outerHeight()
75
81
  });
76
82
 
77
- this.picker.show(this.options.delay);
83
+ this.$picker.show(this.options.delay);
78
84
  },
79
85
 
80
- hide: function() {
81
- this.picker.hide(this.options.delay);
86
+ hidePicker: function() {
87
+ this.$picker.hide(this.options.delay);
82
88
  },
83
89
 
84
90
  click: function(e) {
@@ -95,15 +101,13 @@
95
101
  target.addClass('selected');
96
102
 
97
103
  if (this.options.picker) {
98
- this.icon.css('background-color', color);
99
- this.icon.attr('title', title);
100
-
101
- // Hide the picker
102
- this.hide();
104
+ this.$icon.css('background-color', color);
105
+ this.$icon.attr('title', title);
106
+ this.hidePicker();
103
107
  }
104
108
 
105
- // Change select value
106
- this.select.val(this.rgb2hex(color)).change();
109
+ // Change HTML select value
110
+ this.$select.val(this.rgb2hex(color)).change();
107
111
  }
108
112
  }
109
113
  },
@@ -123,7 +127,7 @@
123
127
  */
124
128
  rgb2hex: function(rgb) {
125
129
  function hex(x) {
126
- return ("0" + parseInt(x, 10).toString(16)).slice(-2);
130
+ return ('0' + parseInt(x, 10).toString(16)).slice(-2);
127
131
  }
128
132
 
129
133
  var matches = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
@@ -132,13 +136,30 @@
132
136
  // Variable rgb is already a hexadecimal value
133
137
  return rgb;
134
138
  } else {
135
- return "#" + hex(matches[1]) + hex(matches[2]) + hex(matches[3]);
139
+ return '#' + hex(matches[1]) + hex(matches[2]) + hex(matches[3]);
136
140
  }
141
+ },
142
+
143
+ destroy: function() {
144
+ if (this.options.picker) {
145
+ this.$icon.off('.' + this.type);
146
+ this.$icon.remove();
147
+ this.$picker.off('.' + this.type);
148
+ this.$picker.remove();
149
+ $(document).off('.' + this.type);
150
+ } else {
151
+ this.$inline.off('.' + this.type);
152
+ this.$inline.remove();
153
+ }
154
+
155
+ this.$select.removeData(this.type);
156
+ this.$select.show();
137
157
  }
138
158
  };
139
159
 
140
160
  /**
141
161
  * Plugin definition.
162
+ * How to use: $('#id').simplecolorpicker()
142
163
  */
143
164
  $.fn.simplecolorpicker = function(option) {
144
165
  // For HTML element passed to the plugin
@@ -146,7 +167,7 @@
146
167
  var $this = $(this),
147
168
  data = $this.data('simplecolorpicker'),
148
169
  options = typeof option === 'object' && option;
149
- if (!data) {
170
+ if (data === undefined) {
150
171
  $this.data('simplecolorpicker', (data = new SimpleColorPicker(this, options)));
151
172
  }
152
173
  if (typeof option === 'string') {
@@ -155,8 +176,6 @@
155
176
  });
156
177
  };
157
178
 
158
- $.fn.simplecolorpicker.Constructor = SimpleColorPicker;
159
-
160
179
  /**
161
180
  * Default options.
162
181
  */
@@ -10,7 +10,7 @@
10
10
  * See http://twitter.github.com/bootstrap/assets/css/bootstrap.css
11
11
  */
12
12
 
13
- .simplecolorpicker:before {
13
+ .simplecolorpicker.picker:before {
14
14
  position: absolute;
15
15
  top: -7px;
16
16
  left: 9px;
@@ -22,7 +22,7 @@
22
22
  content: '';
23
23
  }
24
24
 
25
- .simplecolorpicker:after {
25
+ .simplecolorpicker.picker:after {
26
26
  position: absolute;
27
27
  top: -6px;
28
28
  left: 10px;
@@ -37,7 +37,7 @@
37
37
  position: absolute;
38
38
  top: 100%;
39
39
  left: 0;
40
- z-index: 1000;
40
+ z-index: 1051; /* Above Bootstrap modal (z-index of 1050) */
41
41
  display: none;
42
42
  float: left;
43
43
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jquery-simplecolorpicker-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-25 00:00:00.000000000 Z
12
+ date: 2012-12-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: railties
16
- requirement: &21522120 !ruby/object:Gem::Requirement
16
+ requirement: &70176716718180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *21522120
24
+ version_requirements: *70176716718180
25
25
  description: simplecolorpicker jQuery plugin
26
26
  email:
27
27
  - tkrotoff@gmail.com
@@ -59,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
59
59
  version: '0'
60
60
  requirements: []
61
61
  rubyforge_project:
62
- rubygems_version: 1.8.16
62
+ rubygems_version: 1.8.15
63
63
  signing_key:
64
64
  specification_version: 3
65
65
  summary: simplecolorpicker packaged for the Rails 3.1+ asset pipeline