jquery-nouislider-rails 3.2.1

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