| //Licensed to the Apache Software Foundation (ASF) under one or more |
| //contributor license agreements. See the NOTICE file distributed with |
| //this work for additional information regarding copyright ownership. |
| //The ASF licenses this file to You under the Apache License, Version 2.0 |
| //(the "License"); you may not use this file except in compliance with |
| //the License. You may obtain a copy of the License at |
| // |
| //http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| //Unless required by applicable law or agreed to in writing, software |
| //distributed under the License is distributed on an "AS IS" BASIS, |
| //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either |
| //express or implied. See the License for the specific language governing |
| //permissions and limitations under the License. |
| |
| (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.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 |
| } |
| |
| /* Private */ |
| Waypoint.prototype.queueTrigger = function(direction) { |
| this.group.queueTrigger(this, direction) |
| } |
| |
| /* Private */ |
| Waypoint.prototype.trigger = function(args) { |
| if (!this.enabled) { |
| return |
| } |
| if (this.callback) { |
| this.callback.apply(this, args) |
| } |
| } |
| |
| /* 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 i = 0, end = allWaypointsArray.length; i < end; i++) { |
| 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 = { |
| context: window, |
| continuous: true, |
| enabled: true, |
| group: 'default', |
| horizontal: false, |
| offset: 0 |
| } |
| |
| 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 |
| }()) |