Вход Регистрация
Файл: plugins/bower_components/waypoints/lib/jquery.waypoints.js
Строк: 826
<?php
/*!
Waypoints - 3.1.1
Copyright © 2011-2015 Caleb Troughton
Licensed under the MIT license.
https://github.com/imakewebthings/waypoints/blog/master/licenses.txt
*/
(function() {
  
'use strict'

  
var keyCounter 0
  
var allWaypoints = {}

  
/* http://imakewebthings.com/waypoints/api/waypoint */
  
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.defaultsoptions)
    
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({
      
namethis.options.group,
      
axisthis.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
  
}

  
/* Private */
  
Waypoint.prototype.queueTrigger = function(direction) {
    
this.group.queueTrigger(thisdirection)
  }

  
/* Private */
  
Waypoint.prototype.trigger = function(args) {
    if (!
this.enabled) {
      return
    }
    if (
this.callback) {
      
this.callback.apply(thisargs)
    }
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/destroy */
  
Waypoint.prototype.destroy = function() {
    
this.context.remove(this)
    
this.group.remove(this)
    
delete allWaypoints[this.key]
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/disable */
  
Waypoint.prototype.disable = function() {
    
this.enabled false
    
return this
  
}

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/enable */
  
Waypoint.prototype.enable = function() {
    
this.context.refresh()
    
this.enabled true
    
return this
  
}

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/next */
  
Waypoint.prototype.next = function() {
    return 
this.group.next(this)
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/previous */
  
Waypoint.prototype.previous = function() {
    return 
this.group.previous(this)
  }

  
/* Private */
  
Waypoint.invokeAll = function(method) {
    var 
allWaypointsArray = []
    for (var 
waypointKey in allWaypoints) {
      
allWaypointsArray.push(allWaypoints[waypointKey])
    }
    for (var 
0end allWaypointsArray.lengthendi++) {
      
allWaypointsArray[i][method]()
    }
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/destroy-all */
  
Waypoint.destroyAll = function() {
    
Waypoint.invokeAll('destroy')
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/disable-all */
  
Waypoint.disableAll = function() {
    
Waypoint.invokeAll('disable')
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/enable-all */
  
Waypoint.enableAll = function() {
    
Waypoint.invokeAll('enable')
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/refresh-all */
  
Waypoint.refreshAll = function() {
    
Waypoint.Context.refreshAll()
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/viewport-height */
  
Waypoint.viewportHeight = function() {
    return 
window.innerHeight || document.documentElement.clientHeight
  
}

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/viewport-width */
  
Waypoint.viewportWidth = function() {
    return 
document.documentElement.clientWidth
  
}

  
Waypoint.adapters = []

  
Waypoint.defaults = {
    
contextwindow,
    
continuoustrue,
    
enabledtrue,
    
group'default',
    
horizontalfalse,
    
offset0
  
}

  
Waypoint.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 Waypoint
}())
;(function() {
  
'use strict'

  
function requestAnimationFrameShim(callback) {
    
window.setTimeout(callback1000 60)
  }

  var 
keyCounter 0
  
var contexts = {}
  var 
Waypoint window.Waypoint
  
var oldWindowLoad window.onload

  
/* http://imakewebthings.com/waypoints/api/context */
  
function Context(element) {
    
this.element element
    this
.Adapter Waypoint.Adapter
    this
.adapter = new this.Adapter(element)
    
this.key 'waypoint-context-' keyCounter
    this
.didScroll false
    this
.didResize false
    this
.oldScroll = {
      
xthis.adapter.scrollLeft(),
      
ythis.adapter.scrollTop()
    }
    
this.waypoints = {
      
vertical: {},
      
horizontal: {}
    }

    
element.waypointContextKey this.key
    contexts
[element.waypointContextKey] = this
    keyCounter 
+= 1

    this
.createThrottledScrollHandler()
    
this.createThrottledResizeHandler()
  }

  
/* Private */
  
Context.prototype.add = function(waypoint) {
    var 
axis waypoint.options.horizontal 'horizontal' 'vertical'
    
this.waypoints[axis][waypoint.key] = waypoint
    this
.refresh()
  }

  
/* Private */
  
Context.prototype.checkEmpty = function() {
    var 
horizontalEmpty this.Adapter.isEmptyObject(this.waypoints.horizontal)
    var 
verticalEmpty this.Adapter.isEmptyObject(this.waypoints.vertical)
    if (
horizontalEmpty && verticalEmpty) {
      
this.adapter.off('.waypoints')
      
delete contexts[this.key]
    }
  }

  
/* Private */
  
Context.prototype.createThrottledResizeHandler = function() {
    var 
self this

    
function resizeHandler() {
      
self.handleResize()
      
self.didResize false
    
}

    
this.adapter.on('resize.waypoints', function() {
      if (!
self.didResize) {
        
self.didResize true
        Waypoint
.requestAnimationFrame(resizeHandler)
      }
    })
  }

  
/* Private */
  
Context.prototype.createThrottledScrollHandler = function() {
    var 
self this
    
function scrollHandler() {
      
self.handleScroll()
      
self.didScroll false
    
}

    
this.adapter.on('scroll.waypoints', function() {
      if (!
self.didScroll || Waypoint.isTouch) {
        
self.didScroll true
        Waypoint
.requestAnimationFrame(scrollHandler)
      }
    })
  }

  
/* Private */
  
Context.prototype.handleResize = function() {
    
Waypoint.Context.refreshAll()
  }

  
/* Private */
  
Context.prototype.handleScroll = function() {
    var 
triggeredGroups = {}
    var 
axes = {
      
horizontal: {
        
newScrollthis.adapter.scrollLeft(),
        
oldScrollthis.oldScroll.x,
        
forward'right',
        
backward'left'
      
},
      
vertical: {
        
newScrollthis.adapter.scrollTop(),
        
oldScrollthis.oldScroll.y,
        
forward'down',
        
backward'up'
      
}
    }

    for (var 
axisKey in axes) {
      var 
axis axes[axisKey]
      var 
isForward axis.newScroll axis.oldScroll
      
var direction isForward axis.forward axis.backward

      
for (var waypointKey in this.waypoints[axisKey]) {
        var 
waypoint this.waypoints[axisKey][waypointKey]
        var 
wasBeforeTriggerPoint axis.oldScroll waypoint.triggerPoint
        
var nowAfterTriggerPoint axis.newScroll >= 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 = {
      
xaxes.horizontal.newScroll,
      
yaxes.vertical.newScroll
    
}
  }

  
/* Private */
  
Context.prototype.innerHeight = function() {
    
/*eslint-disable eqeqeq */
    
if (this.element == this.element.window) {
      return 
Waypoint.viewportHeight()
    }
    
/*eslint-enable eqeqeq */
    
return this.adapter.innerHeight()
  }

  
/* Private */
  
Context.prototype.remove = function(waypoint) {
    
delete this.waypoints[waypoint.axis][waypoint.key]
    
this.checkEmpty()
  }

  
/* Private */
  
Context.prototype.innerWidth = function() {
    
/*eslint-disable eqeqeq */
    
if (this.element == this.element.window) {
      return 
Waypoint.viewportWidth()
    }
    
/*eslint-enable eqeqeq */
    
return this.adapter.innerWidth()
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/context-destroy */
  
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 
0end allWaypoints.lengthendi++) {
      
allWaypoints[i].destroy()
    }
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/context-refresh */
  
Context.prototype.refresh = function() {
    
/*eslint-disable eqeqeq */
    
var isWindow this.element == this.element.window
    
/*eslint-enable eqeqeq */
    
var contextOffset this.adapter.offset()
    var 
triggeredGroups = {}
    var 
axes

    this
.handleScroll()
    
axes = {
      
horizontal: {
        
contextOffsetisWindow contextOffset.left,
        
contextScrollisWindow this.oldScroll.x,
        
contextDimensionthis.innerWidth(),
        
oldScrollthis.oldScroll.x,
        
forward'right',
        
backward'left',
        
offsetProp'left'
      
},
      
vertical: {
        
contextOffsetisWindow contextOffset.top,
        
contextScrollisWindow this.oldScroll.y,
        
contextDimensionthis.innerHeight(),
        
oldScrollthis.oldScroll.y,
        
forward'down',
        
backward'up',
        
offsetProp'top'
      
}
    }

    for (var 
axisKey in axes) {
      var 
axis axes[axisKey]
      for (var 
waypointKey in this.waypoints[axisKey]) {
        var 
waypoint this.waypoints[axisKey][waypointKey]
        var 
adjustment waypoint.options.offset
        
var oldTriggerPoint waypoint.triggerPoint
        
var elementOffset 0
        
var freshWaypoint oldTriggerPoint == null
        
var contextModifierwasBeforeScrollnowAfterScroll
        
var triggeredBackwardtriggeredForward

        
if (waypoint.element !== waypoint.element.window) {
          
elementOffset waypoint.adapter.offset()[axis.offsetProp]
        }

        if (
typeof adjustment === 'function') {
          
adjustment adjustment.apply(waypoint)
        }
        else if (
typeof adjustment === 'string') {
          
adjustment parseFloat(adjustment)
          if (
waypoint.options.offset.indexOf('%') > - 1) {
            
adjustment Math.ceil(axis.contextDimension adjustment 100)
          }
        }

        
contextModifier axis.contextScroll axis.contextOffset
        waypoint
.triggerPoint elementOffset contextModifier adjustment
        wasBeforeScroll 
oldTriggerPoint axis.oldScroll
        nowAfterScroll 
waypoint.triggerPoint >= 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
        
}
      }
    }

    for (var 
groupKey in triggeredGroups) {
      
triggeredGroups[groupKey].flushTriggers()
    }

    return 
this
  
}

  
/* Private */
  
Context.findOrCreateByElement = function(element) {
    return 
Context.findByElement(element) || new Context(element)
  }

  
/* Private */
  
Context.refreshAll = function() {
    for (var 
contextId in contexts) {
      
contexts[contextId].refresh()
    }
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/context-find-by-element */
  
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(windowcallback)
  }
  
Waypoint.Context Context
}())
;(function() {
  
'use strict'

  
function byTriggerPoint(ab) {
    return 
a.triggerPoint b.triggerPoint
  
}

  function 
byReverseTriggerPoint(ab) {
    return 
b.triggerPoint a.triggerPoint
  
}

  var 
groups = {
    
vertical: {},
    
horizontal: {}
  }
  var 
Waypoint window.Waypoint

  
/* http://imakewebthings.com/waypoints/api/group */
  
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
  
}

  
/* Private */
  
Group.prototype.add = function(waypoint) {
    
this.waypoints.push(waypoint)
  }

  
/* Private */
  
Group.prototype.clearTriggerQueues = function() {
    
this.triggerQueues = {
      
up: [],
      
down: [],
      
left: [],
      
right: []
    }
  }

  
/* Private */
  
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 
0end waypoints.lengthend+= 1) {
        var 
waypoint waypoints[i]
        if (
waypoint.options.continuous || === waypoints.length 1) {
          
waypoint.trigger([direction])
        }
      }
    }
    
this.clearTriggerQueues()
  }

  
/* Private */
  
Group.prototype.next = function(waypoint) {
    
this.waypoints.sort(byTriggerPoint)
    var 
index Waypoint.Adapter.inArray(waypointthis.waypoints)
    var 
isLast index === this.waypoints.length 1
    
return isLast null this.waypoints[index 1]
  }

  
/* Private */
  
Group.prototype.previous = function(waypoint) {
    
this.waypoints.sort(byTriggerPoint)
    var 
index Waypoint.Adapter.inArray(waypointthis.waypoints)
    return 
index this.waypoints[index 1] : null
  
}

  
/* Private */
  
Group.prototype.queueTrigger = function(waypointdirection) {
    
this.triggerQueues[direction].push(waypoint)
  }

  
/* Private */
  
Group.prototype.remove = function(waypoint) {
    var 
index Waypoint.Adapter.inArray(waypointthis.waypoints)
    if (
index > -1) {
      
this.waypoints.splice(index1)
    }
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/first */
  
Group.prototype.first = function() {
    return 
this.waypoints[0]
  }

  
/* Public */
  /* http://imakewebthings.com/waypoints/api/last */
  
Group.prototype.last = function() {
    return 
this.waypoints[this.waypoints.length 1]
  }

  
/* Private */
  
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(imethod) {
    
JQueryAdapter.prototype[method] = function() {
      var 
args = Array.prototype.slice.call(arguments)
      return 
this.$element[method].apply(this.$elementargs)
    }
  })

  $.
each([
    
'extend',
    
'inArray',
    
'isEmptyObject'
  
], function(imethod) {
    
JQueryAdapter[method] = $[method]
  })

  
Waypoint.adapters.push({
    
name'jquery',
    
AdapterJQueryAdapter
  
})
  
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, {
          
elementthis
        
})
        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.waypoint createExtension(window.jQuery)
  }
  if (
window.Zepto) {
    
window.Zepto.fn.waypoint createExtension(window.Zepto)
  }
}())
;
?>
Онлайн: 1
Реклама