waypoints_rails 3.0.0 → 4.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/README.md +15 -6
- data/lib/waypoints_rails/version.rb +1 -1
- data/vendor/assets/javascripts/{jquery.waypoints.js → waypoints/jquery.waypoints.js} +64 -22
- data/vendor/assets/javascripts/waypoints/jquery.waypoints.min.js +7 -0
- data/vendor/assets/javascripts/waypoints/noframework.waypoints.js +758 -0
- data/vendor/assets/javascripts/waypoints/noframework.waypoints.min.js +7 -0
- data/vendor/assets/javascripts/{infinite.js → waypoints/shortcuts/infinite.js} +28 -25
- data/vendor/assets/javascripts/waypoints/shortcuts/infinite.min.js +7 -0
- data/vendor/assets/javascripts/{inview.js → waypoints/shortcuts/inview.js} +21 -4
- data/vendor/assets/javascripts/waypoints/shortcuts/inview.min.js +7 -0
- data/vendor/assets/javascripts/{sticky.js → waypoints/shortcuts/sticky.js} +11 -6
- data/vendor/assets/javascripts/waypoints/shortcuts/sticky.min.js +7 -0
- data/vendor/assets/javascripts/waypoints/waypoints.debug.js +46 -0
- data/vendor/assets/javascripts/waypoints/zepto.waypoints.js +705 -0
- data/vendor/assets/javascripts/waypoints/zepto.waypoints.min.js +7 -0
- metadata +23 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 494dabfab5565881a064da82241a803a1b1d9b19
|
4
|
+
data.tar.gz: fe4713cc23ae444d7bafa0261c9cd0a0aaace27f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3810e7be7e07b41c9db9417b6f55f83a3901b9298b99d215f63979697914e8eb338498a59ff57df39e6c578bec53dfb84afc77fc8dc751d15d27f26a40243b99
|
7
|
+
data.tar.gz: 9be86a0648f9f79767bca8043df8f848e7122568700d04536386146ff68e47ada6481e0cbfa1e908e782021507491cfaaf9f7d2a10fd2f55f7a1f7e85bca8d55
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -20,16 +20,25 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## Usage
|
22
22
|
|
23
|
-
In your application.js:
|
23
|
+
In your application.js, include one of the following:
|
24
24
|
``` ruby
|
25
|
-
//= require jquery.waypoints
|
25
|
+
//= require waypoints/jquery.waypoints.js
|
26
|
+
//= require waypoints/jquery.waypoints.min.js
|
27
|
+
//= require waypoints/noframework.waypoints.js
|
28
|
+
//= require waypoints/noframework.waypoints.min.js
|
29
|
+
//= require waypoints/waypoints.debug.js
|
30
|
+
//= require waypoints/zepto.waypoints.js
|
31
|
+
//= require waypoints/zepto.waypoints.min.js
|
26
32
|
```
|
27
33
|
|
28
|
-
And then, for optional waypoints shortcuts, require the following:
|
34
|
+
And then, for optional waypoints shortcuts, require any of the following:
|
29
35
|
``` ruby
|
30
|
-
//= require infinite
|
31
|
-
//= require
|
32
|
-
//= require
|
36
|
+
//= require waypoints/shortcuts/infinite.js
|
37
|
+
//= require waypoints/shortcuts/infinite.min.js
|
38
|
+
//= require waypoints/shortcuts/inview.js
|
39
|
+
//= require waypoints/shortcuts/inview.min.js
|
40
|
+
//= require waypoints/shortcuts/sticky.js
|
41
|
+
//= require waypoints/shortcuts/sticky.min.js
|
33
42
|
```
|
34
43
|
|
35
44
|
## Contributing
|
@@ -1,8 +1,8 @@
|
|
1
1
|
/*!
|
2
|
-
Waypoints -
|
3
|
-
Copyright © 2011-
|
2
|
+
Waypoints - 4.0.1
|
3
|
+
Copyright © 2011-2016 Caleb Troughton
|
4
4
|
Licensed under the MIT license.
|
5
|
-
https://github.com/imakewebthings/waypoints/
|
5
|
+
https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
|
6
6
|
*/
|
7
7
|
(function() {
|
8
8
|
'use strict'
|
@@ -95,18 +95,39 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
95
95
|
return this.group.previous(this)
|
96
96
|
}
|
97
97
|
|
98
|
-
/*
|
99
|
-
|
100
|
-
Waypoint.destroyAll = function() {
|
98
|
+
/* Private */
|
99
|
+
Waypoint.invokeAll = function(method) {
|
101
100
|
var allWaypointsArray = []
|
102
101
|
for (var waypointKey in allWaypoints) {
|
103
102
|
allWaypointsArray.push(allWaypoints[waypointKey])
|
104
103
|
}
|
105
104
|
for (var i = 0, end = allWaypointsArray.length; i < end; i++) {
|
106
|
-
allWaypointsArray[i]
|
105
|
+
allWaypointsArray[i][method]()
|
107
106
|
}
|
108
107
|
}
|
109
108
|
|
109
|
+
/* Public */
|
110
|
+
/* http://imakewebthings.com/waypoints/api/destroy-all */
|
111
|
+
Waypoint.destroyAll = function() {
|
112
|
+
Waypoint.invokeAll('destroy')
|
113
|
+
}
|
114
|
+
|
115
|
+
/* Public */
|
116
|
+
/* http://imakewebthings.com/waypoints/api/disable-all */
|
117
|
+
Waypoint.disableAll = function() {
|
118
|
+
Waypoint.invokeAll('disable')
|
119
|
+
}
|
120
|
+
|
121
|
+
/* Public */
|
122
|
+
/* http://imakewebthings.com/waypoints/api/enable-all */
|
123
|
+
Waypoint.enableAll = function() {
|
124
|
+
Waypoint.Context.refreshAll()
|
125
|
+
for (var waypointKey in allWaypoints) {
|
126
|
+
allWaypoints[waypointKey].enabled = true
|
127
|
+
}
|
128
|
+
return this
|
129
|
+
}
|
130
|
+
|
110
131
|
/* Public */
|
111
132
|
/* http://imakewebthings.com/waypoints/api/refresh-all */
|
112
133
|
Waypoint.refreshAll = function() {
|
@@ -157,10 +178,6 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
157
178
|
var keyCounter = 0
|
158
179
|
var contexts = {}
|
159
180
|
var Waypoint = window.Waypoint
|
160
|
-
var requestAnimationFrame = window.requestAnimationFrame ||
|
161
|
-
window.mozRequestAnimationFrame ||
|
162
|
-
window.webkitRequestAnimationFrame ||
|
163
|
-
requestAnimationFrameShim
|
164
181
|
var oldWindowLoad = window.onload
|
165
182
|
|
166
183
|
/* http://imakewebthings.com/waypoints/api/context */
|
@@ -183,6 +200,10 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
183
200
|
element.waypointContextKey = this.key
|
184
201
|
contexts[element.waypointContextKey] = this
|
185
202
|
keyCounter += 1
|
203
|
+
if (!Waypoint.windowContext) {
|
204
|
+
Waypoint.windowContext = true
|
205
|
+
Waypoint.windowContext = new Context(window)
|
206
|
+
}
|
186
207
|
|
187
208
|
this.createThrottledScrollHandler()
|
188
209
|
this.createThrottledResizeHandler()
|
@@ -199,7 +220,8 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
199
220
|
Context.prototype.checkEmpty = function() {
|
200
221
|
var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)
|
201
222
|
var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)
|
202
|
-
|
223
|
+
var isWindow = this.element == this.element.window
|
224
|
+
if (horizontalEmpty && verticalEmpty && !isWindow) {
|
203
225
|
this.adapter.off('.waypoints')
|
204
226
|
delete contexts[this.key]
|
205
227
|
}
|
@@ -217,7 +239,7 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
217
239
|
this.adapter.on('resize.waypoints', function() {
|
218
240
|
if (!self.didResize) {
|
219
241
|
self.didResize = true
|
220
|
-
requestAnimationFrame(resizeHandler)
|
242
|
+
Waypoint.requestAnimationFrame(resizeHandler)
|
221
243
|
}
|
222
244
|
})
|
223
245
|
}
|
@@ -233,7 +255,7 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
233
255
|
this.adapter.on('scroll.waypoints', function() {
|
234
256
|
if (!self.didScroll || Waypoint.isTouch) {
|
235
257
|
self.didScroll = true
|
236
|
-
requestAnimationFrame(scrollHandler)
|
258
|
+
Waypoint.requestAnimationFrame(scrollHandler)
|
237
259
|
}
|
238
260
|
})
|
239
261
|
}
|
@@ -268,6 +290,9 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
268
290
|
|
269
291
|
for (var waypointKey in this.waypoints[axisKey]) {
|
270
292
|
var waypoint = this.waypoints[axisKey][waypointKey]
|
293
|
+
if (waypoint.triggerPoint === null) {
|
294
|
+
continue
|
295
|
+
}
|
271
296
|
var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint
|
272
297
|
var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint
|
273
298
|
var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint
|
@@ -291,9 +316,11 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
291
316
|
|
292
317
|
/* Private */
|
293
318
|
Context.prototype.innerHeight = function() {
|
294
|
-
|
319
|
+
/*eslint-disable eqeqeq */
|
320
|
+
if (this.element == this.element.window) {
|
295
321
|
return Waypoint.viewportHeight()
|
296
322
|
}
|
323
|
+
/*eslint-enable eqeqeq */
|
297
324
|
return this.adapter.innerHeight()
|
298
325
|
}
|
299
326
|
|
@@ -305,9 +332,11 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
305
332
|
|
306
333
|
/* Private */
|
307
334
|
Context.prototype.innerWidth = function() {
|
308
|
-
|
335
|
+
/*eslint-disable eqeqeq */
|
336
|
+
if (this.element == this.element.window) {
|
309
337
|
return Waypoint.viewportWidth()
|
310
338
|
}
|
339
|
+
/*eslint-enable eqeqeq */
|
311
340
|
return this.adapter.innerWidth()
|
312
341
|
}
|
313
342
|
|
@@ -328,8 +357,10 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
328
357
|
/* Public */
|
329
358
|
/* http://imakewebthings.com/waypoints/api/context-refresh */
|
330
359
|
Context.prototype.refresh = function() {
|
331
|
-
|
332
|
-
var
|
360
|
+
/*eslint-disable eqeqeq */
|
361
|
+
var isWindow = this.element == this.element.window
|
362
|
+
/*eslint-enable eqeqeq */
|
363
|
+
var contextOffset = isWindow ? undefined : this.adapter.offset()
|
333
364
|
var triggeredGroups = {}
|
334
365
|
var axes
|
335
366
|
|
@@ -381,7 +412,7 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
381
412
|
}
|
382
413
|
|
383
414
|
contextModifier = axis.contextScroll - axis.contextOffset
|
384
|
-
waypoint.triggerPoint = elementOffset + contextModifier - adjustment
|
415
|
+
waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)
|
385
416
|
wasBeforeScroll = oldTriggerPoint < axis.oldScroll
|
386
417
|
nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll
|
387
418
|
triggeredBackward = wasBeforeScroll && nowAfterScroll
|
@@ -402,9 +433,11 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
402
433
|
}
|
403
434
|
}
|
404
435
|
|
405
|
-
|
406
|
-
triggeredGroups
|
407
|
-
|
436
|
+
Waypoint.requestAnimationFrame(function() {
|
437
|
+
for (var groupKey in triggeredGroups) {
|
438
|
+
triggeredGroups[groupKey].flushTriggers()
|
439
|
+
}
|
440
|
+
})
|
408
441
|
|
409
442
|
return this
|
410
443
|
}
|
@@ -433,6 +466,15 @@ https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
|
|
433
466
|
}
|
434
467
|
Context.refreshAll()
|
435
468
|
}
|
469
|
+
|
470
|
+
|
471
|
+
Waypoint.requestAnimationFrame = function(callback) {
|
472
|
+
var requestFn = window.requestAnimationFrame ||
|
473
|
+
window.mozRequestAnimationFrame ||
|
474
|
+
window.webkitRequestAnimationFrame ||
|
475
|
+
requestAnimationFrameShim
|
476
|
+
requestFn.call(window, callback)
|
477
|
+
}
|
436
478
|
Waypoint.Context = Context
|
437
479
|
}())
|
438
480
|
;(function() {
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
Waypoints - 4.0.1
|
3
|
+
Copyright © 2011-2016 Caleb Troughton
|
4
|
+
Licensed under the MIT license.
|
5
|
+
https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
|
6
|
+
*/
|
7
|
+
!function(){"use strict";function t(o){if(!o)throw new Error("No options passed to Waypoint constructor");if(!o.element)throw new Error("No element option passed to Waypoint constructor");if(!o.handler)throw new Error("No handler option passed to Waypoint constructor");this.key="waypoint-"+e,this.options=t.Adapter.extend({},t.defaults,o),this.element=this.options.element,this.adapter=new t.Adapter(this.element),this.callback=o.handler,this.axis=this.options.horizontal?"horizontal":"vertical",this.enabled=this.options.enabled,this.triggerPoint=null,this.group=t.Group.findOrCreate({name:this.options.group,axis:this.axis}),this.context=t.Context.findOrCreateByElement(this.options.context),t.offsetAliases[this.options.offset]&&(this.options.offset=t.offsetAliases[this.options.offset]),this.group.add(this),this.context.add(this),i[this.key]=this,e+=1}var e=0,i={};t.prototype.queueTrigger=function(t){this.group.queueTrigger(this,t)},t.prototype.trigger=function(t){this.enabled&&this.callback&&this.callback.apply(this,t)},t.prototype.destroy=function(){this.context.remove(this),this.group.remove(this),delete i[this.key]},t.prototype.disable=function(){return this.enabled=!1,this},t.prototype.enable=function(){return this.context.refresh(),this.enabled=!0,this},t.prototype.next=function(){return this.group.next(this)},t.prototype.previous=function(){return this.group.previous(this)},t.invokeAll=function(t){var e=[];for(var o in i)e.push(i[o]);for(var n=0,r=e.length;r>n;n++)e[n][t]()},t.destroyAll=function(){t.invokeAll("destroy")},t.disableAll=function(){t.invokeAll("disable")},t.enableAll=function(){t.Context.refreshAll();for(var e in i)i[e].enabled=!0;return this},t.refreshAll=function(){t.Context.refreshAll()},t.viewportHeight=function(){return window.innerHeight||document.documentElement.clientHeight},t.viewportWidth=function(){return document.documentElement.clientWidth},t.adapters=[],t.defaults={context:window,continuous:!0,enabled:!0,group:"default",horizontal:!1,offset:0},t.offsetAliases={"bottom-in-view":function(){return this.context.innerHeight()-this.adapter.outerHeight()},"right-in-view":function(){return this.context.innerWidth()-this.adapter.outerWidth()}},window.Waypoint=t}(),function(){"use strict";function t(t){window.setTimeout(t,1e3/60)}function e(t){this.element=t,this.Adapter=n.Adapter,this.adapter=new this.Adapter(t),this.key="waypoint-context-"+i,this.didScroll=!1,this.didResize=!1,this.oldScroll={x:this.adapter.scrollLeft(),y:this.adapter.scrollTop()},this.waypoints={vertical:{},horizontal:{}},t.waypointContextKey=this.key,o[t.waypointContextKey]=this,i+=1,n.windowContext||(n.windowContext=!0,n.windowContext=new e(window)),this.createThrottledScrollHandler(),this.createThrottledResizeHandler()}var i=0,o={},n=window.Waypoint,r=window.onload;e.prototype.add=function(t){var e=t.options.horizontal?"horizontal":"vertical";this.waypoints[e][t.key]=t,this.refresh()},e.prototype.checkEmpty=function(){var t=this.Adapter.isEmptyObject(this.waypoints.horizontal),e=this.Adapter.isEmptyObject(this.waypoints.vertical),i=this.element==this.element.window;t&&e&&!i&&(this.adapter.off(".waypoints"),delete o[this.key])},e.prototype.createThrottledResizeHandler=function(){function t(){e.handleResize(),e.didResize=!1}var e=this;this.adapter.on("resize.waypoints",function(){e.didResize||(e.didResize=!0,n.requestAnimationFrame(t))})},e.prototype.createThrottledScrollHandler=function(){function t(){e.handleScroll(),e.didScroll=!1}var e=this;this.adapter.on("scroll.waypoints",function(){(!e.didScroll||n.isTouch)&&(e.didScroll=!0,n.requestAnimationFrame(t))})},e.prototype.handleResize=function(){n.Context.refreshAll()},e.prototype.handleScroll=function(){var t={},e={horizontal:{newScroll:this.adapter.scrollLeft(),oldScroll:this.oldScroll.x,forward:"right",backward:"left"},vertical:{newScroll:this.adapter.scrollTop(),oldScroll:this.oldScroll.y,forward:"down",backward:"up"}};for(var i in e){var o=e[i],n=o.newScroll>o.oldScroll,r=n?o.forward:o.backward;for(var s in this.waypoints[i]){var a=this.waypoints[i][s];if(null!==a.triggerPoint){var l=o.oldScroll<a.triggerPoint,h=o.newScroll>=a.triggerPoint,p=l&&h,u=!l&&!h;(p||u)&&(a.queueTrigger(r),t[a.group.id]=a.group)}}}for(var c in t)t[c].flushTriggers();this.oldScroll={x:e.horizontal.newScroll,y:e.vertical.newScroll}},e.prototype.innerHeight=function(){return this.element==this.element.window?n.viewportHeight():this.adapter.innerHeight()},e.prototype.remove=function(t){delete this.waypoints[t.axis][t.key],this.checkEmpty()},e.prototype.innerWidth=function(){return this.element==this.element.window?n.viewportWidth():this.adapter.innerWidth()},e.prototype.destroy=function(){var t=[];for(var e in this.waypoints)for(var i in this.waypoints[e])t.push(this.waypoints[e][i]);for(var o=0,n=t.length;n>o;o++)t[o].destroy()},e.prototype.refresh=function(){var t,e=this.element==this.element.window,i=e?void 0:this.adapter.offset(),o={};this.handleScroll(),t={horizontal:{contextOffset:e?0:i.left,contextScroll:e?0:this.oldScroll.x,contextDimension:this.innerWidth(),oldScroll:this.oldScroll.x,forward:"right",backward:"left",offsetProp:"left"},vertical:{contextOffset:e?0:i.top,contextScroll:e?0:this.oldScroll.y,contextDimension:this.innerHeight(),oldScroll:this.oldScroll.y,forward:"down",backward:"up",offsetProp:"top"}};for(var r in t){var s=t[r];for(var a in this.waypoints[r]){var l,h,p,u,c,d=this.waypoints[r][a],f=d.options.offset,w=d.triggerPoint,y=0,g=null==w;d.element!==d.element.window&&(y=d.adapter.offset()[s.offsetProp]),"function"==typeof f?f=f.apply(d):"string"==typeof f&&(f=parseFloat(f),d.options.offset.indexOf("%")>-1&&(f=Math.ceil(s.contextDimension*f/100))),l=s.contextScroll-s.contextOffset,d.triggerPoint=Math.floor(y+l-f),h=w<s.oldScroll,p=d.triggerPoint>=s.oldScroll,u=h&&p,c=!h&&!p,!g&&u?(d.queueTrigger(s.backward),o[d.group.id]=d.group):!g&&c?(d.queueTrigger(s.forward),o[d.group.id]=d.group):g&&s.oldScroll>=d.triggerPoint&&(d.queueTrigger(s.forward),o[d.group.id]=d.group)}}return n.requestAnimationFrame(function(){for(var t in o)o[t].flushTriggers()}),this},e.findOrCreateByElement=function(t){return e.findByElement(t)||new e(t)},e.refreshAll=function(){for(var t in o)o[t].refresh()},e.findByElement=function(t){return o[t.waypointContextKey]},window.onload=function(){r&&r(),e.refreshAll()},n.requestAnimationFrame=function(e){var i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||t;i.call(window,e)},n.Context=e}(),function(){"use strict";function t(t,e){return t.triggerPoint-e.triggerPoint}function e(t,e){return e.triggerPoint-t.triggerPoint}function i(t){this.name=t.name,this.axis=t.axis,this.id=this.name+"-"+this.axis,this.waypoints=[],this.clearTriggerQueues(),o[this.axis][this.name]=this}var o={vertical:{},horizontal:{}},n=window.Waypoint;i.prototype.add=function(t){this.waypoints.push(t)},i.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}},i.prototype.flushTriggers=function(){for(var i in this.triggerQueues){var o=this.triggerQueues[i],n="up"===i||"left"===i;o.sort(n?e:t);for(var r=0,s=o.length;s>r;r+=1){var a=o[r];(a.options.continuous||r===o.length-1)&&a.trigger([i])}}this.clearTriggerQueues()},i.prototype.next=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints),o=i===this.waypoints.length-1;return o?null:this.waypoints[i+1]},i.prototype.previous=function(e){this.waypoints.sort(t);var i=n.Adapter.inArray(e,this.waypoints);return i?this.waypoints[i-1]:null},i.prototype.queueTrigger=function(t,e){this.triggerQueues[e].push(t)},i.prototype.remove=function(t){var e=n.Adapter.inArray(t,this.waypoints);e>-1&&this.waypoints.splice(e,1)},i.prototype.first=function(){return this.waypoints[0]},i.prototype.last=function(){return this.waypoints[this.waypoints.length-1]},i.findOrCreate=function(t){return o[t.axis][t.name]||new i(t)},n.Group=i}(),function(){"use strict";function t(t){this.$element=e(t)}var e=window.jQuery,i=window.Waypoint;e.each(["innerHeight","innerWidth","off","offset","on","outerHeight","outerWidth","scrollLeft","scrollTop"],function(e,i){t.prototype[i]=function(){var t=Array.prototype.slice.call(arguments);return this.$element[i].apply(this.$element,t)}}),e.each(["extend","inArray","isEmptyObject"],function(i,o){t[o]=e[o]}),i.adapters.push({name:"jquery",Adapter:t}),i.Adapter=t}(),function(){"use strict";function t(t){return function(){var i=[],o=arguments[0];return t.isFunction(arguments[0])&&(o=t.extend({},arguments[1]),o.handler=arguments[0]),this.each(function(){var n=t.extend({},o,{element:this});"string"==typeof n.context&&(n.context=t(this).closest(n.context)[0]),i.push(new e(n))}),i}}var e=window.Waypoint;window.jQuery&&(window.jQuery.fn.waypoint=t(window.jQuery)),window.Zepto&&(window.Zepto.fn.waypoint=t(window.Zepto))}();
|
@@ -0,0 +1,758 @@
|
|
1
|
+
/*!
|
2
|
+
Waypoints - 4.0.1
|
3
|
+
Copyright © 2011-2016 Caleb Troughton
|
4
|
+
Licensed under the MIT license.
|
5
|
+
https://github.com/imakewebthings/waypoints/blob/master/licenses.txt
|
6
|
+
*/
|
7
|
+
(function() {
|
8
|
+
'use strict'
|
9
|
+
|
10
|
+
var keyCounter = 0
|
11
|
+
var allWaypoints = {}
|
12
|
+
|
13
|
+
/* http://imakewebthings.com/waypoints/api/waypoint */
|
14
|
+
function Waypoint(options) {
|
15
|
+
if (!options) {
|
16
|
+
throw new Error('No options passed to Waypoint constructor')
|
17
|
+
}
|
18
|
+
if (!options.element) {
|
19
|
+
throw new Error('No element option passed to Waypoint constructor')
|
20
|
+
}
|
21
|
+
if (!options.handler) {
|
22
|
+
throw new Error('No handler option passed to Waypoint constructor')
|
23
|
+
}
|
24
|
+
|
25
|
+
this.key = 'waypoint-' + keyCounter
|
26
|
+
this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)
|
27
|
+
this.element = this.options.element
|
28
|
+
this.adapter = new Waypoint.Adapter(this.element)
|
29
|
+
this.callback = options.handler
|
30
|
+
this.axis = this.options.horizontal ? 'horizontal' : 'vertical'
|
31
|
+
this.enabled = this.options.enabled
|
32
|
+
this.triggerPoint = null
|
33
|
+
this.group = Waypoint.Group.findOrCreate({
|
34
|
+
name: this.options.group,
|
35
|
+
axis: this.axis
|
36
|
+
})
|
37
|
+
this.context = Waypoint.Context.findOrCreateByElement(this.options.context)
|
38
|
+
|
39
|
+
if (Waypoint.offsetAliases[this.options.offset]) {
|
40
|
+
this.options.offset = Waypoint.offsetAliases[this.options.offset]
|
41
|
+
}
|
42
|
+
this.group.add(this)
|
43
|
+
this.context.add(this)
|
44
|
+
allWaypoints[this.key] = this
|
45
|
+
keyCounter += 1
|
46
|
+
}
|
47
|
+
|
48
|
+
/* Private */
|
49
|
+
Waypoint.prototype.queueTrigger = function(direction) {
|
50
|
+
this.group.queueTrigger(this, direction)
|
51
|
+
}
|
52
|
+
|
53
|
+
/* Private */
|
54
|
+
Waypoint.prototype.trigger = function(args) {
|
55
|
+
if (!this.enabled) {
|
56
|
+
return
|
57
|
+
}
|
58
|
+
if (this.callback) {
|
59
|
+
this.callback.apply(this, args)
|
60
|
+
}
|
61
|
+
}
|
62
|
+
|
63
|
+
/* Public */
|
64
|
+
/* http://imakewebthings.com/waypoints/api/destroy */
|
65
|
+
Waypoint.prototype.destroy = function() {
|
66
|
+
this.context.remove(this)
|
67
|
+
this.group.remove(this)
|
68
|
+
delete allWaypoints[this.key]
|
69
|
+
}
|
70
|
+
|
71
|
+
/* Public */
|
72
|
+
/* http://imakewebthings.com/waypoints/api/disable */
|
73
|
+
Waypoint.prototype.disable = function() {
|
74
|
+
this.enabled = false
|
75
|
+
return this
|
76
|
+
}
|
77
|
+
|
78
|
+
/* Public */
|
79
|
+
/* http://imakewebthings.com/waypoints/api/enable */
|
80
|
+
Waypoint.prototype.enable = function() {
|
81
|
+
this.context.refresh()
|
82
|
+
this.enabled = true
|
83
|
+
return this
|
84
|
+
}
|
85
|
+
|
86
|
+
/* Public */
|
87
|
+
/* http://imakewebthings.com/waypoints/api/next */
|
88
|
+
Waypoint.prototype.next = function() {
|
89
|
+
return this.group.next(this)
|
90
|
+
}
|
91
|
+
|
92
|
+
/* Public */
|
93
|
+
/* http://imakewebthings.com/waypoints/api/previous */
|
94
|
+
Waypoint.prototype.previous = function() {
|
95
|
+
return this.group.previous(this)
|
96
|
+
}
|
97
|
+
|
98
|
+
/* Private */
|
99
|
+
Waypoint.invokeAll = function(method) {
|
100
|
+
var allWaypointsArray = []
|
101
|
+
for (var waypointKey in allWaypoints) {
|
102
|
+
allWaypointsArray.push(allWaypoints[waypointKey])
|
103
|
+
}
|
104
|
+
for (var i = 0, end = allWaypointsArray.length; i < end; i++) {
|
105
|
+
allWaypointsArray[i][method]()
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
/* Public */
|
110
|
+
/* http://imakewebthings.com/waypoints/api/destroy-all */
|
111
|
+
Waypoint.destroyAll = function() {
|
112
|
+
Waypoint.invokeAll('destroy')
|
113
|
+
}
|
114
|
+
|
115
|
+
/* Public */
|
116
|
+
/* http://imakewebthings.com/waypoints/api/disable-all */
|
117
|
+
Waypoint.disableAll = function() {
|
118
|
+
Waypoint.invokeAll('disable')
|
119
|
+
}
|
120
|
+
|
121
|
+
/* Public */
|
122
|
+
/* http://imakewebthings.com/waypoints/api/enable-all */
|
123
|
+
Waypoint.enableAll = function() {
|
124
|
+
Waypoint.Context.refreshAll()
|
125
|
+
for (var waypointKey in allWaypoints) {
|
126
|
+
allWaypoints[waypointKey].enabled = true
|
127
|
+
}
|
128
|
+
return this
|
129
|
+
}
|
130
|
+
|
131
|
+
/* Public */
|
132
|
+
/* http://imakewebthings.com/waypoints/api/refresh-all */
|
133
|
+
Waypoint.refreshAll = function() {
|
134
|
+
Waypoint.Context.refreshAll()
|
135
|
+
}
|
136
|
+
|
137
|
+
/* Public */
|
138
|
+
/* http://imakewebthings.com/waypoints/api/viewport-height */
|
139
|
+
Waypoint.viewportHeight = function() {
|
140
|
+
return window.innerHeight || document.documentElement.clientHeight
|
141
|
+
}
|
142
|
+
|
143
|
+
/* Public */
|
144
|
+
/* http://imakewebthings.com/waypoints/api/viewport-width */
|
145
|
+
Waypoint.viewportWidth = function() {
|
146
|
+
return document.documentElement.clientWidth
|
147
|
+
}
|
148
|
+
|
149
|
+
Waypoint.adapters = []
|
150
|
+
|
151
|
+
Waypoint.defaults = {
|
152
|
+
context: window,
|
153
|
+
continuous: true,
|
154
|
+
enabled: true,
|
155
|
+
group: 'default',
|
156
|
+
horizontal: false,
|
157
|
+
offset: 0
|
158
|
+
}
|
159
|
+
|
160
|
+
Waypoint.offsetAliases = {
|
161
|
+
'bottom-in-view': function() {
|
162
|
+
return this.context.innerHeight() - this.adapter.outerHeight()
|
163
|
+
},
|
164
|
+
'right-in-view': function() {
|
165
|
+
return this.context.innerWidth() - this.adapter.outerWidth()
|
166
|
+
}
|
167
|
+
}
|
168
|
+
|
169
|
+
window.Waypoint = Waypoint
|
170
|
+
}())
|
171
|
+
;(function() {
|
172
|
+
'use strict'
|
173
|
+
|
174
|
+
function requestAnimationFrameShim(callback) {
|
175
|
+
window.setTimeout(callback, 1000 / 60)
|
176
|
+
}
|
177
|
+
|
178
|
+
var keyCounter = 0
|
179
|
+
var contexts = {}
|
180
|
+
var Waypoint = window.Waypoint
|
181
|
+
var oldWindowLoad = window.onload
|
182
|
+
|
183
|
+
/* http://imakewebthings.com/waypoints/api/context */
|
184
|
+
function Context(element) {
|
185
|
+
this.element = element
|
186
|
+
this.Adapter = Waypoint.Adapter
|
187
|
+
this.adapter = new this.Adapter(element)
|
188
|
+
this.key = 'waypoint-context-' + keyCounter
|
189
|
+
this.didScroll = false
|
190
|
+
this.didResize = false
|
191
|
+
this.oldScroll = {
|
192
|
+
x: this.adapter.scrollLeft(),
|
193
|
+
y: this.adapter.scrollTop()
|
194
|
+
}
|
195
|
+
this.waypoints = {
|
196
|
+
vertical: {},
|
197
|
+
horizontal: {}
|
198
|
+
}
|
199
|
+
|
200
|
+
element.waypointContextKey = this.key
|
201
|
+
contexts[element.waypointContextKey] = this
|
202
|
+
keyCounter += 1
|
203
|
+
if (!Waypoint.windowContext) {
|
204
|
+
Waypoint.windowContext = true
|
205
|
+
Waypoint.windowContext = new Context(window)
|
206
|
+
}
|
207
|
+
|
208
|
+
this.createThrottledScrollHandler()
|
209
|
+
this.createThrottledResizeHandler()
|
210
|
+
}
|
211
|
+
|
212
|
+
/* Private */
|
213
|
+
Context.prototype.add = function(waypoint) {
|
214
|
+
var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'
|
215
|
+
this.waypoints[axis][waypoint.key] = waypoint
|
216
|
+
this.refresh()
|
217
|
+
}
|
218
|
+
|
219
|
+
/* Private */
|
220
|
+
Context.prototype.checkEmpty = function() {
|
221
|
+
var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)
|
222
|
+
var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)
|
223
|
+
var isWindow = this.element == this.element.window
|
224
|
+
if (horizontalEmpty && verticalEmpty && !isWindow) {
|
225
|
+
this.adapter.off('.waypoints')
|
226
|
+
delete contexts[this.key]
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
/* Private */
|
231
|
+
Context.prototype.createThrottledResizeHandler = function() {
|
232
|
+
var self = this
|
233
|
+
|
234
|
+
function resizeHandler() {
|
235
|
+
self.handleResize()
|
236
|
+
self.didResize = false
|
237
|
+
}
|
238
|
+
|
239
|
+
this.adapter.on('resize.waypoints', function() {
|
240
|
+
if (!self.didResize) {
|
241
|
+
self.didResize = true
|
242
|
+
Waypoint.requestAnimationFrame(resizeHandler)
|
243
|
+
}
|
244
|
+
})
|
245
|
+
}
|
246
|
+
|
247
|
+
/* Private */
|
248
|
+
Context.prototype.createThrottledScrollHandler = function() {
|
249
|
+
var self = this
|
250
|
+
function scrollHandler() {
|
251
|
+
self.handleScroll()
|
252
|
+
self.didScroll = false
|
253
|
+
}
|
254
|
+
|
255
|
+
this.adapter.on('scroll.waypoints', function() {
|
256
|
+
if (!self.didScroll || Waypoint.isTouch) {
|
257
|
+
self.didScroll = true
|
258
|
+
Waypoint.requestAnimationFrame(scrollHandler)
|
259
|
+
}
|
260
|
+
})
|
261
|
+
}
|
262
|
+
|
263
|
+
/* Private */
|
264
|
+
Context.prototype.handleResize = function() {
|
265
|
+
Waypoint.Context.refreshAll()
|
266
|
+
}
|
267
|
+
|
268
|
+
/* Private */
|
269
|
+
Context.prototype.handleScroll = function() {
|
270
|
+
var triggeredGroups = {}
|
271
|
+
var axes = {
|
272
|
+
horizontal: {
|
273
|
+
newScroll: this.adapter.scrollLeft(),
|
274
|
+
oldScroll: this.oldScroll.x,
|
275
|
+
forward: 'right',
|
276
|
+
backward: 'left'
|
277
|
+
},
|
278
|
+
vertical: {
|
279
|
+
newScroll: this.adapter.scrollTop(),
|
280
|
+
oldScroll: this.oldScroll.y,
|
281
|
+
forward: 'down',
|
282
|
+
backward: 'up'
|
283
|
+
}
|
284
|
+
}
|
285
|
+
|
286
|
+
for (var axisKey in axes) {
|
287
|
+
var axis = axes[axisKey]
|
288
|
+
var isForward = axis.newScroll > axis.oldScroll
|
289
|
+
var direction = isForward ? axis.forward : axis.backward
|
290
|
+
|
291
|
+
for (var waypointKey in this.waypoints[axisKey]) {
|
292
|
+
var waypoint = this.waypoints[axisKey][waypointKey]
|
293
|
+
if (waypoint.triggerPoint === null) {
|
294
|
+
continue
|
295
|
+
}
|
296
|
+
var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint
|
297
|
+
var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint
|
298
|
+
var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint
|
299
|
+
var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint
|
300
|
+
if (crossedForward || crossedBackward) {
|
301
|
+
waypoint.queueTrigger(direction)
|
302
|
+
triggeredGroups[waypoint.group.id] = waypoint.group
|
303
|
+
}
|
304
|
+
}
|
305
|
+
}
|
306
|
+
|
307
|
+
for (var groupKey in triggeredGroups) {
|
308
|
+
triggeredGroups[groupKey].flushTriggers()
|
309
|
+
}
|
310
|
+
|
311
|
+
this.oldScroll = {
|
312
|
+
x: axes.horizontal.newScroll,
|
313
|
+
y: axes.vertical.newScroll
|
314
|
+
}
|
315
|
+
}
|
316
|
+
|
317
|
+
/* Private */
|
318
|
+
Context.prototype.innerHeight = function() {
|
319
|
+
/*eslint-disable eqeqeq */
|
320
|
+
if (this.element == this.element.window) {
|
321
|
+
return Waypoint.viewportHeight()
|
322
|
+
}
|
323
|
+
/*eslint-enable eqeqeq */
|
324
|
+
return this.adapter.innerHeight()
|
325
|
+
}
|
326
|
+
|
327
|
+
/* Private */
|
328
|
+
Context.prototype.remove = function(waypoint) {
|
329
|
+
delete this.waypoints[waypoint.axis][waypoint.key]
|
330
|
+
this.checkEmpty()
|
331
|
+
}
|
332
|
+
|
333
|
+
/* Private */
|
334
|
+
Context.prototype.innerWidth = function() {
|
335
|
+
/*eslint-disable eqeqeq */
|
336
|
+
if (this.element == this.element.window) {
|
337
|
+
return Waypoint.viewportWidth()
|
338
|
+
}
|
339
|
+
/*eslint-enable eqeqeq */
|
340
|
+
return this.adapter.innerWidth()
|
341
|
+
}
|
342
|
+
|
343
|
+
/* Public */
|
344
|
+
/* http://imakewebthings.com/waypoints/api/context-destroy */
|
345
|
+
Context.prototype.destroy = function() {
|
346
|
+
var allWaypoints = []
|
347
|
+
for (var axis in this.waypoints) {
|
348
|
+
for (var waypointKey in this.waypoints[axis]) {
|
349
|
+
allWaypoints.push(this.waypoints[axis][waypointKey])
|
350
|
+
}
|
351
|
+
}
|
352
|
+
for (var i = 0, end = allWaypoints.length; i < end; i++) {
|
353
|
+
allWaypoints[i].destroy()
|
354
|
+
}
|
355
|
+
}
|
356
|
+
|
357
|
+
/* Public */
|
358
|
+
/* http://imakewebthings.com/waypoints/api/context-refresh */
|
359
|
+
Context.prototype.refresh = function() {
|
360
|
+
/*eslint-disable eqeqeq */
|
361
|
+
var isWindow = this.element == this.element.window
|
362
|
+
/*eslint-enable eqeqeq */
|
363
|
+
var contextOffset = isWindow ? undefined : this.adapter.offset()
|
364
|
+
var triggeredGroups = {}
|
365
|
+
var axes
|
366
|
+
|
367
|
+
this.handleScroll()
|
368
|
+
axes = {
|
369
|
+
horizontal: {
|
370
|
+
contextOffset: isWindow ? 0 : contextOffset.left,
|
371
|
+
contextScroll: isWindow ? 0 : this.oldScroll.x,
|
372
|
+
contextDimension: this.innerWidth(),
|
373
|
+
oldScroll: this.oldScroll.x,
|
374
|
+
forward: 'right',
|
375
|
+
backward: 'left',
|
376
|
+
offsetProp: 'left'
|
377
|
+
},
|
378
|
+
vertical: {
|
379
|
+
contextOffset: isWindow ? 0 : contextOffset.top,
|
380
|
+
contextScroll: isWindow ? 0 : this.oldScroll.y,
|
381
|
+
contextDimension: this.innerHeight(),
|
382
|
+
oldScroll: this.oldScroll.y,
|
383
|
+
forward: 'down',
|
384
|
+
backward: 'up',
|
385
|
+
offsetProp: 'top'
|
386
|
+
}
|
387
|
+
}
|
388
|
+
|
389
|
+
for (var axisKey in axes) {
|
390
|
+
var axis = axes[axisKey]
|
391
|
+
for (var waypointKey in this.waypoints[axisKey]) {
|
392
|
+
var waypoint = this.waypoints[axisKey][waypointKey]
|
393
|
+
var adjustment = waypoint.options.offset
|
394
|
+
var oldTriggerPoint = waypoint.triggerPoint
|
395
|
+
var elementOffset = 0
|
396
|
+
var freshWaypoint = oldTriggerPoint == null
|
397
|
+
var contextModifier, wasBeforeScroll, nowAfterScroll
|
398
|
+
var triggeredBackward, triggeredForward
|
399
|
+
|
400
|
+
if (waypoint.element !== waypoint.element.window) {
|
401
|
+
elementOffset = waypoint.adapter.offset()[axis.offsetProp]
|
402
|
+
}
|
403
|
+
|
404
|
+
if (typeof adjustment === 'function') {
|
405
|
+
adjustment = adjustment.apply(waypoint)
|
406
|
+
}
|
407
|
+
else if (typeof adjustment === 'string') {
|
408
|
+
adjustment = parseFloat(adjustment)
|
409
|
+
if (waypoint.options.offset.indexOf('%') > - 1) {
|
410
|
+
adjustment = Math.ceil(axis.contextDimension * adjustment / 100)
|
411
|
+
}
|
412
|
+
}
|
413
|
+
|
414
|
+
contextModifier = axis.contextScroll - axis.contextOffset
|
415
|
+
waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)
|
416
|
+
wasBeforeScroll = oldTriggerPoint < axis.oldScroll
|
417
|
+
nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll
|
418
|
+
triggeredBackward = wasBeforeScroll && nowAfterScroll
|
419
|
+
triggeredForward = !wasBeforeScroll && !nowAfterScroll
|
420
|
+
|
421
|
+
if (!freshWaypoint && triggeredBackward) {
|
422
|
+
waypoint.queueTrigger(axis.backward)
|
423
|
+
triggeredGroups[waypoint.group.id] = waypoint.group
|
424
|
+
}
|
425
|
+
else if (!freshWaypoint && triggeredForward) {
|
426
|
+
waypoint.queueTrigger(axis.forward)
|
427
|
+
triggeredGroups[waypoint.group.id] = waypoint.group
|
428
|
+
}
|
429
|
+
else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {
|
430
|
+
waypoint.queueTrigger(axis.forward)
|
431
|
+
triggeredGroups[waypoint.group.id] = waypoint.group
|
432
|
+
}
|
433
|
+
}
|
434
|
+
}
|
435
|
+
|
436
|
+
Waypoint.requestAnimationFrame(function() {
|
437
|
+
for (var groupKey in triggeredGroups) {
|
438
|
+
triggeredGroups[groupKey].flushTriggers()
|
439
|
+
}
|
440
|
+
})
|
441
|
+
|
442
|
+
return this
|
443
|
+
}
|
444
|
+
|
445
|
+
/* Private */
|
446
|
+
Context.findOrCreateByElement = function(element) {
|
447
|
+
return Context.findByElement(element) || new Context(element)
|
448
|
+
}
|
449
|
+
|
450
|
+
/* Private */
|
451
|
+
Context.refreshAll = function() {
|
452
|
+
for (var contextId in contexts) {
|
453
|
+
contexts[contextId].refresh()
|
454
|
+
}
|
455
|
+
}
|
456
|
+
|
457
|
+
/* Public */
|
458
|
+
/* http://imakewebthings.com/waypoints/api/context-find-by-element */
|
459
|
+
Context.findByElement = function(element) {
|
460
|
+
return contexts[element.waypointContextKey]
|
461
|
+
}
|
462
|
+
|
463
|
+
window.onload = function() {
|
464
|
+
if (oldWindowLoad) {
|
465
|
+
oldWindowLoad()
|
466
|
+
}
|
467
|
+
Context.refreshAll()
|
468
|
+
}
|
469
|
+
|
470
|
+
|
471
|
+
Waypoint.requestAnimationFrame = function(callback) {
|
472
|
+
var requestFn = window.requestAnimationFrame ||
|
473
|
+
window.mozRequestAnimationFrame ||
|
474
|
+
window.webkitRequestAnimationFrame ||
|
475
|
+
requestAnimationFrameShim
|
476
|
+
requestFn.call(window, callback)
|
477
|
+
}
|
478
|
+
Waypoint.Context = Context
|
479
|
+
}())
|
480
|
+
;(function() {
|
481
|
+
'use strict'
|
482
|
+
|
483
|
+
function byTriggerPoint(a, b) {
|
484
|
+
return a.triggerPoint - b.triggerPoint
|
485
|
+
}
|
486
|
+
|
487
|
+
function byReverseTriggerPoint(a, b) {
|
488
|
+
return b.triggerPoint - a.triggerPoint
|
489
|
+
}
|
490
|
+
|
491
|
+
var groups = {
|
492
|
+
vertical: {},
|
493
|
+
horizontal: {}
|
494
|
+
}
|
495
|
+
var Waypoint = window.Waypoint
|
496
|
+
|
497
|
+
/* http://imakewebthings.com/waypoints/api/group */
|
498
|
+
function Group(options) {
|
499
|
+
this.name = options.name
|
500
|
+
this.axis = options.axis
|
501
|
+
this.id = this.name + '-' + this.axis
|
502
|
+
this.waypoints = []
|
503
|
+
this.clearTriggerQueues()
|
504
|
+
groups[this.axis][this.name] = this
|
505
|
+
}
|
506
|
+
|
507
|
+
/* Private */
|
508
|
+
Group.prototype.add = function(waypoint) {
|
509
|
+
this.waypoints.push(waypoint)
|
510
|
+
}
|
511
|
+
|
512
|
+
/* Private */
|
513
|
+
Group.prototype.clearTriggerQueues = function() {
|
514
|
+
this.triggerQueues = {
|
515
|
+
up: [],
|
516
|
+
down: [],
|
517
|
+
left: [],
|
518
|
+
right: []
|
519
|
+
}
|
520
|
+
}
|
521
|
+
|
522
|
+
/* Private */
|
523
|
+
Group.prototype.flushTriggers = function() {
|
524
|
+
for (var direction in this.triggerQueues) {
|
525
|
+
var waypoints = this.triggerQueues[direction]
|
526
|
+
var reverse = direction === 'up' || direction === 'left'
|
527
|
+
waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)
|
528
|
+
for (var i = 0, end = waypoints.length; i < end; i += 1) {
|
529
|
+
var waypoint = waypoints[i]
|
530
|
+
if (waypoint.options.continuous || i === waypoints.length - 1) {
|
531
|
+
waypoint.trigger([direction])
|
532
|
+
}
|
533
|
+
}
|
534
|
+
}
|
535
|
+
this.clearTriggerQueues()
|
536
|
+
}
|
537
|
+
|
538
|
+
/* Private */
|
539
|
+
Group.prototype.next = function(waypoint) {
|
540
|
+
this.waypoints.sort(byTriggerPoint)
|
541
|
+
var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
|
542
|
+
var isLast = index === this.waypoints.length - 1
|
543
|
+
return isLast ? null : this.waypoints[index + 1]
|
544
|
+
}
|
545
|
+
|
546
|
+
/* Private */
|
547
|
+
Group.prototype.previous = function(waypoint) {
|
548
|
+
this.waypoints.sort(byTriggerPoint)
|
549
|
+
var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
|
550
|
+
return index ? this.waypoints[index - 1] : null
|
551
|
+
}
|
552
|
+
|
553
|
+
/* Private */
|
554
|
+
Group.prototype.queueTrigger = function(waypoint, direction) {
|
555
|
+
this.triggerQueues[direction].push(waypoint)
|
556
|
+
}
|
557
|
+
|
558
|
+
/* Private */
|
559
|
+
Group.prototype.remove = function(waypoint) {
|
560
|
+
var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)
|
561
|
+
if (index > -1) {
|
562
|
+
this.waypoints.splice(index, 1)
|
563
|
+
}
|
564
|
+
}
|
565
|
+
|
566
|
+
/* Public */
|
567
|
+
/* http://imakewebthings.com/waypoints/api/first */
|
568
|
+
Group.prototype.first = function() {
|
569
|
+
return this.waypoints[0]
|
570
|
+
}
|
571
|
+
|
572
|
+
/* Public */
|
573
|
+
/* http://imakewebthings.com/waypoints/api/last */
|
574
|
+
Group.prototype.last = function() {
|
575
|
+
return this.waypoints[this.waypoints.length - 1]
|
576
|
+
}
|
577
|
+
|
578
|
+
/* Private */
|
579
|
+
Group.findOrCreate = function(options) {
|
580
|
+
return groups[options.axis][options.name] || new Group(options)
|
581
|
+
}
|
582
|
+
|
583
|
+
Waypoint.Group = Group
|
584
|
+
}())
|
585
|
+
;(function() {
|
586
|
+
'use strict'
|
587
|
+
|
588
|
+
var Waypoint = window.Waypoint
|
589
|
+
|
590
|
+
function isWindow(element) {
|
591
|
+
return element === element.window
|
592
|
+
}
|
593
|
+
|
594
|
+
function getWindow(element) {
|
595
|
+
if (isWindow(element)) {
|
596
|
+
return element
|
597
|
+
}
|
598
|
+
return element.defaultView
|
599
|
+
}
|
600
|
+
|
601
|
+
function NoFrameworkAdapter(element) {
|
602
|
+
this.element = element
|
603
|
+
this.handlers = {}
|
604
|
+
}
|
605
|
+
|
606
|
+
NoFrameworkAdapter.prototype.innerHeight = function() {
|
607
|
+
var isWin = isWindow(this.element)
|
608
|
+
return isWin ? this.element.innerHeight : this.element.clientHeight
|
609
|
+
}
|
610
|
+
|
611
|
+
NoFrameworkAdapter.prototype.innerWidth = function() {
|
612
|
+
var isWin = isWindow(this.element)
|
613
|
+
return isWin ? this.element.innerWidth : this.element.clientWidth
|
614
|
+
}
|
615
|
+
|
616
|
+
NoFrameworkAdapter.prototype.off = function(event, handler) {
|
617
|
+
function removeListeners(element, listeners, handler) {
|
618
|
+
for (var i = 0, end = listeners.length - 1; i < end; i++) {
|
619
|
+
var listener = listeners[i]
|
620
|
+
if (!handler || handler === listener) {
|
621
|
+
element.removeEventListener(listener)
|
622
|
+
}
|
623
|
+
}
|
624
|
+
}
|
625
|
+
|
626
|
+
var eventParts = event.split('.')
|
627
|
+
var eventType = eventParts[0]
|
628
|
+
var namespace = eventParts[1]
|
629
|
+
var element = this.element
|
630
|
+
|
631
|
+
if (namespace && this.handlers[namespace] && eventType) {
|
632
|
+
removeListeners(element, this.handlers[namespace][eventType], handler)
|
633
|
+
this.handlers[namespace][eventType] = []
|
634
|
+
}
|
635
|
+
else if (eventType) {
|
636
|
+
for (var ns in this.handlers) {
|
637
|
+
removeListeners(element, this.handlers[ns][eventType] || [], handler)
|
638
|
+
this.handlers[ns][eventType] = []
|
639
|
+
}
|
640
|
+
}
|
641
|
+
else if (namespace && this.handlers[namespace]) {
|
642
|
+
for (var type in this.handlers[namespace]) {
|
643
|
+
removeListeners(element, this.handlers[namespace][type], handler)
|
644
|
+
}
|
645
|
+
this.handlers[namespace] = {}
|
646
|
+
}
|
647
|
+
}
|
648
|
+
|
649
|
+
/* Adapted from jQuery 1.x offset() */
|
650
|
+
NoFrameworkAdapter.prototype.offset = function() {
|
651
|
+
if (!this.element.ownerDocument) {
|
652
|
+
return null
|
653
|
+
}
|
654
|
+
|
655
|
+
var documentElement = this.element.ownerDocument.documentElement
|
656
|
+
var win = getWindow(this.element.ownerDocument)
|
657
|
+
var rect = {
|
658
|
+
top: 0,
|
659
|
+
left: 0
|
660
|
+
}
|
661
|
+
|
662
|
+
if (this.element.getBoundingClientRect) {
|
663
|
+
rect = this.element.getBoundingClientRect()
|
664
|
+
}
|
665
|
+
|
666
|
+
return {
|
667
|
+
top: rect.top + win.pageYOffset - documentElement.clientTop,
|
668
|
+
left: rect.left + win.pageXOffset - documentElement.clientLeft
|
669
|
+
}
|
670
|
+
}
|
671
|
+
|
672
|
+
NoFrameworkAdapter.prototype.on = function(event, handler) {
|
673
|
+
var eventParts = event.split('.')
|
674
|
+
var eventType = eventParts[0]
|
675
|
+
var namespace = eventParts[1] || '__default'
|
676
|
+
var nsHandlers = this.handlers[namespace] = this.handlers[namespace] || {}
|
677
|
+
var nsTypeList = nsHandlers[eventType] = nsHandlers[eventType] || []
|
678
|
+
|
679
|
+
nsTypeList.push(handler)
|
680
|
+
this.element.addEventListener(eventType, handler)
|
681
|
+
}
|
682
|
+
|
683
|
+
NoFrameworkAdapter.prototype.outerHeight = function(includeMargin) {
|
684
|
+
var height = this.innerHeight()
|
685
|
+
var computedStyle
|
686
|
+
|
687
|
+
if (includeMargin && !isWindow(this.element)) {
|
688
|
+
computedStyle = window.getComputedStyle(this.element)
|
689
|
+
height += parseInt(computedStyle.marginTop, 10)
|
690
|
+
height += parseInt(computedStyle.marginBottom, 10)
|
691
|
+
}
|
692
|
+
|
693
|
+
return height
|
694
|
+
}
|
695
|
+
|
696
|
+
NoFrameworkAdapter.prototype.outerWidth = function(includeMargin) {
|
697
|
+
var width = this.innerWidth()
|
698
|
+
var computedStyle
|
699
|
+
|
700
|
+
if (includeMargin && !isWindow(this.element)) {
|
701
|
+
computedStyle = window.getComputedStyle(this.element)
|
702
|
+
width += parseInt(computedStyle.marginLeft, 10)
|
703
|
+
width += parseInt(computedStyle.marginRight, 10)
|
704
|
+
}
|
705
|
+
|
706
|
+
return width
|
707
|
+
}
|
708
|
+
|
709
|
+
NoFrameworkAdapter.prototype.scrollLeft = function() {
|
710
|
+
var win = getWindow(this.element)
|
711
|
+
return win ? win.pageXOffset : this.element.scrollLeft
|
712
|
+
}
|
713
|
+
|
714
|
+
NoFrameworkAdapter.prototype.scrollTop = function() {
|
715
|
+
var win = getWindow(this.element)
|
716
|
+
return win ? win.pageYOffset : this.element.scrollTop
|
717
|
+
}
|
718
|
+
|
719
|
+
NoFrameworkAdapter.extend = function() {
|
720
|
+
var args = Array.prototype.slice.call(arguments)
|
721
|
+
|
722
|
+
function merge(target, obj) {
|
723
|
+
if (typeof target === 'object' && typeof obj === 'object') {
|
724
|
+
for (var key in obj) {
|
725
|
+
if (obj.hasOwnProperty(key)) {
|
726
|
+
target[key] = obj[key]
|
727
|
+
}
|
728
|
+
}
|
729
|
+
}
|
730
|
+
|
731
|
+
return target
|
732
|
+
}
|
733
|
+
|
734
|
+
for (var i = 1, end = args.length; i < end; i++) {
|
735
|
+
merge(args[0], args[i])
|
736
|
+
}
|
737
|
+
return args[0]
|
738
|
+
}
|
739
|
+
|
740
|
+
NoFrameworkAdapter.inArray = function(element, array, i) {
|
741
|
+
return array == null ? -1 : array.indexOf(element, i)
|
742
|
+
}
|
743
|
+
|
744
|
+
NoFrameworkAdapter.isEmptyObject = function(obj) {
|
745
|
+
/* eslint no-unused-vars: 0 */
|
746
|
+
for (var name in obj) {
|
747
|
+
return false
|
748
|
+
}
|
749
|
+
return true
|
750
|
+
}
|
751
|
+
|
752
|
+
Waypoint.adapters.push({
|
753
|
+
name: 'noframework',
|
754
|
+
Adapter: NoFrameworkAdapter
|
755
|
+
})
|
756
|
+
Waypoint.Adapter = NoFrameworkAdapter
|
757
|
+
}())
|
758
|
+
;
|