/*! Waypoints - 4.0.1 Copyright © 2011-2016 Caleb Troughton Licensed under the MIT license. https://github.com/imakewebthings/waypoints/blob/master/licenses.txt */ (function(){'use strict' var keyCounter=0 var allWaypoints={} function Waypoint(options){if(!options){throw new Error('No options passed to Waypoint constructor')} if(!options.element){throw new Error('No element option passed to Waypoint constructor')} if(!options.handler){throw new Error('No handler option passed to Waypoint constructor')} this.key='waypoint-'+keyCounter this.options=Waypoint.Adapter.extend({},Waypoint.defaults,options) this.element=this.options.element this.adapter=new Waypoint.Adapter(this.element) this.callback=options.handler this.axis=this.options.horizontal?'horizontal':'vertical' this.enabled=this.options.enabled this.triggerPoint=null this.group=Waypoint.Group.findOrCreate({name:this.options.group,axis:this.axis}) this.context=Waypoint.Context.findOrCreateByElement(this.options.context) if(Waypoint.offsetAliases[this.options.offset]){this.options.offset=Waypoint.offsetAliases[this.options.offset]} this.group.add(this) this.context.add(this) allWaypoints[this.key]=this keyCounter+=1} Waypoint.prototype.queueTrigger=function(direction){this.group.queueTrigger(this,direction)} Waypoint.prototype.trigger=function(args){if(!this.enabled){return} if(this.callback){this.callback.apply(this,args)}} Waypoint.prototype.destroy=function(){this.context.remove(this) this.group.remove(this) delete allWaypoints[this.key]} Waypoint.prototype.disable=function(){this.enabled=false return this} Waypoint.prototype.enable=function(){this.context.refresh() this.enabled=true return this} Waypoint.prototype.next=function(){return this.group.next(this)} Waypoint.prototype.previous=function(){return this.group.previous(this)} Waypoint.invokeAll=function(method){var allWaypointsArray=[] for(var waypointKey in allWaypoints){allWaypointsArray.push(allWaypoints[waypointKey])} for(var i=0,end=allWaypointsArray.length;iaxis.oldScroll var direction=isForward?axis.forward:axis.backward for(var waypointKey in this.waypoints[axisKey]){var waypoint=this.waypoints[axisKey][waypointKey] if(waypoint.triggerPoint===null){continue} var wasBeforeTriggerPoint=axis.oldScroll=waypoint.triggerPoint var crossedForward=wasBeforeTriggerPoint&&nowAfterTriggerPoint var crossedBackward=!wasBeforeTriggerPoint&&!nowAfterTriggerPoint if(crossedForward||crossedBackward){waypoint.queueTrigger(direction) triggeredGroups[waypoint.group.id]=waypoint.group}}} for(var groupKey in triggeredGroups){triggeredGroups[groupKey].flushTriggers()} this.oldScroll={x:axes.horizontal.newScroll,y:axes.vertical.newScroll}} Context.prototype.innerHeight=function(){if(this.element==this.element.window){return Waypoint.viewportHeight()} return this.adapter.innerHeight()} Context.prototype.remove=function(waypoint){delete this.waypoints[waypoint.axis][waypoint.key] this.checkEmpty()} Context.prototype.innerWidth=function(){if(this.element==this.element.window){return Waypoint.viewportWidth()} return this.adapter.innerWidth()} Context.prototype.destroy=function(){var allWaypoints=[] for(var axis in this.waypoints){for(var waypointKey in this.waypoints[axis]){allWaypoints.push(this.waypoints[axis][waypointKey])}} for(var i=0,end=allWaypoints.length;i-1){adjustment=Math.ceil(axis.contextDimension*adjustment/100)}} contextModifier=axis.contextScroll-axis.contextOffset waypoint.triggerPoint=Math.floor(elementOffset+contextModifier-adjustment) wasBeforeScroll=oldTriggerPoint=axis.oldScroll triggeredBackward=wasBeforeScroll&&nowAfterScroll triggeredForward=!wasBeforeScroll&&!nowAfterScroll if(!freshWaypoint&&triggeredBackward){waypoint.queueTrigger(axis.backward) triggeredGroups[waypoint.group.id]=waypoint.group} else if(!freshWaypoint&&triggeredForward){waypoint.queueTrigger(axis.forward) triggeredGroups[waypoint.group.id]=waypoint.group} else if(freshWaypoint&&axis.oldScroll>=waypoint.triggerPoint){waypoint.queueTrigger(axis.forward) triggeredGroups[waypoint.group.id]=waypoint.group}}} Waypoint.requestAnimationFrame(function(){for(var groupKey in triggeredGroups){triggeredGroups[groupKey].flushTriggers()}}) return this} Context.findOrCreateByElement=function(element){return Context.findByElement(element)||new Context(element)} Context.refreshAll=function(){for(var contextId in contexts){contexts[contextId].refresh()}} Context.findByElement=function(element){return contexts[element.waypointContextKey]} window.onload=function(){if(oldWindowLoad){oldWindowLoad()} Context.refreshAll()} Waypoint.requestAnimationFrame=function(callback){var requestFn=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||requestAnimationFrameShim requestFn.call(window,callback)} Waypoint.Context=Context}());(function(){'use strict' function byTriggerPoint(a,b){return a.triggerPoint-b.triggerPoint} function byReverseTriggerPoint(a,b){return b.triggerPoint-a.triggerPoint} var groups={vertical:{},horizontal:{}} var Waypoint=window.Waypoint function Group(options){this.name=options.name this.axis=options.axis this.id=this.name+'-'+this.axis this.waypoints=[] this.clearTriggerQueues() groups[this.axis][this.name]=this} Group.prototype.add=function(waypoint){this.waypoints.push(waypoint)} Group.prototype.clearTriggerQueues=function(){this.triggerQueues={up:[],down:[],left:[],right:[]}} Group.prototype.flushTriggers=function(){for(var direction in this.triggerQueues){var waypoints=this.triggerQueues[direction] var reverse=direction==='up'||direction==='left' waypoints.sort(reverse?byReverseTriggerPoint:byTriggerPoint) for(var i=0,end=waypoints.length;i-1){this.waypoints.splice(index,1)}} Group.prototype.first=function(){return this.waypoints[0]} Group.prototype.last=function(){return this.waypoints[this.waypoints.length-1]} Group.findOrCreate=function(options){return groups[options.axis][options.name]||new Group(options)} Waypoint.Group=Group}());(function(){'use strict' var $=window.jQuery var Waypoint=window.Waypoint function JQueryAdapter(element){this.$element=$(element)} $.each(['innerHeight','innerWidth','off','offset','on','outerHeight','outerWidth','scrollLeft','scrollTop'],function(i,method){JQueryAdapter.prototype[method]=function(){var args=Array.prototype.slice.call(arguments) return this.$element[method].apply(this.$element,args)}}) $.each(['extend','inArray','isEmptyObject'],function(i,method){JQueryAdapter[method]=$[method]}) Waypoint.adapters.push({name:'jquery',Adapter:JQueryAdapter}) Waypoint.Adapter=JQueryAdapter}());(function(){'use strict' var Waypoint=window.Waypoint function createExtension(framework){return function(){var waypoints=[] var overrides=arguments[0] if(framework.isFunction(arguments[0])){overrides=framework.extend({},arguments[1]) overrides.handler=arguments[0]} this.each(function(){var options=framework.extend({},overrides,{element:this}) if(typeof options.context==='string'){options.context=framework(this).closest(options.context)[0]} waypoints.push(new Waypoint(options))}) return waypoints}} if(window.jQuery){window.jQuery.fn.elementorWaypoint=createExtension(window.jQuery)} if(window.Zepto){window.Zepto.fn.elementorWaypoint=createExtension(window.Zepto)}}());