jquery-scrolltofixed-rails 0.1.0

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '084ea6911acd41c3a61998aeb3ed259fdc35b04ff2bbf5a2464188431d4b45cf'
4
+ data.tar.gz: 43c443eeba468c06d084769059098ff20ae02712fc5238be92baebfc03cb5f02
5
+ SHA512:
6
+ metadata.gz: 2d6e4ba9335513f6482acde0bdec62b84d0651d6357e01718b617950bd2b79e63136e9ffc4de4c0075f1243a76a3081fce987b34a965713e3263d18a1743f6e7
7
+ data.tar.gz: e1fde4f909f819581407aa937f07b498da83a88d4e46d7cf41e3502df2e885f6605b49373d309e6b2650c8b70d88777ef40fc35fc208fb5183ce74e1934459f6
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2018 Pablo Gonzaga
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,41 @@
1
+ # Jquery::Scrolltofixed::Rails
2
+
3
+ Integrate JQuery ScrollToFixed plugin into Rails.
4
+
5
+ ## Usage
6
+ You can check the official documentation [here](https://github.com/bigspotteddog/ScrollToFixed#usage).
7
+
8
+ ## Installation
9
+ NOTE: you have to install [jquery-rails](https://rubygems.org/gems/jquery-rails) gem to use this gem.
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'jquery-scrolltofixed-rails'
15
+ ```
16
+
17
+ And then execute:
18
+ ```bash
19
+ $ bundle
20
+ ```
21
+
22
+ Or install it yourself as:
23
+ ```bash
24
+ $ gem install jquery-scrolltofixed-rails
25
+ ```
26
+
27
+ Copy:
28
+
29
+ ```
30
+ //=require jquery-scrolltofixed-rails
31
+ ```
32
+ In your:
33
+ ```
34
+ assets/javascripts/application.js
35
+ ```
36
+
37
+ ## Contributing
38
+ Just create a PR.
39
+
40
+ ## License
41
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rdoc/task'
10
+
11
+ RDoc::Task.new(:rdoc) do |rdoc|
12
+ rdoc.rdoc_dir = 'rdoc'
13
+ rdoc.title = 'Jquery::Scrolltofixed::Rails'
14
+ rdoc.options << '--line-numbers'
15
+ rdoc.rdoc_files.include('README.md')
16
+ rdoc.rdoc_files.include('lib/**/*.rb')
17
+ end
18
+
19
+ APP_RAKEFILE = File.expand_path('test/dummy/Rakefile', __dir__)
20
+ load 'rails/tasks/engine.rake'
21
+
22
+ load 'rails/tasks/statistics.rake'
23
+
24
+ require 'bundler/gem_tasks'
25
+
26
+ require 'rake/testtask'
27
+
28
+ Rake::TestTask.new(:test) do |t|
29
+ t.libs << 'test'
30
+ t.pattern = 'test/**/*_test.rb'
31
+ t.verbose = false
32
+ end
33
+
34
+ task default: :test
@@ -0,0 +1,567 @@
1
+ /*
2
+ * ScrollToFixed
3
+ * https://github.com/bigspotteddog/ScrollToFixed
4
+ *
5
+ * Copyright (c) 2011 Joseph Cava-Lynch
6
+ * MIT license
7
+ */
8
+ (function($) {
9
+ $.isScrollToFixed = function(el) {
10
+ return !!$(el).data('ScrollToFixed');
11
+ };
12
+
13
+ $.ScrollToFixed = function(el, options) {
14
+ // To avoid scope issues, use 'base' instead of 'this' to reference this
15
+ // class from internal events and functions.
16
+ var base = this;
17
+
18
+ // Access to jQuery and DOM versions of element.
19
+ base.$el = $(el);
20
+ base.el = el;
21
+
22
+ // Add a reverse reference to the DOM object.
23
+ base.$el.data('ScrollToFixed', base);
24
+
25
+ // A flag so we know if the scroll has been reset.
26
+ var isReset = false;
27
+
28
+ // The element that was given to us to fix if scrolled above the top of
29
+ // the page.
30
+ var target = base.$el;
31
+
32
+ var position;
33
+ var originalPosition;
34
+ var originalFloat;
35
+ var originalOffsetTop;
36
+ var originalZIndex;
37
+
38
+ // The offset top of the element when resetScroll was called. This is
39
+ // used to determine if we have scrolled past the top of the element.
40
+ var offsetTop = 0;
41
+
42
+ // The offset left of the element when resetScroll was called. This is
43
+ // used to move the element left or right relative to the horizontal
44
+ // scroll.
45
+ var offsetLeft = 0;
46
+ var originalOffsetLeft = -1;
47
+
48
+ // This last offset used to move the element horizontally. This is used
49
+ // to determine if we need to move the element because we would not want
50
+ // to do that for no reason.
51
+ var lastOffsetLeft = -1;
52
+
53
+ // This is the element used to fill the void left by the target element
54
+ // when it goes fixed; otherwise, everything below it moves up the page.
55
+ var spacer = null;
56
+
57
+ var spacerClass;
58
+
59
+ var className;
60
+
61
+ // Capture the original offsets for the target element. This needs to be
62
+ // called whenever the page size changes or when the page is first
63
+ // scrolled. For some reason, calling this before the page is first
64
+ // scrolled causes the element to become fixed too late.
65
+ function resetScroll() {
66
+ // Set the element to it original positioning.
67
+ target.trigger('preUnfixed.ScrollToFixed');
68
+ setUnfixed();
69
+ target.trigger('unfixed.ScrollToFixed');
70
+
71
+ // Reset the last offset used to determine if the page has moved
72
+ // horizontally.
73
+ lastOffsetLeft = -1;
74
+
75
+ // Capture the offset top of the target element.
76
+ offsetTop = target.offset().top;
77
+
78
+ // Capture the offset left of the target element.
79
+ offsetLeft = target.offset().left;
80
+
81
+ // If the offsets option is on, alter the left offset.
82
+ if (base.options.offsets) {
83
+ offsetLeft += (target.offset().left - target.position().left);
84
+ }
85
+
86
+ if (originalOffsetLeft == -1) {
87
+ originalOffsetLeft = offsetLeft;
88
+ }
89
+
90
+ position = target.css('position');
91
+
92
+ // Set that this has been called at least once.
93
+ isReset = true;
94
+
95
+ if (base.options.bottom != -1) {
96
+ target.trigger('preFixed.ScrollToFixed');
97
+ setFixed();
98
+ target.trigger('fixed.ScrollToFixed');
99
+ }
100
+ }
101
+
102
+ function getLimit() {
103
+ var limit = base.options.limit;
104
+ if (!limit) return 0;
105
+
106
+ if (typeof(limit) === 'function') {
107
+ return limit.apply(target);
108
+ }
109
+ return limit;
110
+ }
111
+
112
+ // Returns whether the target element is fixed or not.
113
+ function isFixed() {
114
+ return position === 'fixed';
115
+ }
116
+
117
+ // Returns whether the target element is absolute or not.
118
+ function isAbsolute() {
119
+ return position === 'absolute';
120
+ }
121
+
122
+ function isUnfixed() {
123
+ return !(isFixed() || isAbsolute());
124
+ }
125
+
126
+ // Sets the target element to fixed. Also, sets the spacer to fill the
127
+ // void left by the target element.
128
+ function setFixed() {
129
+ // Only fix the target element and the spacer if we need to.
130
+ if (!isFixed()) {
131
+ //get REAL dimensions (decimal fix)
132
+ //Ref. http://stackoverflow.com/questions/3603065/how-to-make-jquery-to-not-round-value-returned-by-width
133
+ var dimensions = target[0].getBoundingClientRect();
134
+
135
+ // Set the spacer to fill the height and width of the target
136
+ // element, then display it.
137
+ spacer.css({
138
+ 'display' : target.css('display'),
139
+ 'width' : dimensions.width,
140
+ 'height' : dimensions.height,
141
+ 'float' : target.css('float')
142
+ });
143
+
144
+ // Set the target element to fixed and set its width so it does
145
+ // not fill the rest of the page horizontally. Also, set its top
146
+ // to the margin top specified in the options.
147
+
148
+ cssOptions={
149
+ 'z-index' : base.options.zIndex,
150
+ 'position' : 'fixed',
151
+ 'top' : base.options.bottom == -1?getMarginTop():'',
152
+ 'bottom' : base.options.bottom == -1?'':base.options.bottom,
153
+ 'margin-left' : '0px'
154
+ }
155
+ if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); };
156
+
157
+ target.css(cssOptions);
158
+
159
+ target.addClass(base.options.baseClassName);
160
+
161
+ if (base.options.className) {
162
+ target.addClass(base.options.className);
163
+ }
164
+
165
+ position = 'fixed';
166
+ }
167
+ }
168
+
169
+ function setAbsolute() {
170
+
171
+ var top = getLimit();
172
+ var left = offsetLeft;
173
+
174
+ if (base.options.removeOffsets) {
175
+ left = '';
176
+ top = top - offsetTop;
177
+ }
178
+
179
+ cssOptions={
180
+ 'position' : 'absolute',
181
+ 'top' : top,
182
+ 'left' : left,
183
+ 'margin-left' : '0px',
184
+ 'bottom' : ''
185
+ }
186
+ if (!base.options.dontSetWidth){ cssOptions['width']=target.css('width'); };
187
+
188
+ target.css(cssOptions);
189
+
190
+ position = 'absolute';
191
+ }
192
+
193
+ // Sets the target element back to unfixed. Also, hides the spacer.
194
+ function setUnfixed() {
195
+ // Only unfix the target element and the spacer if we need to.
196
+ if (!isUnfixed()) {
197
+ lastOffsetLeft = -1;
198
+
199
+ // Hide the spacer now that the target element will fill the
200
+ // space.
201
+ spacer.css('display', 'none');
202
+
203
+ // Remove the style attributes that were added to the target.
204
+ // This will reverse the target back to the its original style.
205
+ target.css({
206
+ 'z-index' : originalZIndex,
207
+ 'width' : '',
208
+ 'position' : originalPosition,
209
+ 'left' : '',
210
+ 'top' : originalOffsetTop,
211
+ 'margin-left' : ''
212
+ });
213
+
214
+ target.removeClass('scroll-to-fixed-fixed');
215
+
216
+ if (base.options.className) {
217
+ target.removeClass(base.options.className);
218
+ }
219
+
220
+ position = null;
221
+ }
222
+ }
223
+
224
+ // Moves the target element left or right relative to the horizontal
225
+ // scroll position.
226
+ function setLeft(x) {
227
+ // Only if the scroll is not what it was last time we did this.
228
+ if (x != lastOffsetLeft) {
229
+ // Move the target element horizontally relative to its original
230
+ // horizontal position.
231
+ target.css('left', offsetLeft - x);
232
+
233
+ // Hold the last horizontal position set.
234
+ lastOffsetLeft = x;
235
+ }
236
+ }
237
+
238
+ function getMarginTop() {
239
+ var marginTop = base.options.marginTop;
240
+ if (!marginTop) return 0;
241
+
242
+ if (typeof(marginTop) === 'function') {
243
+ return marginTop.apply(target);
244
+ }
245
+ return marginTop;
246
+ }
247
+
248
+ // Checks to see if we need to do something based on new scroll position
249
+ // of the page.
250
+ function checkScroll() {
251
+ if (!$.isScrollToFixed(target) || target.is(':hidden')) return;
252
+ var wasReset = isReset;
253
+ var wasUnfixed = isUnfixed();
254
+
255
+ // If resetScroll has not yet been called, call it. This only
256
+ // happens once.
257
+ if (!isReset) {
258
+ resetScroll();
259
+ } else if (isUnfixed()) {
260
+ // if the offset has changed since the last scroll,
261
+ // we need to get it again.
262
+
263
+ // Capture the offset top of the target element.
264
+ offsetTop = target.offset().top;
265
+
266
+ // Capture the offset left of the target element.
267
+ offsetLeft = target.offset().left;
268
+ }
269
+
270
+ // Grab the current horizontal scroll position.
271
+ var x = $(window).scrollLeft();
272
+
273
+ // Grab the current vertical scroll position.
274
+ var y = $(window).scrollTop();
275
+
276
+ // Get the limit, if there is one.
277
+ var limit = getLimit();
278
+
279
+ // If the vertical scroll position, plus the optional margin, would
280
+ // put the target element at the specified limit, set the target
281
+ // element to absolute.
282
+ if (base.options.minWidth && $(window).width() < base.options.minWidth) {
283
+ if (!isUnfixed() || !wasReset) {
284
+ postPosition();
285
+ target.trigger('preUnfixed.ScrollToFixed');
286
+ setUnfixed();
287
+ target.trigger('unfixed.ScrollToFixed');
288
+ }
289
+ } else if (base.options.maxWidth && $(window).width() > base.options.maxWidth) {
290
+ if (!isUnfixed() || !wasReset) {
291
+ postPosition();
292
+ target.trigger('preUnfixed.ScrollToFixed');
293
+ setUnfixed();
294
+ target.trigger('unfixed.ScrollToFixed');
295
+ }
296
+ } else if (base.options.bottom == -1) {
297
+ // If the vertical scroll position, plus the optional margin, would
298
+ // put the target element at the specified limit, set the target
299
+ // element to absolute.
300
+ if (limit > 0 && y >= limit - getMarginTop()) {
301
+ if (!wasUnfixed && (!isAbsolute() || !wasReset)) {
302
+ postPosition();
303
+ target.trigger('preAbsolute.ScrollToFixed');
304
+ setAbsolute();
305
+ target.trigger('unfixed.ScrollToFixed');
306
+ }
307
+ // If the vertical scroll position, plus the optional margin, would
308
+ // put the target element above the top of the page, set the target
309
+ // element to fixed.
310
+ } else if (y >= offsetTop - getMarginTop()) {
311
+ if (!isFixed() || !wasReset) {
312
+ postPosition();
313
+ target.trigger('preFixed.ScrollToFixed');
314
+
315
+ // Set the target element to fixed.
316
+ setFixed();
317
+
318
+ // Reset the last offset left because we just went fixed.
319
+ lastOffsetLeft = -1;
320
+
321
+ target.trigger('fixed.ScrollToFixed');
322
+ }
323
+ // If the page has been scrolled horizontally as well, move the
324
+ // target element accordingly.
325
+ setLeft(x);
326
+ } else {
327
+ // Set the target element to unfixed, placing it where it was
328
+ // before.
329
+ if (!isUnfixed() || !wasReset) {
330
+ postPosition();
331
+ target.trigger('preUnfixed.ScrollToFixed');
332
+ setUnfixed();
333
+ target.trigger('unfixed.ScrollToFixed');
334
+ }
335
+ }
336
+ } else {
337
+ if (limit > 0) {
338
+ if (y + $(window).height() - target.outerHeight(true) >= limit - (getMarginTop() || -getBottom())) {
339
+ if (isFixed()) {
340
+ postPosition();
341
+ target.trigger('preUnfixed.ScrollToFixed');
342
+
343
+ if (originalPosition === 'absolute') {
344
+ setAbsolute();
345
+ } else {
346
+ setUnfixed();
347
+ }
348
+
349
+ target.trigger('unfixed.ScrollToFixed');
350
+ }
351
+ } else {
352
+ if (!isFixed()) {
353
+ postPosition();
354
+ target.trigger('preFixed.ScrollToFixed');
355
+ setFixed();
356
+ }
357
+ setLeft(x);
358
+ target.trigger('fixed.ScrollToFixed');
359
+ }
360
+ } else {
361
+ setLeft(x);
362
+ }
363
+ }
364
+ }
365
+
366
+ function getBottom() {
367
+ if (!base.options.bottom) return 0;
368
+ return base.options.bottom;
369
+ }
370
+
371
+ function postPosition() {
372
+ var position = target.css('position');
373
+
374
+ if (position == 'absolute') {
375
+ target.trigger('postAbsolute.ScrollToFixed');
376
+ } else if (position == 'fixed') {
377
+ target.trigger('postFixed.ScrollToFixed');
378
+ } else {
379
+ target.trigger('postUnfixed.ScrollToFixed');
380
+ }
381
+ }
382
+
383
+ var windowResize = function(event) {
384
+ // Check if the element is visible before updating it's position, which
385
+ // improves behavior with responsive designs where this element is hidden.
386
+ if(target.is(':visible')) {
387
+ isReset = false;
388
+ checkScroll();
389
+ } else {
390
+ // Ensure the spacer is hidden
391
+ setUnfixed();
392
+ }
393
+ }
394
+
395
+ var windowScroll = function(event) {
396
+ (!!window.requestAnimationFrame) ? requestAnimationFrame(checkScroll) : checkScroll();
397
+ }
398
+
399
+ // From: http://kangax.github.com/cft/#IS_POSITION_FIXED_SUPPORTED
400
+ var isPositionFixedSupported = function() {
401
+ var container = document.body;
402
+
403
+ if (document.createElement && container && container.appendChild && container.removeChild) {
404
+ var el = document.createElement('div');
405
+
406
+ if (!el.getBoundingClientRect) return null;
407
+
408
+ el.innerHTML = 'x';
409
+ el.style.cssText = 'position:fixed;top:100px;';
410
+ container.appendChild(el);
411
+
412
+ var originalHeight = container.style.height,
413
+ originalScrollTop = container.scrollTop;
414
+
415
+ container.style.height = '3000px';
416
+ container.scrollTop = 500;
417
+
418
+ var elementTop = el.getBoundingClientRect().top;
419
+ container.style.height = originalHeight;
420
+
421
+ var isSupported = (elementTop === 100);
422
+ container.removeChild(el);
423
+ container.scrollTop = originalScrollTop;
424
+
425
+ return isSupported;
426
+ }
427
+
428
+ return null;
429
+ }
430
+
431
+ var preventDefault = function(e) {
432
+ e = e || window.event;
433
+ if (e.preventDefault) {
434
+ e.preventDefault();
435
+ }
436
+ e.returnValue = false;
437
+ }
438
+
439
+ // Initializes this plugin. Captures the options passed in, turns this
440
+ // off for devices that do not support fixed position, adds the spacer,
441
+ // and binds to the window scroll and resize events.
442
+ base.init = function() {
443
+ // Capture the options for this plugin.
444
+ base.options = $.extend({}, $.ScrollToFixed.defaultOptions, options);
445
+
446
+ originalZIndex = target.css('z-index')
447
+
448
+ // Turn off this functionality for devices that do not support it.
449
+ // if (!(base.options && base.options.dontCheckForPositionFixedSupport)) {
450
+ // var fixedSupported = isPositionFixedSupported();
451
+ // if (!fixedSupported) return;
452
+ // }
453
+
454
+ // Put the target element on top of everything that could be below
455
+ // it. This reduces flicker when the target element is transitioning
456
+ // to fixed.
457
+ base.$el.css('z-index', base.options.zIndex);
458
+
459
+ // Create a spacer element to fill the void left by the target
460
+ // element when it goes fixed.
461
+ spacer = $('<div />');
462
+
463
+ position = target.css('position');
464
+ originalPosition = target.css('position');
465
+ originalFloat = target.css('float');
466
+ originalOffsetTop = target.css('top');
467
+
468
+ // Place the spacer right after the target element.
469
+ if (isUnfixed()) base.$el.after(spacer);
470
+
471
+ // Reset the target element offsets when the window is resized, then
472
+ // check to see if we need to fix or unfix the target element.
473
+ $(window).bind('resize.ScrollToFixed', windowResize);
474
+
475
+ // When the window scrolls, check to see if we need to fix or unfix
476
+ // the target element.
477
+ $(window).bind('scroll.ScrollToFixed', windowScroll);
478
+
479
+ // For touch devices, call checkScroll directlly rather than
480
+ // rAF wrapped windowScroll to animate the element
481
+ if ('ontouchmove' in window) {
482
+ $(window).bind('touchmove.ScrollToFixed', checkScroll);
483
+ }
484
+
485
+ if (base.options.preFixed) {
486
+ target.bind('preFixed.ScrollToFixed', base.options.preFixed);
487
+ }
488
+ if (base.options.postFixed) {
489
+ target.bind('postFixed.ScrollToFixed', base.options.postFixed);
490
+ }
491
+ if (base.options.preUnfixed) {
492
+ target.bind('preUnfixed.ScrollToFixed', base.options.preUnfixed);
493
+ }
494
+ if (base.options.postUnfixed) {
495
+ target.bind('postUnfixed.ScrollToFixed', base.options.postUnfixed);
496
+ }
497
+ if (base.options.preAbsolute) {
498
+ target.bind('preAbsolute.ScrollToFixed', base.options.preAbsolute);
499
+ }
500
+ if (base.options.postAbsolute) {
501
+ target.bind('postAbsolute.ScrollToFixed', base.options.postAbsolute);
502
+ }
503
+ if (base.options.fixed) {
504
+ target.bind('fixed.ScrollToFixed', base.options.fixed);
505
+ }
506
+ if (base.options.unfixed) {
507
+ target.bind('unfixed.ScrollToFixed', base.options.unfixed);
508
+ }
509
+
510
+ if (base.options.spacerClass) {
511
+ spacer.addClass(base.options.spacerClass);
512
+ }
513
+
514
+ target.bind('resize.ScrollToFixed', function() {
515
+ spacer.height(target.height());
516
+ });
517
+
518
+ target.bind('scroll.ScrollToFixed', function() {
519
+ target.trigger('preUnfixed.ScrollToFixed');
520
+ setUnfixed();
521
+ target.trigger('unfixed.ScrollToFixed');
522
+ checkScroll();
523
+ });
524
+
525
+ target.bind('detach.ScrollToFixed', function(ev) {
526
+ preventDefault(ev);
527
+
528
+ target.trigger('preUnfixed.ScrollToFixed');
529
+ setUnfixed();
530
+ target.trigger('unfixed.ScrollToFixed');
531
+
532
+ $(window).unbind('resize.ScrollToFixed', windowResize);
533
+ $(window).unbind('scroll.ScrollToFixed', windowScroll);
534
+
535
+ target.unbind('.ScrollToFixed');
536
+
537
+ //remove spacer from dom
538
+ spacer.remove();
539
+
540
+ base.$el.removeData('ScrollToFixed');
541
+ });
542
+
543
+ // Reset everything.
544
+ windowResize();
545
+ };
546
+
547
+ // Initialize the plugin.
548
+ base.init();
549
+ };
550
+
551
+ // Sets the option defaults.
552
+ $.ScrollToFixed.defaultOptions = {
553
+ marginTop : 0,
554
+ limit : 0,
555
+ bottom : -1,
556
+ zIndex : 1000,
557
+ baseClassName: 'scroll-to-fixed-fixed'
558
+ };
559
+
560
+ // Returns enhanced elements that will fix to the top of the page when the
561
+ // page is scrolled.
562
+ $.fn.scrollToFixed = function(options) {
563
+ return this.each(function() {
564
+ (new $.ScrollToFixed(this, options));
565
+ });
566
+ };
567
+ })(jQuery);
@@ -0,0 +1,15 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ class ApplicationController < ActionController::Base
7
+ protect_from_forgery with: :exception
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ module ApplicationHelper
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ class ApplicationJob < ActiveJob::Base
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ class ApplicationMailer < ActionMailer::Base
7
+ default from: 'from@example.com'
8
+ layout 'mailer'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ class ApplicationRecord < ActiveRecord::Base
7
+ self.abstract_class = true
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Jquery scrolltofixed rails</title>
5
+ <%= csrf_meta_tags %>
6
+ <%= csp_meta_tag %>
7
+
8
+ <%= stylesheet_link_tag "jquery/scrolltofixed/rails/application", media: "all" %>
9
+ </head>
10
+ <body>
11
+
12
+ <%= yield %>
13
+
14
+ </body>
15
+ </html>
data/config/routes.rb ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ Jquery::Scrolltofixed::Rails::Engine.routes.draw do
4
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'jquery/scrolltofixed/rails/engine'
4
+
5
+ module Jquery
6
+ module Scrolltofixed
7
+ module Rails
8
+ # Your code goes here...
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ class Engine < ::Rails::Engine
7
+ isolate_namespace Jquery::Scrolltofixed::Rails
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Jquery
4
+ module Scrolltofixed
5
+ module Rails
6
+ VERSION = '0.1.0'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :jquery_scrolltofixed_rails do
5
+ # # Task goes here
6
+ # end
metadata ADDED
@@ -0,0 +1,103 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery-scrolltofixed-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Pablo Gonzaga
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-08-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: sqlite3
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Integrates JQuery ScrollToFixed to Rails Sprockets
56
+ email:
57
+ - pgonzaga.uy@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - MIT-LICENSE
63
+ - README.md
64
+ - Rakefile
65
+ - app/assets/config/jquery_scrolltofixed_rails_manifest.js
66
+ - app/assets/javascripts/jquery-scrolltofixed-rails.js
67
+ - app/assets/stylesheets/jquery/scrolltofixed/rails/application.css
68
+ - app/controllers/jquery/scrolltofixed/rails/application_controller.rb
69
+ - app/helpers/jquery/scrolltofixed/rails/application_helper.rb
70
+ - app/jobs/jquery/scrolltofixed/rails/application_job.rb
71
+ - app/mailers/jquery/scrolltofixed/rails/application_mailer.rb
72
+ - app/models/jquery/scrolltofixed/rails/application_record.rb
73
+ - app/views/layouts/jquery/scrolltofixed/rails/application.html.erb
74
+ - config/routes.rb
75
+ - lib/jquery/scrolltofixed/rails.rb
76
+ - lib/jquery/scrolltofixed/rails/engine.rb
77
+ - lib/jquery/scrolltofixed/rails/version.rb
78
+ - lib/tasks/jquery/scrolltofixed/rails_tasks.rake
79
+ homepage: https://github.com/pgonzaga/jquery-scrolltofixed-rails
80
+ licenses:
81
+ - MIT
82
+ metadata: {}
83
+ post_install_message:
84
+ rdoc_options: []
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project:
99
+ rubygems_version: 2.7.6
100
+ signing_key:
101
+ specification_version: 4
102
+ summary: JQuery ScrollToFixed Rails integration
103
+ test_files: []