scrollToFixed_rails 1.0.0

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 scrollToFixed_rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Guy Israeli
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,37 @@
1
+ # ScrollToFixedRails
2
+
3
+ This is an asset pipeline wrapper for scrollToFixed.js (https://github.com/bigspotteddog/ScrollToFixed)
4
+
5
+ jQuery is needed
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'scrollToFixed_rails'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install scrollToFixed_rails
20
+
21
+ ## Usage
22
+
23
+ add
24
+
25
+ //= require scrolltofixed
26
+
27
+ to application.js manifest
28
+
29
+ and see http://bigspotteddog.github.io/ScrollToFixed/ for demo
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,542 @@
1
+ // Copyright (c) 2011 Joseph Cava-Lynch
2
+
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ // this software and associated documentation files (the "Software"), to deal in
5
+ // the Software without restriction, including without limitation the rights to
6
+ // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
7
+ // the Software, and to permit persons to whom the Software is furnished to do so,
8
+ // subject to the following conditions:
9
+
10
+ // The above copyright notice and this permission notice shall be included in all
11
+ // copies or substantial portions of the Software.
12
+
13
+ // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
15
+ // FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
16
+ // COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
17
+ // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
18
+ // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19
+
20
+ // Version for debugging - 1.0.0
21
+
22
+ (function($) {
23
+ $.isScrollToFixed = function(el) {
24
+ return !!$(el).data('ScrollToFixed');
25
+ };
26
+
27
+ $.ScrollToFixed = function(el, options) {
28
+ // To avoid scope issues, use 'base' instead of 'this' to reference this
29
+ // class from internal events and functions.
30
+ var base = this;
31
+
32
+ // Access to jQuery and DOM versions of element.
33
+ base.$el = $(el);
34
+ base.el = el;
35
+
36
+ // Add a reverse reference to the DOM object.
37
+ base.$el.data('ScrollToFixed', base);
38
+
39
+ // A flag so we know if the scroll has been reset.
40
+ var isReset = false;
41
+
42
+ // The element that was given to us to fix if scrolled above the top of
43
+ // the page.
44
+ var target = base.$el;
45
+
46
+ var position;
47
+ var originalPosition;
48
+
49
+ var originalOffset;
50
+
51
+ // The offset top of the element when resetScroll was called. This is
52
+ // used to determine if we have scrolled past the top of the element.
53
+ var offsetTop = 0;
54
+
55
+ // The offset left of the element when resetScroll was called. This is
56
+ // used to move the element left or right relative to the horizontal
57
+ // scroll.
58
+ var offsetLeft = 0;
59
+ var originalOffsetLeft = -1;
60
+
61
+ // This last offset used to move the element horizontally. This is used
62
+ // to determine if we need to move the element because we would not want
63
+ // to do that for no reason.
64
+ var lastOffsetLeft = -1;
65
+
66
+ // This is the element used to fill the void left by the target element
67
+ // when it goes fixed; otherwise, everything below it moves up the page.
68
+ var spacer = null;
69
+
70
+ var spacerClass;
71
+
72
+ var className;
73
+
74
+ // Capture the original offsets for the target element. This needs to be
75
+ // called whenever the page size changes or when the page is first
76
+ // scrolled. For some reason, calling this before the page is first
77
+ // scrolled causes the element to become fixed too late.
78
+ function resetScroll() {
79
+ // Set the element to it original positioning.
80
+ target.trigger('preUnfixed.ScrollToFixed');
81
+ setUnfixed();
82
+ target.trigger('unfixed.ScrollToFixed');
83
+
84
+ // Reset the last offset used to determine if the page has moved
85
+ // horizontally.
86
+ lastOffsetLeft = -1;
87
+
88
+ // Capture the offset top of the target element.
89
+ offsetTop = target.offset().top;
90
+
91
+ // Capture the offset left of the target element.
92
+ offsetLeft = target.offset().left;
93
+
94
+ // If the offsets option is on, alter the left offset.
95
+ if (base.options.offsets) {
96
+ offsetLeft += (target.offset().left - target.position().left);
97
+ }
98
+
99
+ if (originalOffsetLeft == -1) {
100
+ originalOffsetLeft = offsetLeft;
101
+ }
102
+
103
+ position = target.css('position');
104
+
105
+ // Set that this has been called at least once.
106
+ isReset = true;
107
+
108
+ if (base.options.bottom != -1) {
109
+ target.trigger('preFixed.ScrollToFixed');
110
+ setFixed();
111
+ target.trigger('fixed.ScrollToFixed');
112
+ }
113
+ }
114
+
115
+ function getLimit() {
116
+ var limit = base.options.limit;
117
+ if (!limit) return 0;
118
+
119
+ if (typeof(limit) === 'function') {
120
+ return limit.apply(target);
121
+ }
122
+ return limit;
123
+ }
124
+
125
+ // Returns whether the target element is fixed or not.
126
+ function isFixed() {
127
+ return position === 'fixed';
128
+ }
129
+
130
+ // Returns whether the target element is absolute or not.
131
+ function isAbsolute() {
132
+ return position === 'absolute';
133
+ }
134
+
135
+ function isUnfixed() {
136
+ return !(isFixed() || isAbsolute());
137
+ }
138
+
139
+ // Sets the target element to fixed. Also, sets the spacer to fill the
140
+ // void left by the target element.
141
+ function setFixed() {
142
+ // Only fix the target element and the spacer if we need to.
143
+ if (!isFixed()) {
144
+ // Set the spacer to fill the height and width of the target
145
+ // element, then display it.
146
+ spacer.css({
147
+ 'display' : target.css('display'),
148
+ 'width' : target.outerWidth(true),
149
+ 'height' : target.outerHeight(true),
150
+ 'float' : target.css('float')
151
+ });
152
+
153
+ // Set the target element to fixed and set its width so it does
154
+ // not fill the rest of the page horizontally. Also, set its top
155
+ // to the margin top specified in the options.
156
+
157
+ cssOptions={
158
+ 'position' : 'fixed',
159
+ 'top' : base.options.bottom == -1?getMarginTop():'',
160
+ 'bottom' : base.options.bottom == -1?'':base.options.bottom,
161
+ 'margin-left' : '0px'
162
+ }
163
+ if (!base.options.dontSetWidth){ cssOptions['width']=target.width(); };
164
+
165
+ target.css(cssOptions);
166
+
167
+ target.addClass('scroll-to-fixed-fixed');
168
+
169
+ if (base.options.className) {
170
+ target.addClass(base.options.className);
171
+ }
172
+
173
+ position = 'fixed';
174
+ }
175
+ }
176
+
177
+ function setAbsolute() {
178
+
179
+ var top = getLimit();
180
+ var left = offsetLeft;
181
+
182
+ if (base.options.removeOffsets) {
183
+ left = 0;
184
+ top = top - offsetTop;
185
+ }
186
+
187
+ cssOptions={
188
+ 'position' : 'absolute',
189
+ 'top' : top,
190
+ 'left' : left,
191
+ 'margin-left' : '0px',
192
+ 'bottom' : ''
193
+ }
194
+ if (!base.options.dontSetWidth){ cssOptions['width']=target.width(); };
195
+
196
+ target.css(cssOptions);
197
+
198
+ position = 'absolute';
199
+ }
200
+
201
+ // Sets the target element back to unfixed. Also, hides the spacer.
202
+ function setUnfixed() {
203
+ // Only unfix the target element and the spacer if we need to.
204
+ if (!isUnfixed()) {
205
+ lastOffsetLeft = -1;
206
+
207
+ // Hide the spacer now that the target element will fill the
208
+ // space.
209
+ spacer.css('display', 'none');
210
+
211
+ // Remove the style attributes that were added to the target.
212
+ // This will reverse the target back to the its original style.
213
+ target.css({
214
+ 'width' : '',
215
+ 'position' : originalPosition,
216
+ 'left' : '',
217
+ 'top' : originalOffset.top,
218
+ 'margin-left' : ''
219
+ });
220
+
221
+ target.removeClass('scroll-to-fixed-fixed');
222
+
223
+ if (base.options.className) {
224
+ target.removeClass(base.options.className);
225
+ }
226
+
227
+ position = null;
228
+ }
229
+ }
230
+
231
+ // Moves the target element left or right relative to the horizontal
232
+ // scroll position.
233
+ function setLeft(x) {
234
+ // Only if the scroll is not what it was last time we did this.
235
+ if (x != lastOffsetLeft) {
236
+ // Move the target element horizontally relative to its original
237
+ // horizontal position.
238
+ target.css('left', offsetLeft - x);
239
+
240
+ // Hold the last horizontal position set.
241
+ lastOffsetLeft = x;
242
+ }
243
+ }
244
+
245
+ function getMarginTop() {
246
+ var marginTop = base.options.marginTop;
247
+ if (!marginTop) return 0;
248
+
249
+ if (typeof(marginTop) === 'function') {
250
+ return marginTop.apply(target);
251
+ }
252
+ return marginTop;
253
+ }
254
+
255
+ // Checks to see if we need to do something based on new scroll position
256
+ // of the page.
257
+ function checkScroll() {
258
+ if (!$.isScrollToFixed(target)) return;
259
+ var wasReset = isReset;
260
+
261
+ // If resetScroll has not yet been called, call it. This only
262
+ // happens once.
263
+ if (!isReset) {
264
+ resetScroll();
265
+ }
266
+
267
+ // Grab the current horizontal scroll position.
268
+ var x = $(window).scrollLeft();
269
+
270
+ // Grab the current vertical scroll position.
271
+ var y = $(window).scrollTop();
272
+
273
+ // Get the limit, if there is one.
274
+ var limit = getLimit();
275
+
276
+ // If the vertical scroll position, plus the optional margin, would
277
+ // put the target element at the specified limit, set the target
278
+ // element to absolute.
279
+ if (base.options.minWidth && $(window).width() < base.options.minWidth) {
280
+ if (!isUnfixed() || !wasReset) {
281
+ postPosition();
282
+ target.trigger('preUnfixed.ScrollToFixed');
283
+ setUnfixed();
284
+ target.trigger('unfixed.ScrollToFixed');
285
+ }
286
+ } else if (base.options.bottom == -1) {
287
+ // If the vertical scroll position, plus the optional margin, would
288
+ // put the target element at the specified limit, set the target
289
+ // element to absolute.
290
+ if (limit > 0 && y >= limit - getMarginTop()) {
291
+ if (!isAbsolute() || !wasReset) {
292
+ postPosition();
293
+ target.trigger('preAbsolute.ScrollToFixed');
294
+ setAbsolute();
295
+ target.trigger('unfixed.ScrollToFixed');
296
+ }
297
+ // If the vertical scroll position, plus the optional margin, would
298
+ // put the target element above the top of the page, set the target
299
+ // element to fixed.
300
+ } else if (y >= offsetTop - getMarginTop()) {
301
+ if (!isFixed() || !wasReset) {
302
+ postPosition();
303
+ target.trigger('preFixed.ScrollToFixed');
304
+
305
+ // Set the target element to fixed.
306
+ setFixed();
307
+
308
+ // Reset the last offset left because we just went fixed.
309
+ lastOffsetLeft = -1;
310
+
311
+ target.trigger('fixed.ScrollToFixed');
312
+ }
313
+ // If the page has been scrolled horizontally as well, move the
314
+ // target element accordingly.
315
+ setLeft(x);
316
+ } else {
317
+ // Set the target element to unfixed, placing it where it was
318
+ // before.
319
+ if (!isUnfixed() || !wasReset) {
320
+ postPosition();
321
+ target.trigger('preUnfixed.ScrollToFixed');
322
+ setUnfixed();
323
+ target.trigger('unfixed.ScrollToFixed');
324
+ }
325
+ }
326
+ } else {
327
+ if (limit > 0) {
328
+ if (y + $(window).height() - target.outerHeight(true) >= limit - (getMarginTop() || -getBottom())) {
329
+ if (isFixed()) {
330
+ postPosition();
331
+ target.trigger('preUnfixed.ScrollToFixed');
332
+
333
+ if (originalPosition === 'absolute') {
334
+ setAbsolute();
335
+ } else {
336
+ setUnfixed();
337
+ }
338
+
339
+ target.trigger('unfixed.ScrollToFixed');
340
+ }
341
+ } else {
342
+ if (!isFixed()) {
343
+ postPosition();
344
+ target.trigger('preFixed.ScrollToFixed');
345
+ setFixed();
346
+ }
347
+ setLeft(x);
348
+ target.trigger('fixed.ScrollToFixed');
349
+ }
350
+ } else {
351
+ setLeft(x);
352
+ }
353
+ }
354
+ }
355
+
356
+ function getBottom() {
357
+ if (!base.options.bottom) return 0;
358
+ return base.options.bottom;
359
+ }
360
+
361
+ function postPosition() {
362
+ var position = target.css('position');
363
+
364
+ if (position == 'absolute') {
365
+ target.trigger('postAbsolute.ScrollToFixed');
366
+ } else if (position == 'fixed') {
367
+ target.trigger('postFixed.ScrollToFixed');
368
+ } else {
369
+ target.trigger('postUnfixed.ScrollToFixed');
370
+ }
371
+ }
372
+
373
+ var windowResize = function(event) {
374
+ // Check if the element is visible before updating it's position, which
375
+ // improves behavior with responsive designs where this element is hidden.
376
+ if(target.is(':visible')) {
377
+ isReset = false;
378
+ checkScroll();
379
+ }
380
+ }
381
+
382
+ var windowScroll = function(event) {
383
+ checkScroll();
384
+ }
385
+
386
+ // From: http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED
387
+ var isPositionFixedSupported = function() {
388
+ var container = document.body;
389
+
390
+ if (document.createElement && container && container.appendChild && container.removeChild) {
391
+ var el = document.createElement('div');
392
+
393
+ if (!el.getBoundingClientRect) return null;
394
+
395
+ el.innerHTML = 'x';
396
+ el.style.cssText = 'position:fixed;top:100px;';
397
+ container.appendChild(el);
398
+
399
+ var originalHeight = container.style.height,
400
+ originalScrollTop = container.scrollTop;
401
+
402
+ container.style.height = '3000px';
403
+ container.scrollTop = 500;
404
+
405
+ var elementTop = el.getBoundingClientRect().top;
406
+ container.style.height = originalHeight;
407
+
408
+ var isSupported = (elementTop === 100);
409
+ container.removeChild(el);
410
+ container.scrollTop = originalScrollTop;
411
+
412
+ return isSupported;
413
+ }
414
+
415
+ return null;
416
+ }
417
+
418
+ var preventDefault = function(e) {
419
+ e = e || window.event;
420
+ if (e.preventDefault) {
421
+ e.preventDefault();
422
+ }
423
+ e.returnValue = false;
424
+ }
425
+
426
+ // Initializes this plugin. Captures the options passed in, turns this
427
+ // off for devices that do not support fixed position, adds the spacer,
428
+ // and binds to the window scroll and resize events.
429
+ base.init = function() {
430
+ // Capture the options for this plugin.
431
+ base.options = $
432
+ .extend({}, $.ScrollToFixed.defaultOptions, options);
433
+
434
+ // Turn off this functionality for devices that do not support it.
435
+ // if (!(base.options && base.options.dontCheckForPositionFixedSupport)) {
436
+ // var fixedSupported = isPositionFixedSupported();
437
+ // if (!fixedSupported) return;
438
+ // }
439
+
440
+ // Put the target element on top of everything that could be below
441
+ // it. This reduces flicker when the target element is transitioning
442
+ // to fixed.
443
+ base.$el.css('z-index', base.options.zIndex);
444
+
445
+ // Create a spacer element to fill the void left by the target
446
+ // element when it goes fixed.
447
+ spacer = $('<div />');
448
+
449
+ position = target.css('position');
450
+ originalPosition = target.css('position');
451
+
452
+ originalOffset = $.extend({}, target.offset());
453
+
454
+ // Place the spacer right after the target element.
455
+ if (isUnfixed()) base.$el.after(spacer);
456
+
457
+ // Reset the target element offsets when the window is resized, then
458
+ // check to see if we need to fix or unfix the target element.
459
+ $(window).bind('resize.ScrollToFixed', windowResize);
460
+
461
+ // When the window scrolls, check to see if we need to fix or unfix
462
+ // the target element.
463
+ $(window).bind('scroll.ScrollToFixed', windowScroll);
464
+
465
+ if (base.options.preFixed) {
466
+ target.bind('preFixed.ScrollToFixed', base.options.preFixed);
467
+ }
468
+ if (base.options.postFixed) {
469
+ target.bind('postFixed.ScrollToFixed', base.options.postFixed);
470
+ }
471
+ if (base.options.preUnfixed) {
472
+ target.bind('preUnfixed.ScrollToFixed', base.options.preUnfixed);
473
+ }
474
+ if (base.options.postUnfixed) {
475
+ target.bind('postUnfixed.ScrollToFixed', base.options.postUnfixed);
476
+ }
477
+ if (base.options.preAbsolute) {
478
+ target.bind('preAbsolute.ScrollToFixed', base.options.preAbsolute);
479
+ }
480
+ if (base.options.postAbsolute) {
481
+ target.bind('postAbsolute.ScrollToFixed', base.options.postAbsolute);
482
+ }
483
+ if (base.options.fixed) {
484
+ target.bind('fixed.ScrollToFixed', base.options.fixed);
485
+ }
486
+ if (base.options.unfixed) {
487
+ target.bind('unfixed.ScrollToFixed', base.options.unfixed);
488
+ }
489
+
490
+ if (base.options.spacerClass) {
491
+ spacer.addClass(base.options.spacerClass);
492
+ }
493
+
494
+ target.bind('resize.ScrollToFixed', function() {
495
+ spacer.height(target.height());
496
+ });
497
+
498
+ target.bind('scroll.ScrollToFixed', function() {
499
+ target.trigger('preUnfixed.ScrollToFixed');
500
+ setUnfixed();
501
+ target.trigger('unfixed.ScrollToFixed');
502
+ checkScroll();
503
+ });
504
+
505
+ target.bind('detach.ScrollToFixed', function(ev) {
506
+ preventDefault(ev);
507
+
508
+ target.trigger('preUnfixed.ScrollToFixed');
509
+ setUnfixed();
510
+ target.trigger('unfixed.ScrollToFixed');
511
+
512
+ $(window).unbind('resize.ScrollToFixed', windowResize);
513
+ $(window).unbind('scroll.ScrollToFixed', windowScroll);
514
+
515
+ target.unbind('.ScrollToFixed');
516
+ base.$el.removeData('ScrollToFixed');
517
+ });
518
+
519
+ // Reset everything.
520
+ windowResize();
521
+ };
522
+
523
+ // Initialize the plugin.
524
+ base.init();
525
+ };
526
+
527
+ // Sets the option defaults.
528
+ $.ScrollToFixed.defaultOptions = {
529
+ marginTop : 0,
530
+ limit : 0,
531
+ bottom : -1,
532
+ zIndex : 1000
533
+ };
534
+
535
+ // Returns enhanced elements that will fix to the top of the page when the
536
+ // page is scrolled.
537
+ $.fn.scrollToFixed = function(options) {
538
+ return this.each(function() {
539
+ (new $.ScrollToFixed(this, options));
540
+ });
541
+ };
542
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ module ScrollToFixedRails
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,8 @@
1
+ require "scrollToFixed_rails/version"
2
+
3
+ module ScrollToFixedRails
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'scrollToFixed_rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "scrollToFixed_rails"
8
+ spec.version = ScrollToFixedRails::VERSION
9
+ spec.authors = ["Guy Israeli"]
10
+ spec.description = %q{An asset pipeline compatible wrapper for scrollToFixed.js}
11
+ spec.summary = %q{9gag like Scroll 'n Float magic made possible with scrollToFixed.js}
12
+ spec.homepage = "https://github.com/guyisra/scrollToFixed_rails"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_development_dependency "bundler", "~> 1.3"
21
+ spec.add_development_dependency "rake"
22
+ spec.add_dependency "railties", ">=3.1"
23
+
24
+ end
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scrollToFixed_rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Guy Israeli
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-09-05 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: railties
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '3.1'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '3.1'
62
+ description: An asset pipeline compatible wrapper for scrollToFixed.js
63
+ email:
64
+ executables: []
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - .gitignore
69
+ - Gemfile
70
+ - LICENSE.txt
71
+ - README.md
72
+ - Rakefile
73
+ - app/assets/javascripts/scrolltofixed.js
74
+ - lib/scrollToFixed_rails.rb
75
+ - lib/scrollToFixed_rails/version.rb
76
+ - scrollToFixed_rails.gemspec
77
+ homepage: https://github.com/guyisra/scrollToFixed_rails
78
+ licenses:
79
+ - MIT
80
+ post_install_message:
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ required_rubygems_version: !ruby/object:Gem::Requirement
91
+ none: false
92
+ requirements:
93
+ - - ! '>='
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubyforge_project:
98
+ rubygems_version: 1.8.24
99
+ signing_key:
100
+ specification_version: 3
101
+ summary: 9gag like Scroll 'n Float magic made possible with scrollToFixed.js
102
+ test_files: []