waypoints-rails 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/waypoints-rails.rb +8 -0
- data/lib/waypoints-rails/version.rb +5 -0
- data/vendor/assets/javascripts/waypoints-infinite.js.coffee +104 -0
- data/vendor/assets/javascripts/waypoints-sticky.js.coffee +83 -0
- data/vendor/assets/javascripts/waypoints.js.coffee +692 -0
- data/waypoints-rails.gemspec +25 -0
- metadata +99 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 9b7c5e8a73912400678a776161f484976f19d3bd
|
4
|
+
data.tar.gz: b7a5cc6567f6f571d6bb1cf8b9dddfc2d1965bf8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 72ef4d9d7ec4e6380222a93cbbb2d50f3e659ab6519792f01032d2bd0e150567c61cc26331d9930fe569600b57f8d90bf7563e59994d271a5625f2e4794374ef
|
7
|
+
data.tar.gz: 27030629d1dbee075019011d03cb1a7507df813329d217af4a1e0b0f682ec73c04a8206e4f6c61f1b8cc338f761d19310bacd68ac54c36b7c6e9275d04bf4817
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Yoav Matchulsky
|
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,29 @@
|
|
1
|
+
# Waypoints::Rails
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'waypoints-rails'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install waypoints-rails
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,104 @@
|
|
1
|
+
###
|
2
|
+
Infinite Scroll Shortcut for jQuery Waypoints - v2.0.4
|
3
|
+
Copyright (c) 2011-2014 Caleb Troughton
|
4
|
+
Dual licensed under the MIT license and GPL license.
|
5
|
+
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
|
6
|
+
###
|
7
|
+
((root, factory) ->
|
8
|
+
if typeof define is 'function' and define.amd
|
9
|
+
define ['jquery', 'waypoints'], factory
|
10
|
+
else
|
11
|
+
factory root.jQuery
|
12
|
+
) this, ($) ->
|
13
|
+
|
14
|
+
# An extension of the waypoint defaults when calling the "infinite" method.
|
15
|
+
|
16
|
+
# - container: Selector that matches a container around the items that are
|
17
|
+
# infinitely loaded. Newly loaded items will be appended to this container.
|
18
|
+
# If this value is set to 'auto' as it is by default, the container will be
|
19
|
+
# the element .waypoint is called on.
|
20
|
+
|
21
|
+
# - items: Selector that matches the items to pull from each AJAX loaded
|
22
|
+
# page and append to the "container".
|
23
|
+
|
24
|
+
# - more: Selector that matches the next-page link. The href attribute of
|
25
|
+
# this anchor is AJAX loaded and harvested for new items and a new "more"
|
26
|
+
# link during each waypoint trigger.
|
27
|
+
|
28
|
+
# - offset: The same as the base waypoint offset. But in this case, we use
|
29
|
+
# bottom-in-view as the default instead of 0.
|
30
|
+
|
31
|
+
# - loadingClass: This class is added to the container while new items are
|
32
|
+
# being loaded, and removed once they are loaded and appended.
|
33
|
+
|
34
|
+
# - onBeforePageLoad: A callback function that is executed at the beginning
|
35
|
+
# of a page load trigger, before the AJAX request is sent.
|
36
|
+
|
37
|
+
# - onAfterPageLoad: A callback function that is executed at the end of a new
|
38
|
+
# page load, after new items have been appended.
|
39
|
+
defaults =
|
40
|
+
container: 'auto'
|
41
|
+
items: '.infinite-item'
|
42
|
+
more: '.infinite-more-link'
|
43
|
+
offset: 'bottom-in-view'
|
44
|
+
loadingClass: 'infinite-loading'
|
45
|
+
onBeforePageLoad: $.noop
|
46
|
+
onAfterPageLoad: $.noop
|
47
|
+
|
48
|
+
# .waypoint('infinite', [object])
|
49
|
+
|
50
|
+
# The infinite method is a shortcut method for a common UI pattern, infinite
|
51
|
+
# scrolling. This turns a traditional More/Next-Page style pagination into
|
52
|
+
# an infinite scrolling page. The recommended usage is to call this method
|
53
|
+
# on the container holding the items to be loaded. Ex:
|
54
|
+
|
55
|
+
# $('.infinite-container').waypoint('infinite');
|
56
|
+
|
57
|
+
# Using all of the default options, when the bottom of the infinite container
|
58
|
+
# comes into view, a new page of items will be loaded. The script will look
|
59
|
+
# for a link with the class of "infinite-more-link", grab its href attribute,
|
60
|
+
# and load that page with AJAX. It will then search for all items in this new
|
61
|
+
# page with a class of "infinite-item" and will append them to the
|
62
|
+
# "infinite-container". The "infinite-more-link" item is also replaced with
|
63
|
+
# the more link from the new page, allowing the next trigger to load the next
|
64
|
+
# page. This continues until no new more link is detected in the loaded page.
|
65
|
+
|
66
|
+
# An options object can optionally be passed in to override any of the
|
67
|
+
# defaults specified above, as well as the baseline waypoint defaults.
|
68
|
+
|
69
|
+
$.waypoints 'extendFn', 'infinite', (options) ->
|
70
|
+
options = $.extend {}, $.fn.waypoint.defaults, defaults, options
|
71
|
+
return @ if $(options.more).length is 0
|
72
|
+
$container = if options.container is 'auto' then @ else $ options.container
|
73
|
+
|
74
|
+
options.handler = (direction) ->
|
75
|
+
if direction in ['down', 'right']
|
76
|
+
$this = $ this
|
77
|
+
options.onBeforePageLoad()
|
78
|
+
|
79
|
+
# We disable the waypoint during item loading so that we can't trigger
|
80
|
+
# it again and cause duplicate loads.
|
81
|
+
$this.waypoint 'disable'
|
82
|
+
|
83
|
+
# During loading a class is added to the container, should the user
|
84
|
+
# wish to style it during this state.
|
85
|
+
$container.addClass options.loadingClass
|
86
|
+
|
87
|
+
# Load items from the next page.
|
88
|
+
$.get $(options.more).attr('href'), (data) ->
|
89
|
+
$data = $ $.parseHTML(data)
|
90
|
+
$more = $ options.more
|
91
|
+
$newMore = $data.find options.more
|
92
|
+
$container.append $data.find options.items
|
93
|
+
$container.removeClass options.loadingClass
|
94
|
+
|
95
|
+
if $newMore.length
|
96
|
+
$more.replaceWith $newMore
|
97
|
+
$this.waypoint 'enable'
|
98
|
+
else
|
99
|
+
$this.waypoint 'destroy'
|
100
|
+
options.onAfterPageLoad()
|
101
|
+
|
102
|
+
# Initialize the waypoint with our built-up options. Returns the original
|
103
|
+
# jQuery object per normal for chaining.
|
104
|
+
@waypoint options
|
@@ -0,0 +1,83 @@
|
|
1
|
+
###
|
2
|
+
Sticky Elements Shortcut for jQuery Waypoints - v2.0.4
|
3
|
+
Copyright (c) 2011-2014 Caleb Troughton
|
4
|
+
Dual licensed under the MIT license and GPL license.
|
5
|
+
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
|
6
|
+
###
|
7
|
+
((root, factory) ->
|
8
|
+
if typeof define is 'function' and define.amd
|
9
|
+
define ['jquery', 'waypoints'], factory
|
10
|
+
else
|
11
|
+
factory root.jQuery
|
12
|
+
) this, ($) ->
|
13
|
+
|
14
|
+
# An extension of the waypoint defaults when calling the "sticky" method.
|
15
|
+
|
16
|
+
# - wrapper: Each sticky element gets wrapped in another element. This
|
17
|
+
# element acts as the actual waypoint and stays in the document flow,
|
18
|
+
# leaving the sticky element to gain/lost fixed positioning freely without
|
19
|
+
# effecting layout. "wrapper" is the HTML for this element.
|
20
|
+
|
21
|
+
# - stuckClass: The class that is added to the sticky element when the
|
22
|
+
# waypoint is reached. Users should style this class to add fixed
|
23
|
+
# positioning and whatever other styles are necessary for their
|
24
|
+
# particular design.
|
25
|
+
defaults =
|
26
|
+
wrapper: '<div class="sticky-wrapper" />'
|
27
|
+
stuckClass: 'stuck'
|
28
|
+
|
29
|
+
# Internal: Wraps the sticky elements in the sticky wrapper and returns the
|
30
|
+
# wrapper elements.
|
31
|
+
wrap = ($elements, options) ->
|
32
|
+
$elements.wrap options.wrapper
|
33
|
+
$elements.parent()
|
34
|
+
|
35
|
+
# .waypoint('sticky', [object])
|
36
|
+
|
37
|
+
# The sticky method is a shortcut method for a common UI pattern, sticky
|
38
|
+
# elements. In its most common form, this pattern consists of an item that
|
39
|
+
# is part of the normal document flow until it reaches the top of the
|
40
|
+
# viewport, where it gains a fixed position state.
|
41
|
+
|
42
|
+
# This shortcut does very little to actually create the sticky state. It only
|
43
|
+
# adds a class to the element when it reaches the appropriate part of the
|
44
|
+
# viewport. It is the job of the user to define the styles for this "stuck"
|
45
|
+
# state in CSS. There are many different ways one could style their sticky
|
46
|
+
# elements, and trying to implement all of them in JS is futile. Everyone's
|
47
|
+
# design is different.
|
48
|
+
|
49
|
+
# This shortcut does take care of the most common pitfall in previous
|
50
|
+
# versions of Waypoints: Using the sticky element as the waypoint. Fixed
|
51
|
+
# position elements do not work well as waypoints since their position in
|
52
|
+
# the document is constantly changing as the user scrolls (and their
|
53
|
+
# position relative to the viewport never does, which is the whole point of
|
54
|
+
# Waypoints). This shortcut will create a wrapper element around the sticky
|
55
|
+
# element that acts as the actual waypoint, as well as a placeholder for the
|
56
|
+
# waypoint in the document flow, as fixed positioning takes an element out
|
57
|
+
# of flow and would otherwise effect the page layout. Users are recommended
|
58
|
+
# to define any margins on their sticky elements as margins on this
|
59
|
+
# wrapper instead.
|
60
|
+
|
61
|
+
$.waypoints 'extendFn', 'sticky', (opt) ->
|
62
|
+
options = $.extend {}, $.fn.waypoint.defaults, defaults, opt
|
63
|
+
$wrap = wrap this, options
|
64
|
+
originalHandler = options.handler
|
65
|
+
options.handler = (direction) ->
|
66
|
+
$sticky = $(this).children ':first'
|
67
|
+
shouldBeStuck = direction in ['down', 'right']
|
68
|
+
$sticky.toggleClass options.stuckClass, shouldBeStuck
|
69
|
+
$wrap.height if shouldBeStuck then $sticky.outerHeight() else ''
|
70
|
+
originalHandler.call this, direction if originalHandler?
|
71
|
+
$wrap.waypoint options
|
72
|
+
this.data 'stuckClass', options.stuckClass
|
73
|
+
|
74
|
+
# .waypoint('unsticky')
|
75
|
+
|
76
|
+
# Undoes everything done within the sticky shortcut by removing the parent
|
77
|
+
# sticky wrapper, destroying the waypoint, and removing any stuck class
|
78
|
+
# that may be applied.
|
79
|
+
|
80
|
+
$.waypoints 'extendFn', 'unsticky', () ->
|
81
|
+
this.parent().waypoint 'destroy'
|
82
|
+
this.unwrap()
|
83
|
+
this.removeClass this.data 'stuckClass'
|
@@ -0,0 +1,692 @@
|
|
1
|
+
###
|
2
|
+
jQuery Waypoints - v2.0.4
|
3
|
+
Copyright (c) 2011-2014 Caleb Troughton
|
4
|
+
Dual licensed under the MIT license and GPL license.
|
5
|
+
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
|
6
|
+
###
|
7
|
+
((root, factory) ->
|
8
|
+
if typeof define is 'function' and define.amd
|
9
|
+
define 'waypoints', ['jquery'], ($) ->
|
10
|
+
factory $, root
|
11
|
+
else
|
12
|
+
factory root.jQuery, root
|
13
|
+
) this, ($, window) ->
|
14
|
+
$w = $ window
|
15
|
+
|
16
|
+
# Touch support feature test
|
17
|
+
isTouch = 'ontouchstart' in window
|
18
|
+
|
19
|
+
# Internal plugin-wide variables:
|
20
|
+
|
21
|
+
# - allWaypoints: A hash containing two hashes, one for vertical waypoints
|
22
|
+
# and one for horizontal waypoints. In each hash they value is a Waypoint
|
23
|
+
# instance and the key is that waypoint's unique ID.
|
24
|
+
|
25
|
+
# - contextCounter: A counter that is incremented with each instantiation
|
26
|
+
# of the Context class, used in its unique ID.
|
27
|
+
|
28
|
+
# - contexts: A hash of all contexts. The value of each entry is a Context
|
29
|
+
# instance and the key is that context's unique ID.
|
30
|
+
|
31
|
+
# - contextKey: The DOM element for each context keeps a reference to the
|
32
|
+
# context's unique ID in the jQuery .data() object. This is the key for
|
33
|
+
# that data entry.
|
34
|
+
|
35
|
+
# - resizeEvent: The namespaced resize event used by contexts.
|
36
|
+
|
37
|
+
# - scrollEvent: The namespaced scroll event used by contexts.
|
38
|
+
|
39
|
+
# - waypointCounter: A counter that is incremented with each instantiation
|
40
|
+
# of the Waypoint class, used in its unique ID.
|
41
|
+
|
42
|
+
# - waypointKey: The DOM element for each waypoint keeps a reference to an
|
43
|
+
# array of the unique IDs of all waypoints attached to that element. This
|
44
|
+
# array is kept in the jQuery .data() object, and this is the key for
|
45
|
+
# that entry.
|
46
|
+
|
47
|
+
# - wp: A variable shortcut for the waypoint method name on the $.fn object.
|
48
|
+
# Using this variable just helps with minification.
|
49
|
+
|
50
|
+
# - wps: A variable shortcut for the waypoints method name on the $ object.
|
51
|
+
# Using this variable just helps with minification.
|
52
|
+
|
53
|
+
allWaypoints =
|
54
|
+
horizontal: {}
|
55
|
+
vertical: {}
|
56
|
+
contextCounter = 1
|
57
|
+
contexts = {}
|
58
|
+
contextKey = 'waypoints-context-id'
|
59
|
+
resizeEvent = 'resize.waypoints'
|
60
|
+
scrollEvent = 'scroll.waypoints'
|
61
|
+
waypointCounter = 1
|
62
|
+
waypointKey = 'waypoints-waypoint-ids'
|
63
|
+
wp = 'waypoint'
|
64
|
+
wps = 'waypoints'
|
65
|
+
|
66
|
+
# Context: Represents a single scrolling element in which waypoints live.
|
67
|
+
# For most users there will only be one Context, the window, but users can
|
68
|
+
# use other scrollable elements as a context using the "context" option
|
69
|
+
# when creating waypoints.
|
70
|
+
|
71
|
+
# Properties:
|
72
|
+
|
73
|
+
# - $element: jQuery object containing the context element.
|
74
|
+
|
75
|
+
# - element: The raw HTMLNode of the context element.
|
76
|
+
|
77
|
+
# - didResize: A flag used in throttling the resize event.
|
78
|
+
|
79
|
+
# - didScroll: A flag used in throttling the scroll event.
|
80
|
+
|
81
|
+
# - id: A unique identifier for the context.
|
82
|
+
|
83
|
+
# - oldScroll: A hash containing...
|
84
|
+
# - x: The context's last known horizontal scroll value.
|
85
|
+
# - y: The context's last known vertical scroll value.
|
86
|
+
|
87
|
+
# - waypoints: A hash containing two hashes with all waypoints in the context.
|
88
|
+
# Entries are in the same style as the allWaypoints hashes:
|
89
|
+
# (key = waypoint.id, value = waypoint)
|
90
|
+
# - horizontal: A hash of all horizontal waypoints.
|
91
|
+
# - vertical: A hash of all vertical waypoints.
|
92
|
+
|
93
|
+
class Context
|
94
|
+
constructor: ($element) ->
|
95
|
+
@$element = $element
|
96
|
+
@element = $element[0]
|
97
|
+
@didResize = no
|
98
|
+
@didScroll = no
|
99
|
+
@id = 'context' + contextCounter++
|
100
|
+
@oldScroll =
|
101
|
+
x: $element.scrollLeft()
|
102
|
+
y: $element.scrollTop()
|
103
|
+
@waypoints =
|
104
|
+
horizontal: {}
|
105
|
+
vertical: {}
|
106
|
+
|
107
|
+
# We need to keep a reference to this Context instance on the DOM node
|
108
|
+
# so we can look it up later based on the node.
|
109
|
+
@element[contextKey] = @id
|
110
|
+
|
111
|
+
# To do that look up, we need to have this instance in the global hash.
|
112
|
+
contexts[@id] = this
|
113
|
+
|
114
|
+
# Run scroll checks on scroll, but throttle it for performance reasons.
|
115
|
+
$element.bind scrollEvent, =>
|
116
|
+
unless @didScroll or isTouch
|
117
|
+
@didScroll = yes
|
118
|
+
scrollHandler = =>
|
119
|
+
@doScroll()
|
120
|
+
@didScroll = no
|
121
|
+
window.setTimeout scrollHandler, $[wps].settings.scrollThrottle
|
122
|
+
|
123
|
+
# Run a refresh on resize, but throttle it for performance reasons.
|
124
|
+
$element.bind resizeEvent, =>
|
125
|
+
unless @didResize
|
126
|
+
@didResize = yes
|
127
|
+
resizeHandler = =>
|
128
|
+
$[wps] 'refresh'
|
129
|
+
@didResize = no
|
130
|
+
window.setTimeout resizeHandler, $[wps].settings.resizeThrottle
|
131
|
+
|
132
|
+
# doScroll()
|
133
|
+
|
134
|
+
# Looks at the new scroll values for the context, compares them to the old
|
135
|
+
# scroll values, and checks to see if any waypoints should be triggered
|
136
|
+
# by that change.
|
137
|
+
doScroll: ->
|
138
|
+
|
139
|
+
# We use some hashes with common values for each axis so that we can
|
140
|
+
# just iterate over it rather than write the whole thing twice for
|
141
|
+
# each axis.
|
142
|
+
axes =
|
143
|
+
horizontal:
|
144
|
+
newScroll: @$element.scrollLeft()
|
145
|
+
oldScroll: @oldScroll.x
|
146
|
+
forward: 'right'
|
147
|
+
backward: 'left'
|
148
|
+
vertical:
|
149
|
+
newScroll: @$element.scrollTop()
|
150
|
+
oldScroll: @oldScroll.y
|
151
|
+
forward: 'down'
|
152
|
+
backward: 'up'
|
153
|
+
|
154
|
+
# This is a small "hack" for iOS, needed because scrolls in mobile
|
155
|
+
# Safari that start or end with the URL bar showing will cause window
|
156
|
+
# height changes without firing a resize event.
|
157
|
+
if isTouch and (!axes.vertical.oldScroll or !axes.vertical.newScroll)
|
158
|
+
$[wps] 'refresh'
|
159
|
+
|
160
|
+
# For each axis, check to see if any waypoints have been crossed.
|
161
|
+
# Also determine the direction it's being crossed and sort/reverse all
|
162
|
+
# crossed waypoints accordingly. And, of course, trigger the waypoints.
|
163
|
+
$.each axes, (aKey, axis) =>
|
164
|
+
triggered = []
|
165
|
+
isForward = axis.newScroll > axis.oldScroll
|
166
|
+
direction = if isForward then axis.forward else axis.backward
|
167
|
+
$.each @waypoints[aKey], (wKey, waypoint) ->
|
168
|
+
if axis.oldScroll < waypoint.offset <= axis.newScroll
|
169
|
+
triggered.push waypoint
|
170
|
+
else if axis.newScroll < waypoint.offset <= axis.oldScroll
|
171
|
+
triggered.push waypoint
|
172
|
+
triggered.sort (a, b) -> a.offset - b.offset
|
173
|
+
triggered.reverse() unless isForward
|
174
|
+
$.each triggered, (i, waypoint) ->
|
175
|
+
if waypoint.options.continuous or i is triggered.length - 1
|
176
|
+
waypoint.trigger [direction]
|
177
|
+
|
178
|
+
# Now that we're done with the check, the new scroll values become
|
179
|
+
# the old scroll values for the next check.
|
180
|
+
@oldScroll =
|
181
|
+
x: axes.horizontal.newScroll
|
182
|
+
y: axes.vertical.newScroll
|
183
|
+
|
184
|
+
# refresh()
|
185
|
+
# Runs through all of the waypoints in the context and recalculates
|
186
|
+
# their offsets (the scroll value at which the waypoint is triggered.)
|
187
|
+
# If a change in offset also happens to cross the context's current
|
188
|
+
# scroll value, the waypoint will be triggered in the appropriate direction
|
189
|
+
# unless prevented by the "onlyOnScroll" waypoint option.
|
190
|
+
refresh: () ->
|
191
|
+
isWin = $.isWindow @element
|
192
|
+
cOffset = @$element.offset()
|
193
|
+
|
194
|
+
# Make sure we have the most up-to-date scroll values for our context.
|
195
|
+
@doScroll()
|
196
|
+
|
197
|
+
# Each axis recalculation needs to know some things:
|
198
|
+
|
199
|
+
# - contextOffset: The distance between the edge of the document and
|
200
|
+
# the context element.
|
201
|
+
|
202
|
+
# - contextScroll: The scroll value of the context. However, if the
|
203
|
+
# context is the window this needs to be 0 because this value only
|
204
|
+
# comes into play when used in adjustment calculations for non-window
|
205
|
+
# context waypoints.
|
206
|
+
|
207
|
+
# - contextDimension: Width or height of the context.
|
208
|
+
|
209
|
+
# - oldScroll: The scroll value of the context. Unlike "contextScroll",
|
210
|
+
# this is the same no matter the type of context, and is used when
|
211
|
+
# determining whether a newly added waypoint should immediately fire
|
212
|
+
# on its first offset calculation.
|
213
|
+
|
214
|
+
# - forward: Direction string passed to forward waypoint triggers.
|
215
|
+
|
216
|
+
# - backward: Direction string passed to backward waypoint triggers.
|
217
|
+
|
218
|
+
# - offsetProp: Key of the .offset() object for this axis.
|
219
|
+
axes =
|
220
|
+
horizontal:
|
221
|
+
contextOffset: if isWin then 0 else cOffset.left
|
222
|
+
contextScroll: if isWin then 0 else @oldScroll.x
|
223
|
+
contextDimension: @$element.width()
|
224
|
+
oldScroll: @oldScroll.x
|
225
|
+
forward: 'right'
|
226
|
+
backward: 'left'
|
227
|
+
offsetProp: 'left'
|
228
|
+
vertical:
|
229
|
+
contextOffset: if isWin then 0 else cOffset.top
|
230
|
+
contextScroll: if isWin then 0 else @oldScroll.y
|
231
|
+
contextDimension: if isWin then $[wps]('viewportHeight') else \
|
232
|
+
@$element.height()
|
233
|
+
oldScroll: @oldScroll.y
|
234
|
+
forward: 'down'
|
235
|
+
backward: 'up'
|
236
|
+
offsetProp: 'top'
|
237
|
+
|
238
|
+
# For each axis, run through the waypoints. Store the old offset.
|
239
|
+
# Recalculate the new offset. Check the difference against the context's
|
240
|
+
# current scroll value and trigger any crossed waypoints accordingly.
|
241
|
+
$.each axes, (aKey, axis) =>
|
242
|
+
$.each @waypoints[aKey], (i, waypoint) ->
|
243
|
+
adjustment = waypoint.options.offset
|
244
|
+
oldOffset = waypoint.offset
|
245
|
+
elementOffset = if $.isWindow waypoint.element then 0 else \
|
246
|
+
waypoint.$element.offset()[axis.offsetProp]
|
247
|
+
|
248
|
+
# The "offset" waypoint option (which we call "adjustment" here) can
|
249
|
+
# be a number, percentage string, keyword string (bottom-in-view),
|
250
|
+
# or a function. So we deal with all of these types here.
|
251
|
+
if $.isFunction adjustment
|
252
|
+
adjustment = adjustment.apply waypoint.element
|
253
|
+
else if typeof adjustment is 'string'
|
254
|
+
adjustment = parseFloat adjustment
|
255
|
+
if waypoint.options.offset.indexOf('%') > -1
|
256
|
+
adjustment = Math.ceil(axis.contextDimension * adjustment / 100)
|
257
|
+
|
258
|
+
# We've finally calculated all the crazy little adjustments that
|
259
|
+
# can come from using non-window contexts and the "offset" option.
|
260
|
+
# Store the damn thing.
|
261
|
+
waypoint.offset = elementOffset \
|
262
|
+
- axis.contextOffset \
|
263
|
+
+ axis.contextScroll \
|
264
|
+
- adjustment
|
265
|
+
|
266
|
+
# "onlyOnScroll" tells us to not even consider triggering waypoints
|
267
|
+
# during refresh, so we can eject early.
|
268
|
+
return if (waypoint.options.onlyOnScroll and oldOffset?) or \
|
269
|
+
!waypoint.enabled
|
270
|
+
|
271
|
+
# Case where the refresh causes a backward trigger.
|
272
|
+
if oldOffset isnt null and \
|
273
|
+
oldOffset < axis.oldScroll <= waypoint.offset
|
274
|
+
waypoint.trigger [axis.backward]
|
275
|
+
|
276
|
+
# Now the forward case.
|
277
|
+
else if oldOffset isnt null and \
|
278
|
+
oldOffset > axis.oldScroll >= waypoint.offset
|
279
|
+
waypoint.trigger [axis.forward]
|
280
|
+
|
281
|
+
# "oldOffset" values of null mean this is the first calculation of
|
282
|
+
# the waypoint's offset. It's a special time in a waypoint's life.
|
283
|
+
else if oldOffset is null and axis.oldScroll >= waypoint.offset
|
284
|
+
waypoint.trigger [axis.forward]
|
285
|
+
|
286
|
+
# checkEmpty()
|
287
|
+
|
288
|
+
# Looks at the waypoints hashes. If they are empty, the context removes
|
289
|
+
# itself from the global contexts hash.
|
290
|
+
checkEmpty: ->
|
291
|
+
if $.isEmptyObject(@waypoints.horizontal) and \
|
292
|
+
$.isEmptyObject(@waypoints.vertical)
|
293
|
+
@$element.unbind [resizeEvent, scrollEvent].join(' ')
|
294
|
+
delete contexts[@id]
|
295
|
+
|
296
|
+
# Waypoint: Represents a single callback function tied to an element. An
|
297
|
+
# element can have multiple waypoints with multiple offsets.
|
298
|
+
|
299
|
+
# Properties:
|
300
|
+
|
301
|
+
# - $element: jQuery object containing the waypoint element.
|
302
|
+
|
303
|
+
# - element: The raw HTMLNode of the waypoint element.
|
304
|
+
|
305
|
+
# - axis: 'horizontal' || 'vertical' - The axis on which this waypoint lives.
|
306
|
+
|
307
|
+
# - callback: The function that is fired when the waypoint is triggered.
|
308
|
+
|
309
|
+
# - context: A reference to the context this waypoint belongs to.
|
310
|
+
|
311
|
+
# - enabled: Boolean indicating whether this waypoint is enabled or not.
|
312
|
+
# Disabled waypoints are still returned in functions that aggregate
|
313
|
+
# waypoints, but do not fire their callbacks.
|
314
|
+
|
315
|
+
# - id: A unique identifier for the waypoint.
|
316
|
+
|
317
|
+
# - offset: The scroll offset at which the waypoint should trigger.
|
318
|
+
|
319
|
+
# - options: A hash containing the various waypoint options.
|
320
|
+
# See $.fn.waypoint.defaults for more information on those options.
|
321
|
+
class Waypoint
|
322
|
+
constructor: ($element, context, options) ->
|
323
|
+
options = $.extend {}, $.fn[wp].defaults, options
|
324
|
+
if options.offset is 'bottom-in-view'
|
325
|
+
options.offset = ->
|
326
|
+
contextHeight = $[wps] 'viewportHeight'
|
327
|
+
unless $.isWindow context.element
|
328
|
+
contextHeight = context.$element.height()
|
329
|
+
contextHeight - $(this).outerHeight()
|
330
|
+
|
331
|
+
@$element = $element
|
332
|
+
@element = $element[0]
|
333
|
+
@axis = if options.horizontal then 'horizontal' else 'vertical'
|
334
|
+
@callback = options.handler
|
335
|
+
@context = context
|
336
|
+
@enabled = options.enabled
|
337
|
+
@id = 'waypoints' + waypointCounter++
|
338
|
+
@offset = null
|
339
|
+
@options = options
|
340
|
+
|
341
|
+
# Add our new waypoint to its context.
|
342
|
+
context.waypoints[@axis][@id] = this
|
343
|
+
|
344
|
+
# Add it to the global hash.
|
345
|
+
allWaypoints[@axis][@id] = this
|
346
|
+
|
347
|
+
# Add the waypoint's id to the element's waypoint id list.
|
348
|
+
idList = @element[waypointKey] ? []
|
349
|
+
idList.push @id
|
350
|
+
@element[waypointKey] = idList
|
351
|
+
|
352
|
+
# trigger(array)
|
353
|
+
|
354
|
+
# Calls the waypoint's callback function, passing to it the arguments
|
355
|
+
# supplied in the "args" array.
|
356
|
+
trigger: (args) ->
|
357
|
+
return unless @enabled
|
358
|
+
if @callback?
|
359
|
+
@callback.apply @element, args
|
360
|
+
if @options.triggerOnce
|
361
|
+
@destroy()
|
362
|
+
|
363
|
+
# disable()
|
364
|
+
|
365
|
+
# Temporarily disables a waypoint from firing its callback.
|
366
|
+
disable: ->
|
367
|
+
@enabled = false
|
368
|
+
|
369
|
+
# enable()
|
370
|
+
|
371
|
+
# Breathe life back into the waypoint.
|
372
|
+
enable: ->
|
373
|
+
@context.refresh()
|
374
|
+
@enabled = true
|
375
|
+
|
376
|
+
# destroy()
|
377
|
+
|
378
|
+
# Kills the waypoint for good.
|
379
|
+
destroy: ->
|
380
|
+
delete allWaypoints[@axis][@id]
|
381
|
+
delete @context.waypoints[@axis][@id]
|
382
|
+
@context.checkEmpty()
|
383
|
+
|
384
|
+
# Waypoint.getWaypointsByElement(HTMLNode)
|
385
|
+
|
386
|
+
# Returns an array of all Waypoint instances attached to the "element"
|
387
|
+
# HTMLNode. Returns an empty array if there are no attached waypoints.
|
388
|
+
@getWaypointsByElement: (element) ->
|
389
|
+
ids = element[waypointKey]
|
390
|
+
return [] unless ids
|
391
|
+
all = $.extend {}, allWaypoints.horizontal, allWaypoints.vertical
|
392
|
+
$.map ids, (id) ->
|
393
|
+
all[id]
|
394
|
+
|
395
|
+
# These methods are available on the $.fn object by using the method
|
396
|
+
# name as the first argument to .waypoint. Ex: $('div').waypoint('destroy')
|
397
|
+
methods =
|
398
|
+
|
399
|
+
# init(function, object)
|
400
|
+
|
401
|
+
# Creates a new waypoint (and if needed, a new context) using the supplied
|
402
|
+
# callback function and options.
|
403
|
+
|
404
|
+
# The "f" function and the "options" object are both optional, but at least
|
405
|
+
# one must be supplied. So acceptable signatures are:
|
406
|
+
|
407
|
+
# - .waypoint(f)
|
408
|
+
# - .waypoint(options)
|
409
|
+
# - .waypoint(f, options)
|
410
|
+
|
411
|
+
# This "init" method should never need to be called explicity by the user.
|
412
|
+
# It is the default method that is delegated to when .waypoint is called
|
413
|
+
# with one of the above signatures.
|
414
|
+
|
415
|
+
# Ex: $('div').waypoint(function(direction) {
|
416
|
+
# // Do things
|
417
|
+
# }, { offset: '100%' });
|
418
|
+
init: (f, options) ->
|
419
|
+
options ?= {}
|
420
|
+
options.handler ?= f
|
421
|
+
|
422
|
+
@each ->
|
423
|
+
$this = $ this
|
424
|
+
contextElement = options.context ? $.fn[wp].defaults.context
|
425
|
+
unless $.isWindow contextElement
|
426
|
+
contextElement = $this.closest contextElement
|
427
|
+
contextElement = $ contextElement
|
428
|
+
context = contexts[contextElement[0][contextKey]]
|
429
|
+
context = new Context contextElement unless context
|
430
|
+
new Waypoint $this, context, options
|
431
|
+
$[wps] 'refresh'
|
432
|
+
this
|
433
|
+
|
434
|
+
# Disable, enable, and destroy all just delegate to the instance methods
|
435
|
+
# of the waypoints attached to the subject elements.
|
436
|
+
disable: -> methods._invoke.call this, 'disable'
|
437
|
+
enable: -> methods._invoke.call this, 'enable'
|
438
|
+
destroy: -> methods._invoke.call this, 'destroy'
|
439
|
+
|
440
|
+
# .waypoint('prev', string, string|HTMLNode|jQuery)
|
441
|
+
|
442
|
+
# Returns a jQuery object containing previous waypoint elements. This
|
443
|
+
# creates a new entry in the jQuery object stack just like jQuery's prev
|
444
|
+
# function. "axis" indicates the axis on which to traverse
|
445
|
+
# ('horizontal' | 'vertical') and "selector" indicates which context
|
446
|
+
# element to use. The defaults are 'vertical' and window respectively.
|
447
|
+
prev: (axis, selector) ->
|
448
|
+
methods._traverse.call this, axis, selector, (stack, index, waypoints) ->
|
449
|
+
stack.push waypoints[index-1] if index > 0
|
450
|
+
|
451
|
+
# .waypoint('next', string, string|HTMLNode|jQuery)
|
452
|
+
|
453
|
+
# Returns a jQuery object containing next waypoint elements. This
|
454
|
+
# creates a new entry in the jQuery object stack just like jQuery's next
|
455
|
+
# function. "axis" indicates the axis on which to traverse
|
456
|
+
# ('horizontal' | 'vertical') and "selector" indicates which context
|
457
|
+
# element to use. The defaults are 'vertical' and window respectively.
|
458
|
+
next: (axis, selector) ->
|
459
|
+
methods._traverse.call this, axis, selector, (stack, index, waypoints) ->
|
460
|
+
stack.push waypoints[index+1] if index < waypoints.length-1
|
461
|
+
|
462
|
+
# Internal: Aggregates waypoints on a given axis of a context, and applies
|
463
|
+
# a "push" callback for each element in the subject jQuery object. This
|
464
|
+
# callback builds the element array to push to the jQuery stack.
|
465
|
+
_traverse: (axis = 'vertical', selector = window, push) ->
|
466
|
+
waypoints = jQMethods.aggregate selector
|
467
|
+
stack = []
|
468
|
+
@each ->
|
469
|
+
index = $.inArray this, waypoints[axis]
|
470
|
+
push stack, index, waypoints[axis]
|
471
|
+
@pushStack stack
|
472
|
+
|
473
|
+
# Internal: Finds all waypoints on a given set of "$elements" and invokes
|
474
|
+
# "method" on each instance.
|
475
|
+
_invoke: (method) ->
|
476
|
+
this.each ->
|
477
|
+
waypoints = Waypoint.getWaypointsByElement this
|
478
|
+
$.each waypoints, (i, waypoint) ->
|
479
|
+
waypoint[method]()
|
480
|
+
true
|
481
|
+
this
|
482
|
+
|
483
|
+
# $.fn.waypoint. Let's just hook this guy up to our methods hash and
|
484
|
+
# add some trivial error reporting for bogus calls.
|
485
|
+
$.fn[wp] = (method, args...) ->
|
486
|
+
if methods[method]
|
487
|
+
methods[method].apply this, args
|
488
|
+
else if $.isFunction(method)
|
489
|
+
methods.init.apply this, arguments
|
490
|
+
else if $.isPlainObject(method)
|
491
|
+
methods.init.apply this, [null, method]
|
492
|
+
else if !method
|
493
|
+
$.error "jQuery Waypoints needs a callback function or handler option."
|
494
|
+
else
|
495
|
+
$.error "The #{method} method does not exist in jQuery Waypoints."
|
496
|
+
|
497
|
+
# The default options object for a waypoint.
|
498
|
+
|
499
|
+
# - context: string|HTMLNode|jQuery - The scrollable element that the
|
500
|
+
# waypoint acts within. The waypoint will look for the closest ancestor
|
501
|
+
# element that matches this selector or node.
|
502
|
+
|
503
|
+
# - continuous: Multiple waypoints may be triggered by a single scroll check.
|
504
|
+
# If you would like a waypoint to only trigger if it is the last waypoint
|
505
|
+
# in a scroll check, set this to false.
|
506
|
+
|
507
|
+
# - enabled: Should this waypoint start enabled (true) or disabled (false)?
|
508
|
+
|
509
|
+
# - handler: This option is not defined by default, but can be used as an
|
510
|
+
# alternate way to pass the waypoint callback function, rather than as
|
511
|
+
# the first argument to .waypoint.
|
512
|
+
|
513
|
+
# Ex: $('div').waypoint({
|
514
|
+
# handler: function(direction) { ... }
|
515
|
+
# });
|
516
|
+
|
517
|
+
# - horizontal: Set this to true if the waypoint is, well, horizontal.
|
518
|
+
|
519
|
+
# - offset: number|string|function - Determines how far from the top (or left
|
520
|
+
# if the waypoint is horizontal) of the context's viewport to trigger the
|
521
|
+
# waypoint. The default of 0 means that the waypoint is triggered when the
|
522
|
+
# top of the waypoint element hits the top of the window/context-element.
|
523
|
+
# An offset of 50 would mean the waypoint triggers when the top of the
|
524
|
+
# element is 50 pixels from the top of the window.
|
525
|
+
|
526
|
+
# A % string is translated into a percentage of the width/height of
|
527
|
+
# the context.
|
528
|
+
|
529
|
+
# If a function is passed, that function should return a number. The "this"
|
530
|
+
# keyword within this function will be set to the raw HTMLNode of the
|
531
|
+
# waypoint element.
|
532
|
+
|
533
|
+
# - triggerOnce: If true, the waypoint will destroy itself after
|
534
|
+
# first trigger.
|
535
|
+
$.fn[wp].defaults =
|
536
|
+
context: window
|
537
|
+
continuous: true
|
538
|
+
enabled: true
|
539
|
+
horizontal: false
|
540
|
+
offset: 0
|
541
|
+
triggerOnce: false
|
542
|
+
|
543
|
+
# These methods are available on the $ object by using the method name as
|
544
|
+
# the first argument to .waypoint. Ex: $.waypoints('refresh')
|
545
|
+
jQMethods =
|
546
|
+
|
547
|
+
# $.waypoints('refresh')
|
548
|
+
|
549
|
+
# Forces a refresh on all contexts, recalculating all waypoint offsets.
|
550
|
+
# This is done automatically on waypoint addition and during resize events,
|
551
|
+
# but if a user does something to change the DOM, CSS, or in some way
|
552
|
+
# change the layout of a page and its elements, they might need to call
|
553
|
+
# this method manually.
|
554
|
+
refresh: ->
|
555
|
+
$.each contexts, (i, context) -> context.refresh()
|
556
|
+
|
557
|
+
# $.waypoints('viewportHeight')
|
558
|
+
|
559
|
+
# A utility method that returns the window height, but takes into account
|
560
|
+
# inconsistencies that come with just using jQuery's .height() on iOS.
|
561
|
+
viewportHeight: ->
|
562
|
+
window.innerHeight ? $w.height()
|
563
|
+
|
564
|
+
# $.waypoints(['aggregate'], [contextSelector])
|
565
|
+
|
566
|
+
# Returns an object containing two HTMLNode arrays, one for each axis:
|
567
|
+
|
568
|
+
# {
|
569
|
+
# horizontal: [ HTMLNode... ]
|
570
|
+
# vertical: [ HTMLNode... ]
|
571
|
+
# }
|
572
|
+
|
573
|
+
# This is the default method used when calling $.waypoints(). If
|
574
|
+
# "contextSelector" is not supplied, it returns all waypoints. If
|
575
|
+
# "contextSelector" is supplied it only returns waypoints for that context.
|
576
|
+
|
577
|
+
# The array of waypoint elements is returned sorted by calculated offset,
|
578
|
+
# the order in which they would be triggered on the page.
|
579
|
+
aggregate: (contextSelector) ->
|
580
|
+
collection = allWaypoints
|
581
|
+
if contextSelector
|
582
|
+
collection = contexts[$(contextSelector)[0][contextKey]]?.waypoints
|
583
|
+
return [] unless collection
|
584
|
+
waypoints =
|
585
|
+
horizontal: []
|
586
|
+
vertical: []
|
587
|
+
$.each waypoints, (axis, arr) ->
|
588
|
+
$.each collection[axis], (key, waypoint) ->
|
589
|
+
arr.push waypoint
|
590
|
+
arr.sort (a, b) -> a.offset - b.offset
|
591
|
+
waypoints[axis] = $.map arr, (waypoint) -> waypoint.element
|
592
|
+
waypoints[axis] = $.unique waypoints[axis]
|
593
|
+
waypoints
|
594
|
+
|
595
|
+
# $.waypoints('above', [string|HTMLNode|jQuery])
|
596
|
+
|
597
|
+
# Returns all vertical waypoints that lie above the current scroll position
|
598
|
+
# of the context specified by "contextSelector". If no "contextSelector"
|
599
|
+
# is supplied, it defaults to the window.
|
600
|
+
above: (contextSelector = window) ->
|
601
|
+
jQMethods._filter contextSelector, 'vertical', (context, waypoint) ->
|
602
|
+
waypoint.offset <= context.oldScroll.y
|
603
|
+
|
604
|
+
# $.waypoints('below', [string|HTMLNode|jQuery])
|
605
|
+
|
606
|
+
# Returns all vertical waypoints that lie below the current scroll position
|
607
|
+
# of the context specified by "contextSelector". If no "contextSelector"
|
608
|
+
# is supplied, it defaults to the window.
|
609
|
+
below: (contextSelector = window) ->
|
610
|
+
jQMethods._filter contextSelector, 'vertical', (context, waypoint) ->
|
611
|
+
waypoint.offset > context.oldScroll.y
|
612
|
+
|
613
|
+
# $.waypoints('left', [string|HTMLNode|jQuery])
|
614
|
+
|
615
|
+
# Returns all horizontal waypoints left of the current scroll position
|
616
|
+
# of the context specified by "contextSelector". If no "contextSelector"
|
617
|
+
# is supplied, it defaults to the window.
|
618
|
+
left: (contextSelector = window) ->
|
619
|
+
jQMethods._filter contextSelector, 'horizontal', (context, waypoint) ->
|
620
|
+
waypoint.offset <= context.oldScroll.x
|
621
|
+
|
622
|
+
# $.waypoints('right', [string|HTMLNode|jQuery])
|
623
|
+
|
624
|
+
# Returns all horizontal waypoints right of the current scroll position
|
625
|
+
# of the context specified by "contextSelector". If no "contextSelector"
|
626
|
+
# is supplied, it defaults to the window.
|
627
|
+
right: (contextSelector = window) ->
|
628
|
+
jQMethods._filter contextSelector, 'horizontal', (context, waypoint) ->
|
629
|
+
waypoint.offset > context.oldScroll.x
|
630
|
+
|
631
|
+
# $.waypoints('enable/disable/destroy')
|
632
|
+
|
633
|
+
# These methods delegate to the enable/disable/destroy instance methods
|
634
|
+
# for all waypoints.
|
635
|
+
enable: -> jQMethods._invoke 'enable'
|
636
|
+
disable: -> jQMethods._invoke 'disable'
|
637
|
+
destroy: -> jQMethods._invoke 'destroy'
|
638
|
+
|
639
|
+
# $.waypoints('extendFn', string, function)
|
640
|
+
|
641
|
+
# Extends the $.fn.waypoint method object with a new method, "f". This
|
642
|
+
# just lets other modules piggyback on the .waypoint namespace.
|
643
|
+
extendFn: (methodName, f) ->
|
644
|
+
methods[methodName] = f
|
645
|
+
|
646
|
+
# Internal: Invokes "method" on all waypoints.
|
647
|
+
_invoke: (method) ->
|
648
|
+
waypoints = $.extend {}, allWaypoints.vertical, allWaypoints.horizontal
|
649
|
+
$.each waypoints, (key, waypoint) ->
|
650
|
+
waypoint[method]()
|
651
|
+
true
|
652
|
+
|
653
|
+
# Internal: Returns an array of all HTMLNodes for each waypoint that passes
|
654
|
+
# the "test" function. Only waypoints within the "selector" context on the
|
655
|
+
# "axis" axis are tested. As with .aggregate, the array is sorted by
|
656
|
+
# calculated offset (trigger order).
|
657
|
+
_filter: (selector, axis, test) ->
|
658
|
+
context = contexts[$(selector)[0][contextKey]]
|
659
|
+
return [] unless context
|
660
|
+
waypoints = []
|
661
|
+
$.each context.waypoints[axis], (i, waypoint) ->
|
662
|
+
waypoints.push waypoint if test context, waypoint
|
663
|
+
waypoints.sort (a, b) -> a.offset - b.offset
|
664
|
+
$.map waypoints, (waypoint) -> waypoint.element
|
665
|
+
|
666
|
+
# Hook up jQMethods to the $.waypoints namespace.
|
667
|
+
$[wps] = (method, args...) ->
|
668
|
+
if jQMethods[method]
|
669
|
+
jQMethods[method].apply null, args
|
670
|
+
else
|
671
|
+
jQMethods.aggregate.call null, method
|
672
|
+
|
673
|
+
# Plugin-wide settings:
|
674
|
+
|
675
|
+
# - resizeThrottle: For performance reasons, the refresh performed during
|
676
|
+
# resizes is throttled. This value is the rate-limit in milliseconds
|
677
|
+
# between resize refreshes. For more information on throttling, check out
|
678
|
+
# Ben Alman’s throttle / debounce plugin.
|
679
|
+
# http://benalman.com/projects/jquery-throttle-debounce-plugin/
|
680
|
+
|
681
|
+
# - scrollThrottle: For performance reasons, checking for any crossed
|
682
|
+
# waypoints during a scroll event is throttled. This value is the
|
683
|
+
# rate-limit in milliseconds between scroll checks. For more information
|
684
|
+
# on throttling, check out Ben Alman’s throttle / debounce plugin.
|
685
|
+
# http://benalman.com/projects/jquery-throttle-debounce-plugin/
|
686
|
+
|
687
|
+
$[wps].settings =
|
688
|
+
resizeThrottle: 100
|
689
|
+
scrollThrottle: 30
|
690
|
+
|
691
|
+
# Ensure a refresh on page load. Newly loaded images often shift layout.
|
692
|
+
$w.load -> $[wps] 'refresh'
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'waypoints-rails/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "waypoints-rails"
|
8
|
+
spec.version = Waypoints::Rails::VERSION
|
9
|
+
spec.authors = ["Yoav Matchulsky"]
|
10
|
+
spec.email = ["yoavmatchulsky@gmail.com"]
|
11
|
+
spec.description = "jquery-waypoints support for Rails"
|
12
|
+
spec.summary = "Waypoints is a jQuery plugin that makes it easy to execute a function whenever you scroll to an element. More info is at http://imakewebthings.com/jquery-waypoints/"
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency "railties", ">= 3.1.0"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: waypoints-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Yoav Matchulsky
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
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: jquery-waypoints support for Rails
|
56
|
+
email:
|
57
|
+
- yoavmatchulsky@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- .gitignore
|
63
|
+
- Gemfile
|
64
|
+
- LICENSE.txt
|
65
|
+
- README.md
|
66
|
+
- Rakefile
|
67
|
+
- lib/waypoints-rails.rb
|
68
|
+
- lib/waypoints-rails/version.rb
|
69
|
+
- vendor/assets/javascripts/waypoints-infinite.js.coffee
|
70
|
+
- vendor/assets/javascripts/waypoints-sticky.js.coffee
|
71
|
+
- vendor/assets/javascripts/waypoints.js.coffee
|
72
|
+
- waypoints-rails.gemspec
|
73
|
+
homepage: ''
|
74
|
+
licenses:
|
75
|
+
- MIT
|
76
|
+
metadata: {}
|
77
|
+
post_install_message:
|
78
|
+
rdoc_options: []
|
79
|
+
require_paths:
|
80
|
+
- lib
|
81
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
requirements: []
|
92
|
+
rubyforge_project:
|
93
|
+
rubygems_version: 2.2.0
|
94
|
+
signing_key:
|
95
|
+
specification_version: 4
|
96
|
+
summary: Waypoints is a jQuery plugin that makes it easy to execute a function whenever
|
97
|
+
you scroll to an element. More info is at http://imakewebthings.com/jquery-waypoints/
|
98
|
+
test_files: []
|
99
|
+
has_rdoc:
|