jquery-nouislider-rails 3.2.1

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/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in jquery-nouislider-rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,5 @@
1
+ noUiSlider Public License
2
+ Terms and conditions for copying,
3
+ distribution and modification:
4
+
5
+ 0. Just do whatever you want.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # Jquery::Nouislider::Rails
2
+
3
+ A gem version of the [noUiSlider for Jquery](http://refreshless.com/nouislider/)
4
+ to include in a Rails ~3.1 application.
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'jquery-nouislider-rails'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ ## Usage
17
+
18
+ In your app/assets/javascript manifest file:
19
+ //=require jquery.nouislider
20
+
21
+ In your app/assets/stylesheets manifest file, you can include either of the default slider styles:
22
+
23
+ //=require 'nouislider.fox.css'
24
+
25
+ or
26
+
27
+ //=require 'nouislider.space.css'
28
+
29
+ You are encouraged to use your own stylesheet, but these two will give you a good base to start from.
30
+
31
+ ## Contributing
32
+
33
+ 1. Fork it
34
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
35
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
36
+ 4. Push to the branch (`git push origin my-new-feature`)
37
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,18 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'jquery-nouislider-rails/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "jquery-nouislider-rails"
8
+ gem.version = Jquery::Nouislider::Rails::VERSION
9
+ gem.authors = ["Cameron Adamez", "Leon Gersen"]
10
+ gem.email = ["cameron@soycow.org", "leongersen@gmail.com"]
11
+ gem.description = %q{Gem for the noUiSlider, a jQuery range slider.}
12
+ gem.summary = %q{Gem for the noUiSlider, a jQuery range slider.}
13
+ gem.homepage = "https://github.com/soycamo/jquery-nouislider-rails"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.require_paths = Dir["{lib,vendor}/**/*"]
17
+ gem.add_dependency "jquery-rails", "~> 2.0"
18
+ end
@@ -0,0 +1,10 @@
1
+ require "jquery-nouislider-rails/version"
2
+
3
+ module Jquery
4
+ module Nouislider
5
+ module Rails
6
+ class Engine < ::Rails::Engine
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ module Jquery
2
+ module Nouislider
3
+ module Rails
4
+ VERSION = "3.2.1"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,364 @@
1
+ /* noUiSlider 3.2.1 */
2
+ (function ($) {
3
+
4
+ $.fn.noUiSlider = function (options, flag) {
5
+
6
+ // test for mouse, pointer or touch
7
+ var EVENT = window.navigator.msPointerEnabled ? 2 : 'ontouchend' in document ? 3 : 1;
8
+ if (window.debug && console) {
9
+ console.log(EVENT);
10
+ }
11
+
12
+ // shorthand for test=function, calling
13
+ function call(f, scope, args) {
14
+ if (typeof f === "function") {
15
+ f.call(scope, args);
16
+ }
17
+ }
18
+
19
+ // function wrapper for calculating to and from range values
20
+ var percentage = {
21
+ to : function (range, value) {
22
+ value = range[0] < 0 ? value + Math.abs(range[0]) : value - range[0];
23
+ return (value * 100) / this._length(range);
24
+ },
25
+ from : function (range, value) {
26
+ return (value * 100) / this._length(range);
27
+ },
28
+ is : function (range, value) {
29
+ return ((value * this._length(range)) / 100) + range[0];
30
+ },
31
+ _length : function (range) {
32
+ return (range[0] > range[1] ? range[0] - range[1] : range[1] - range[0]);
33
+ }
34
+ }
35
+
36
+ // bounce handles of eachother, the edges of the slider
37
+ function correct(proposal, slider, handle) {
38
+
39
+ var
40
+ setup = slider.data('setup'),
41
+ handles = setup.handles,
42
+ settings = setup.settings,
43
+ pos = setup.pos;
44
+
45
+ proposal = proposal < 0 ? 0 : proposal > 100 ? 100 : proposal;
46
+
47
+ if (settings.handles == 2) {
48
+ if (handle.is(':first-child')) {
49
+ var other = parseFloat(handles[1][0].style[pos]) - settings.margin;
50
+ proposal = proposal > other ? other : proposal;
51
+ } else {
52
+ var other = parseFloat(handles[0][0].style[pos]) + settings.margin;
53
+ proposal = proposal < other ? other : proposal;
54
+ }
55
+ }
56
+
57
+ if (settings.step) {
58
+ var per = percentage.from(settings.range, settings.step);
59
+ proposal = Math.round(proposal / per) * per;
60
+ }
61
+
62
+ return proposal;
63
+
64
+ }
65
+
66
+ // get standarised clientX and clientY
67
+ function client(f) {
68
+ try {
69
+ return [(f.clientX || f.originalEvent.clientX || f.originalEvent.touches[0].clientX), (f.clientY || f.originalEvent.clientY || f.originalEvent.touches[0].clientY)];
70
+ } catch (e) {
71
+ return ['x', 'y'];
72
+ }
73
+ }
74
+
75
+ // get native inline style value in %
76
+ function place(handle, pos) {
77
+ return parseFloat(handle[0].style[pos]);
78
+ }
79
+
80
+ // simplified defaults
81
+ var defaults = {
82
+ handles : 2,
83
+ serialization : {
84
+ to : ['', ''],
85
+ resolution : 0.01
86
+ }
87
+ };
88
+
89
+ // contains all methods
90
+ methods = {
91
+ create : function () {
92
+
93
+ return this.each(function () {
94
+
95
+ // set handle to position
96
+ function setHandle(handle, to, slider) {
97
+ handle.css(pos, to + '%').data('input').val(percentage.is(settings.range, to).toFixed(res));
98
+ }
99
+
100
+ var
101
+ settings = $.extend(defaults, options),
102
+ // handles
103
+ handlehtml = '<a><div></div></a>',
104
+ // save this to variable, // allows identification
105
+ slider = $(this).data('_isnS_', true),
106
+ // array of handles
107
+ handles = [],
108
+ // the way the handles are positioned for this slider, top/left
109
+ pos,
110
+ // for quick orientation testing and array matching
111
+ orientation,
112
+ // append classes
113
+ classes = "",
114
+ // tests numerical
115
+ num = function (e) {
116
+ return !isNaN(parseFloat(e)) && isFinite(e);
117
+ },
118
+ // counts decimals in serialization, sets default
119
+ split = (settings.serialization.resolution = settings.serialization.resolution || 0.01).toString().split('.'),
120
+ res = split[0] == 1 ? 0 : split[1].length;
121
+
122
+ settings.start = num(settings.start) ? [settings.start, 0] : settings.start;
123
+
124
+ // logs bad input values, if possible
125
+ $.each(settings, function (a, b) {
126
+
127
+ if (num(b)) {
128
+ settings[a] = parseFloat(b);
129
+ } else if (typeof b == "object" && num(b[0])) {
130
+ b[0] = parseFloat(b[0]);
131
+ if (num(b[1])) {
132
+ b[1] = parseFloat(b[1]);
133
+ }
134
+ }
135
+
136
+ var e = false;
137
+ b = typeof b == "undefined" ? "x" : b;
138
+
139
+ switch (a) {
140
+ case 'range':
141
+ case 'start':
142
+ e = b.length != 2 || !num(b[0]) || !num(b[1]);
143
+ break;
144
+ case 'handles':
145
+ e = (b < 1 || b > 2 || !num(b));
146
+ break;
147
+ case 'connect':
148
+ e = b != "lower" && b != "upper" && typeof b != "boolean";
149
+ break;
150
+ case 'orientation':
151
+ e = (b != "vertical" && b != "horizontal");
152
+ break;
153
+ case 'margin':
154
+ case 'step':
155
+ e = typeof b != "undefined" && !num(b);
156
+ break;
157
+ case 'serialization':
158
+ e = typeof b != "object" || !num(b.resolution) || (typeof b.to == 'object' && b.to.length < settings.handles);
159
+ break;
160
+ case 'slide':
161
+ e = typeof b != "function";
162
+ break;
163
+ }
164
+
165
+ if (e && console) {
166
+ console.error('Bad input for ' + a + ' on slider:', slider);
167
+ }
168
+
169
+ });
170
+
171
+ settings.margin = settings.margin ? percentage.from(settings.range, settings.margin) : 0;
172
+
173
+ // tests serialization to be strings or jQuery objects
174
+ if (settings.serialization.to instanceof jQuery || typeof settings.serialization.to == 'string' || settings.serialization.to === false) {
175
+ settings.serialization.to = [settings.serialization.to];
176
+ }
177
+
178
+ if (settings.orientation == "vertical") {
179
+ classes += "vertical";
180
+ pos = 'top';
181
+ orientation = 1;
182
+ } else {
183
+ classes += "horizontal";
184
+ pos = 'left';
185
+ orientation = 0;
186
+ }
187
+
188
+ classes += settings.connect ? settings.connect == "lower" ? " connect lower" : " connect" : "";
189
+
190
+ slider.addClass(classes);
191
+
192
+ for (var i = 0; i < settings.handles; i++) {
193
+
194
+ handles[i] = slider.append(handlehtml).children(':last');
195
+ var setTo = percentage.to(settings.range, settings.start[i]);
196
+ handles[i].css(pos, setTo + '%');
197
+ if (setTo == 100 && handles[i].is(':first-child')) {
198
+ handles[i].css('z-index', 2);
199
+ }
200
+
201
+ var bind = '.noUiSlider',
202
+ onEvent = (EVENT === 1 ? 'mousedown' : EVENT === 2 ? 'MSPointerDown' : 'touchstart') + bind + 'X',
203
+ moveEvent = (EVENT === 1 ? 'mousemove' : EVENT === 2 ? 'MSPointerMove' : 'touchmove') + bind,
204
+ offEvent = (EVENT === 1 ? 'mouseup' : EVENT === 2 ? 'MSPointerUp' : 'touchend') + bind
205
+
206
+ handles[i].find('div').on(onEvent, function (e) {
207
+
208
+ $('body').bind('selectstart' + bind, function () {
209
+ return false;
210
+ });
211
+
212
+ if (!slider.hasClass('disabled')) {
213
+
214
+ $('body').addClass('TOUCH');
215
+
216
+ var handle = $(this).addClass('active').parent(),
217
+ unbind = handle.add($(document)).add('body'),
218
+ originalPosition = parseFloat(handle[0].style[pos]),
219
+ originalClick = client(e),
220
+ previousClick = originalClick,
221
+ previousProposal = false;
222
+
223
+ $(document).on(moveEvent, function (f) {
224
+
225
+ f.preventDefault();
226
+
227
+ var currentClick = client(f);
228
+
229
+ if (currentClick[0] == "x") {
230
+ return;
231
+ }
232
+
233
+ currentClick[0] -= originalClick[0];
234
+ currentClick[1] -= originalClick[1];
235
+
236
+ var movement = [
237
+ previousClick[0] != currentClick[0], previousClick[1] != currentClick[1]
238
+ ],
239
+ proposal = originalPosition + ((currentClick[orientation] * 100) / (orientation ? slider.height() : slider.width()));
240
+ proposal = correct(proposal, slider, handle);
241
+
242
+ if (movement[orientation] && proposal != previousProposal) {
243
+ handle.css(pos, proposal + '%').data('input').val(percentage.is(settings.range, proposal).toFixed(res));
244
+ call(settings.slide, slider.data('_n', true));
245
+ previousProposal = proposal;
246
+ handle.css('z-index', handles.length == 2 && proposal == 100 && handle.is(':first-child') ? 2 : 1);
247
+ }
248
+
249
+ previousClick = currentClick;
250
+
251
+ }).on(offEvent, function () {
252
+
253
+ unbind.off(bind);
254
+ $('body').removeClass('TOUCH');
255
+ if (slider.find('.active').removeClass('active').end().data('_n')) {
256
+ slider.data('_n', false).change();
257
+ }
258
+
259
+ });
260
+
261
+ }
262
+ }).on('click', function (e) {
263
+ e.stopPropagation();
264
+ });
265
+
266
+ }
267
+
268
+ if (EVENT == 1) {
269
+ slider.on('click', function (f) {
270
+ if (!slider.hasClass('disabled')) {
271
+ var currentClick = client(f),
272
+ proposal = ((currentClick[orientation] - slider.offset()[pos]) * 100) / (orientation ? slider.height() : slider.width()),
273
+ handle = handles.length > 1 ? (currentClick[orientation] < (handles[0].offset()[pos] + handles[1].offset()[pos]) / 2 ? handles[0] : handles[1]) : handles[0];
274
+ setHandle(handle, correct(proposal, slider, handle), slider);
275
+ call(settings.slide, slider);
276
+ slider.change();
277
+ }
278
+ });
279
+ }
280
+
281
+ for (var i = 0; i < handles.length; i++) {
282
+ var val = percentage.is(settings.range, place(handles[i], pos)).toFixed(res);
283
+ if (typeof settings.serialization.to[i] == 'string') {
284
+ handles[i].data('input',
285
+ slider.append('<input type="hidden" name="' + settings.serialization.to[i] + '">').find('input:last')
286
+ .val(val)
287
+ .change(function (a) {
288
+ a.stopPropagation();
289
+ }));
290
+ } else if (settings.serialization.to[i] == false) {
291
+ handles[i].data('input', {
292
+ val : function (a) {
293
+ if (typeof a != 'undefined') {
294
+ this.handle.data('noUiVal', a);
295
+ } else {
296
+ return this.handle.data('noUiVal');
297
+ }
298
+ },
299
+ handle : handles[i]
300
+ });
301
+ } else {
302
+ handles[i].data('input', settings.serialization.to[i].data('handleNR', i).val(val).change(function () {
303
+ var arr = [null, null];
304
+ arr[$(this).data('handleNR')] = $(this).val();
305
+ slider.val(arr);
306
+ }));
307
+ }
308
+ }
309
+
310
+ $(this).data('setup', {
311
+ settings : settings,
312
+ handles : handles,
313
+ pos : pos,
314
+ res : res
315
+ });
316
+
317
+ });
318
+ },
319
+ val : function () {
320
+
321
+ if (typeof arguments[0] !== 'undefined') {
322
+
323
+ var val = typeof arguments[0] == 'number' ? [arguments[0]] : arguments[0];
324
+
325
+ return this.each(function () {
326
+
327
+ var setup = $(this).data('setup');
328
+
329
+ for (var i = 0; i < setup.handles.length; i++) {
330
+ if (val[i] != null) {
331
+ var proposal = correct(percentage.to(setup.settings.range, val[i]), $(this), setup.handles[i]);
332
+ setup.handles[i].css(setup.pos, proposal + '%').data('input').val(percentage.is(setup.settings.range, proposal).toFixed(setup.res));
333
+ }
334
+ }
335
+ });
336
+
337
+ } else {
338
+
339
+ var handles = $(this).data('setup').handles,
340
+ re = [];
341
+ for (var i = 0; i < handles.length; i++) {
342
+ re.push(parseFloat(handles[i].data('input').val()));
343
+ }
344
+ return re.length == 1 ? re[0] : re;
345
+
346
+ }
347
+ },
348
+ disabled : function () {
349
+ return flag ? $(this).addClass('disabled') : $(this).removeClass('disabled');
350
+ }
351
+ }
352
+
353
+ // remap the native/current val function to noUiSlider
354
+ var $_val = jQuery.fn.val;
355
+
356
+ jQuery.fn.val = function () {
357
+ return this.data('_isnS_') ? methods.val.apply(this, arguments) : $_val.apply(this, arguments);
358
+ }
359
+
360
+ return options == "disabled" ? methods.disabled.apply(this) : methods.create.apply(this);
361
+
362
+ }
363
+
364
+ })(jQuery);
@@ -0,0 +1,94 @@
1
+ .noUiSlider,
2
+ .noUiSlider * {
3
+ -webkit-box-sizing: border-box;
4
+ -moz-box-sizing: border-box;
5
+ box-sizing: border-box;
6
+ -webkit-user-select: none;
7
+ -moz-user-select: none;
8
+ -ms-user-select: none;
9
+ display: block;
10
+ cursor: default;
11
+ }
12
+ .noUiSlider {
13
+ position: relative;
14
+ }
15
+ .noUiSlider a {
16
+ position: absolute;
17
+ z-index: 1;
18
+ }
19
+ .noUiSlider a:nth-child(2) {
20
+ background: inherit !important;
21
+ }
22
+ .noUiSlider.vertical a {
23
+ width: 100%;
24
+ bottom: 0;
25
+ }
26
+ .noUiSlider.horizontal a {
27
+ height: 100%;
28
+ right: 0;
29
+ }
30
+ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
31
+ .noUiSlider:before,
32
+ body.TOUCH,
33
+ .noUiSlider div {
34
+ -ms-touch-action: none;
35
+ }
36
+ .noUiSlider:before {
37
+ display: block;
38
+ position: absolute;
39
+ width: 150%;
40
+ left: -25%;
41
+ height: 400%;
42
+ top: -150%;
43
+ content: "";
44
+ z-index: -1;
45
+ }
46
+ .noUiSlider.vertical:before {
47
+ width: 400%;
48
+ left: -150%;
49
+ height: 150%;
50
+ top: -25%;
51
+ }
52
+ }
53
+ .noUiSlider {
54
+ border: 1px solid #908d84;
55
+ border-radius: 3px;
56
+ }
57
+ .noUiSlider.connect a,
58
+ .noUiSlider.connect.lower {
59
+ background: #b2a98f;
60
+ }
61
+ .noUiSlider,
62
+ .noUiSlider.connect.lower a {
63
+ background: #d9d7cb;
64
+ box-shadow: inset 0px 1px 7px #b6b4a8
65
+ }
66
+ .noUiSlider.disabled,
67
+ .noUiSlider.disabled.connect.lower a {
68
+ background: #ccc;
69
+ box-shadow: none;
70
+ }
71
+ .noUiSlider div {
72
+ height: 18px;
73
+ width: 18px;
74
+ border: 1px solid #99968f;
75
+ border-radius: 3px;
76
+ background: #efefe7;
77
+ }
78
+ .noUiSlider.disabled div {
79
+ background: transparent;
80
+ }
81
+ .noUiSlider.horizontal {
82
+ width: 300px;
83
+ height: 10px;
84
+ }
85
+ .noUiSlider.horizontal div {
86
+ margin: -5px 0 0 -9px;
87
+ }
88
+ .noUiSlider.vertical {
89
+ width: 10px;
90
+ height: 300px;
91
+ }
92
+ .noUiSlider.vertical div {
93
+ margin: -9px 0 0 -5px;
94
+ }
@@ -0,0 +1,112 @@
1
+ .noUiSlider,
2
+ .noUiSlider * {
3
+ -webkit-box-sizing: border-box;
4
+ -moz-box-sizing: border-box;
5
+ box-sizing: border-box;
6
+ -webkit-user-select: none;
7
+ -moz-user-select: none;
8
+ -ms-user-select: none;
9
+ display: block;
10
+ cursor: default;
11
+ }
12
+ .noUiSlider {
13
+ position: relative;
14
+ }
15
+ .noUiSlider a {
16
+ position: absolute;
17
+ z-index: 1;
18
+ }
19
+ .noUiSlider a:nth-child(2) {
20
+ background: inherit !important;
21
+ }
22
+ .noUiSlider.vertical a {
23
+ width: 100%;
24
+ bottom: 0;
25
+ }
26
+ .noUiSlider.horizontal a {
27
+ height: 100%;
28
+ right: 0;
29
+ }
30
+ @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
31
+ .noUiSlider:before,
32
+ body.TOUCH,
33
+ .noUiSlider div {
34
+ -ms-touch-action: none;
35
+ }
36
+ .noUiSlider:before {
37
+ display: block;
38
+ position: absolute;
39
+ width: 150%;
40
+ left: -25%;
41
+ height: 400%;
42
+ top: -150%;
43
+ content: "";
44
+ z-index: -1;
45
+ }
46
+ .noUiSlider.vertical:before {
47
+ width: 400%;
48
+ left: -150%;
49
+ height: 150%;
50
+ top: -25%;
51
+ }
52
+ }
53
+ .noUiSlider {
54
+ background: #000;
55
+ border: 0 solid #000;
56
+ }
57
+ .noUiSlider.disabled div:before,
58
+ .noUiSlider.disabled {
59
+ background: #ccc;
60
+ border-color: #ccc;
61
+ }
62
+ .noUiSlider.horizontal {
63
+ border-width: 0 12px;
64
+ }
65
+ .noUiSlider.vertical {
66
+ border-width: 12px 0;
67
+ }
68
+ .noUiSlider div {
69
+ height: 44px;
70
+ width: 44px;
71
+ position: relative;
72
+ }
73
+ .noUiSlider div:before {
74
+ position: absolute;
75
+ background: #000;
76
+ content: "";
77
+ }
78
+ .noUiSlider.horizontal div:before {
79
+ left: 10px;
80
+ height: 4px;
81
+ width: 24px;
82
+ }
83
+ .noUiSlider.vertical div:before {
84
+ top: 10px;
85
+ width: 4px;
86
+ height: 24px;
87
+ }
88
+ .noUiSlider:not(.disabled) div.active:after,
89
+ .noUiSlider:not(.disabled) div:hover:after {
90
+ height: 30px;
91
+ width: 30px;
92
+ border: 1px solid #333;
93
+ position: absolute;
94
+ top: 6px;
95
+ left: 6px;
96
+ content: "";
97
+ border-radius: 30px;
98
+ }
99
+ .noUiSlider.horizontal {
100
+ width: 300px;
101
+ height: 1px;
102
+ }
103
+ .noUiSlider.horizontal div {
104
+ margin: 1px 0 0 -22px;
105
+ }
106
+ .noUiSlider.vertical {
107
+ width: 1px;
108
+ height: 300px;
109
+ }
110
+ .noUiSlider.vertical div {
111
+ margin: -22px 0 0 1px;
112
+ }
metadata ADDED
@@ -0,0 +1,88 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery-nouislider-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.2.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Cameron Adamez
9
+ - Leon Gersen
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-09-20 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: jquery-rails
17
+ requirement: !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '2.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ version: '2.0'
31
+ description: Gem for the noUiSlider, a jQuery range slider.
32
+ email:
33
+ - cameron@soycow.org
34
+ - leongersen@gmail.com
35
+ executables: []
36
+ extensions: []
37
+ extra_rdoc_files: []
38
+ files:
39
+ - .gitignore
40
+ - Gemfile
41
+ - LICENSE.txt
42
+ - README.md
43
+ - Rakefile
44
+ - jquery-nouislider-rails.gemspec
45
+ - lib/jquery-nouislider-rails.rb
46
+ - lib/jquery-nouislider-rails/version.rb
47
+ - vendor/assets/javascripts/jquery.nouislider.js
48
+ - vendor/assets/stylesheets/nouislider.fox.css
49
+ - vendor/assets/stylesheets/nouislider.space.css
50
+ homepage: https://github.com/soycamo/jquery-nouislider-rails
51
+ licenses: []
52
+ post_install_message:
53
+ rdoc_options: []
54
+ require_paths:
55
+ - lib/jquery-nouislider-rails
56
+ - lib/jquery-nouislider-rails/version.rb
57
+ - lib/jquery-nouislider-rails.rb
58
+ - vendor/assets
59
+ - vendor/assets/javascripts
60
+ - vendor/assets/javascripts/jquery.nouislider.js
61
+ - vendor/assets/stylesheets
62
+ - vendor/assets/stylesheets/nouislider.fox.css
63
+ - vendor/assets/stylesheets/nouislider.space.css
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ segments:
71
+ - 0
72
+ hash: 2605859822601396172
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ! '>='
77
+ - !ruby/object:Gem::Version
78
+ version: '0'
79
+ segments:
80
+ - 0
81
+ hash: 2605859822601396172
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 1.8.25
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Gem for the noUiSlider, a jQuery range slider.
88
+ test_files: []