Вход Регистрация
Файл: CloudBox-main/doc/js/waypoints.js
Строк: 751
<?php
// Generated by CoffeeScript 1.6.2
/*
jQuery Waypoints - v2.0.3
Copyright (c) 2011-2013 Caleb Troughton
Dual licensed under the MIT license and GPL license.
https://github.com/imakewebthings/jquery-waypoints/blob/master/licenses.txt
*/


(function() {
  var 
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
    
__slice = [].slice;

  (function(
root, factory) {
    if (
typeof define === 'function' && define.amd) {
      return 
define('waypoints', ['jquery'], function($) {
        return 
factory($, root);
      });
    } else {
      return 
factory(root.jQuery, root);
    }
  })(
this, function($, window) {
    var 
$w, Context, Waypoint, allWaypoints, contextCounter, contextKey, contexts, isTouch, jQMethods, methods, resizeEvent, scrollEvent, waypointCounter, waypointKey, wp, wps;

    
$w = $(window);
    
isTouch = __indexOf.call(window, 'ontouchstart') >= 0;
    
allWaypoints = {
      
horizontal: {},
      
vertical: {}
    };
    
contextCounter = 1;
    
contexts = {};
    
contextKey = 'waypoints-context-id';
    
resizeEvent = 'resize.waypoints';
    
scrollEvent = 'scroll.waypoints';
    
waypointCounter = 1;
    
waypointKey = 'waypoints-waypoint-ids';
    
wp = 'waypoint';
    
wps = 'waypoints';
    
Context = (function() {
      function 
Context($element) {
        var 
_this = this;

        
this.$element = $element;
        
this.element = $element[0];
        
this.didResize = false;
        
this.didScroll = false;
        
this.id = 'context' + contextCounter++;
        
this.oldScroll = {
          
x: $element.scrollLeft(),
          
y: $element.scrollTop()
        };
        
this.waypoints = {
          
horizontal: {},
          
vertical: {}
        };
        
$element.data(contextKey, this.id);
        
contexts[this.id] = this;
        
$element.bind(scrollEvent, function() {
          var 
scrollHandler;

          if (!(
_this.didScroll || isTouch)) {
            
_this.didScroll = true;
            
scrollHandler = function() {
              
_this.doScroll();
              return 
_this.didScroll = false;
            };
            return 
window.setTimeout(scrollHandler, $[wps].settings.scrollThrottle);
          }
        });
        
$element.bind(resizeEvent, function() {
          var 
resizeHandler;

          if (!
_this.didResize) {
            
_this.didResize = true;
            
resizeHandler = function() {
              $[
wps]('refresh');
              return 
_this.didResize = false;
            };
            return 
window.setTimeout(resizeHandler, $[wps].settings.resizeThrottle);
          }
        });
      }

      
Context.prototype.doScroll = function() {
        var 
axes,
          
_this = this;

        
axes = {
          
horizontal: {
            
newScroll: this.$element.scrollLeft(),
            
oldScroll: this.oldScroll.x,
            
forward: 'right',
            
backward: 'left'
          
},
          
vertical: {
            
newScroll: this.$element.scrollTop(),
            
oldScroll: this.oldScroll.y,
            
forward: 'down',
            
backward: 'up'
          
}
        };
        if (
isTouch && (!axes.vertical.oldScroll || !axes.vertical.newScroll)) {
          $[
wps]('refresh');
        }
        $.
each(axes, function(aKey, axis) {
          var 
direction, isForward, triggered;

          
triggered = [];
          
isForward = axis.newScroll > axis.oldScroll;
          
direction = isForward ? axis.forward : axis.backward;
          $.
each(_this.waypoints[aKey], function(wKey, waypoint) {
            var 
_ref, _ref1;

            if ((
axis.oldScroll < (_ref = waypoint.offset) && _ref <= axis.newScroll)) {
              return 
triggered.push(waypoint);
            } else if ((
axis.newScroll < (_ref1 = waypoint.offset) && _ref1 <= axis.oldScroll)) {
              return 
triggered.push(waypoint);
            }
          });
          
triggered.sort(function(a, b) {
            return 
a.offset - b.offset;
          });
          if (!
isForward) {
            
triggered.reverse();
          }
          return $.
each(triggered, function(i, waypoint) {
            if (
waypoint.options.continuous || i === triggered.length - 1) {
              return 
waypoint.trigger([direction]);
            }
          });
        });
        return 
this.oldScroll = {
          
x: axes.horizontal.newScroll,
          
y: axes.vertical.newScroll
        
};
      };

      
Context.prototype.refresh = function() {
        var 
axes, cOffset, isWin,
          
_this = this;

        
isWin = $.isWindow(this.element);
        
cOffset = this.$element.offset();
        
this.doScroll();
        
axes = {
          
horizontal: {
            
contextOffset: isWin ? 0 : cOffset.left,
            
contextScroll: isWin ? 0 : this.oldScroll.x,
            
contextDimension: this.$element.width(),
            
oldScroll: this.oldScroll.x,
            
forward: 'right',
            
backward: 'left',
            
offsetProp: 'left'
          
},
          
vertical: {
            
contextOffset: isWin ? 0 : cOffset.top,
            
contextScroll: isWin ? 0 : this.oldScroll.y,
            
contextDimension: isWin ? $[wps]('viewportHeight') : this.$element.height(),
            
oldScroll: this.oldScroll.y,
            
forward: 'down',
            
backward: 'up',
            
offsetProp: 'top'
          
}
        };
        return $.
each(axes, function(aKey, axis) {
          return $.
each(_this.waypoints[aKey], function(i, waypoint) {
            var 
adjustment, elementOffset, oldOffset, _ref, _ref1;

            
adjustment = waypoint.options.offset;
            
oldOffset = waypoint.offset;
            
elementOffset = $.isWindow(waypoint.element) ? 0 : waypoint.$element.offset()[axis.offsetProp];
            if ($.
isFunction(adjustment)) {
              
adjustment = adjustment.apply(waypoint.element);
            } else if (
typeof adjustment === 'string') {
              
adjustment = parseFloat(adjustment);
              if (
waypoint.options.offset.indexOf('%') > -1) {
                
adjustment = Math.ceil(axis.contextDimension * adjustment / 100);
              }
            }
            
waypoint.offset = elementOffset - axis.contextOffset + axis.contextScroll - adjustment;
            if ((
waypoint.options.onlyOnScroll && (oldOffset != null)) || !waypoint.enabled) {
              return;
            }
            if (
oldOffset !== null && (oldOffset < (_ref = axis.oldScroll) && _ref <= waypoint.offset)) {
              return 
waypoint.trigger([axis.backward]);
            } else if (
oldOffset !== null && (oldOffset > (_ref1 = axis.oldScroll) && _ref1 >= waypoint.offset)) {
              return 
waypoint.trigger([axis.forward]);
            } else if (
oldOffset === null && axis.oldScroll >= waypoint.offset) {
              return 
waypoint.trigger([axis.forward]);
            }
          });
        });
      };

      
Context.prototype.checkEmpty = function() {
        if ($.
isEmptyObject(this.waypoints.horizontal) && $.isEmptyObject(this.waypoints.vertical)) {
          
this.$element.unbind([resizeEvent, scrollEvent].join(' '));
          return 
delete contexts[this.id];
        }
      };

      return 
Context;

    })();
    
Waypoint = (function() {
      function 
Waypoint($element, context, options) {
        var 
idList, _ref;

        
options = $.extend({}, $.fn[wp].defaults, options);
        if (
options.offset === 'bottom-in-view') {
          
options.offset = function() {
            var 
contextHeight;

            
contextHeight = $[wps]('viewportHeight');
            if (!$.
isWindow(context.element)) {
              
contextHeight = context.$element.height();
            }
            return 
contextHeight - $(this).outerHeight();
          };
        }
        
this.$element = $element;
        
this.element = $element[0];
        
this.axis = options.horizontal ? 'horizontal' : 'vertical';
        
this.callback = options.handler;
        
this.context = context;
        
this.enabled = options.enabled;
        
this.id = 'waypoints' + waypointCounter++;
        
this.offset = null;
        
this.options = options;
        
context.waypoints[this.axis][this.id] = this;
        
allWaypoints[this.axis][this.id] = this;
        
idList = (_ref = $element.data(waypointKey)) != null ? _ref : [];
        
idList.push(this.id);
        
$element.data(waypointKey, idList);
      }

      
Waypoint.prototype.trigger = function(args) {
        if (!
this.enabled) {
          return;
        }
        if (
this.callback != null) {
          
this.callback.apply(this.element, args);
        }
        if (
this.options.triggerOnce) {
          return 
this.destroy();
        }
      };

      
Waypoint.prototype.disable = function() {
        return 
this.enabled = false;
      };

      
Waypoint.prototype.enable = function() {
        
this.context.refresh();
        return 
this.enabled = true;
      };

      
Waypoint.prototype.destroy = function() {
        
delete allWaypoints[this.axis][this.id];
        
delete this.context.waypoints[this.axis][this.id];
        return 
this.context.checkEmpty();
      };

      
Waypoint.getWaypointsByElement = function(element) {
        var 
all, ids;

        
ids = $(element).data(waypointKey);
        if (!
ids) {
          return [];
        }
        
all = $.extend({}, allWaypoints.horizontal, allWaypoints.vertical);
        return $.
map(ids, function(id) {
          return 
all[id];
        });
      };

      return 
Waypoint;

    })();
    
methods = {
      
init: function(f, options) {
        var 
_ref;

        if (
options == null) {
          
options = {};
        }
        if ((
_ref = options.handler) == null) {
          
options.handler = f;
        }
        
this.each(function() {
          var 
$this, context, contextElement, _ref1;

          
$this = $(this);
          
contextElement = (_ref1 = options.context) != null ? _ref1 : $.fn[wp].defaults.context;
          if (!$.
isWindow(contextElement)) {
            
contextElement = $this.closest(contextElement);
          }
          
contextElement = $(contextElement);
          
context = contexts[contextElement.data(contextKey)];
          if (!
context) {
            
context = new Context(contextElement);
          }
          return new 
Waypoint($this, context, options);
        });
        $[
wps]('refresh');
        return 
this;
      },
      
disable: function() {
        return 
methods._invoke(this, 'disable');
      },
      
enable: function() {
        return 
methods._invoke(this, 'enable');
      },
      
destroy: function() {
        return 
methods._invoke(this, 'destroy');
      },
      
prev: function(axis, selector) {
        return 
methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
          if (
index > 0) {
            return 
stack.push(waypoints[index - 1]);
          }
        });
      },
      
next: function(axis, selector) {
        return 
methods._traverse.call(this, axis, selector, function(stack, index, waypoints) {
          if (
index < waypoints.length - 1) {
            return 
stack.push(waypoints[index + 1]);
          }
        });
      },
      
_traverse: function(axis, selector, push) {
        var 
stack, waypoints;

        if (
axis == null) {
          
axis = 'vertical';
        }
        if (
selector == null) {
          
selector = window;
        }
        
waypoints = jQMethods.aggregate(selector);
        
stack = [];
        
this.each(function() {
          var 
index;

          
index = $.inArray(this, waypoints[axis]);
          return 
push(stack, index, waypoints[axis]);
        });
        return 
this.pushStack(stack);
      },
      
_invoke: function($elements, method) {
        
$elements.each(function() {
          var 
waypoints;

          
waypoints = Waypoint.getWaypointsByElement(this);
          return $.
each(waypoints, function(i, waypoint) {
            
waypoint[method]();
            return 
true;
          });
        });
        return 
this;
      }
    };
    $.
fn[wp] = function() {
      var 
args, method;

      
method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
      if (
methods[method]) {
        return 
methods[method].apply(this, args);
      } else if ($.
isFunction(method)) {
        return 
methods.init.apply(this, arguments);
      } else if ($.
isPlainObject(method)) {
        return 
methods.init.apply(this, [null, method]);
      } else if (!
method) {
        return $.
error("jQuery Waypoints needs a callback function or handler option.");
      } else {
        return $.
error("The " + method + " method does not exist in jQuery Waypoints.");
      }
    };
    $.
fn[wp].defaults = {
      
context: window,
      
continuous: true,
      
enabled: true,
      
horizontal: false,
      
offset: 0,
      
triggerOnce: false
    
};
    
jQMethods = {
      
refresh: function() {
        return $.
each(contexts, function(i, context) {
          return 
context.refresh();
        });
      },
      
viewportHeight: function() {
        var 
_ref;

        return (
_ref = window.innerHeight) != null ? _ref : $w.height();
      },
      
aggregate: function(contextSelector) {
        var 
collection, waypoints, _ref;

        
collection = allWaypoints;
        if (
contextSelector) {
          
collection = (_ref = contexts[$(contextSelector).data(contextKey)]) != null ? _ref.waypoints : void 0;
        }
        if (!
collection) {
          return [];
        }
        
waypoints = {
          
horizontal: [],
          
vertical: []
        };
        $.
each(waypoints, function(axis, arr) {
          $.
each(collection[axis], function(key, waypoint) {
            return 
arr.push(waypoint);
          });
          
arr.sort(function(a, b) {
            return 
a.offset - b.offset;
          });
          
waypoints[axis] = $.map(arr, function(waypoint) {
            return 
waypoint.element;
          });
          return 
waypoints[axis] = $.unique(waypoints[axis]);
        });
        return 
waypoints;
      },
      
above: function(contextSelector) {
        if (
contextSelector == null) {
          
contextSelector = window;
        }
        return 
jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
          return 
waypoint.offset <= context.oldScroll.y;
        });
      },
      
below: function(contextSelector) {
        if (
contextSelector == null) {
          
contextSelector = window;
        }
        return 
jQMethods._filter(contextSelector, 'vertical', function(context, waypoint) {
          return 
waypoint.offset > context.oldScroll.y;
        });
      },
      
left: function(contextSelector) {
        if (
contextSelector == null) {
          
contextSelector = window;
        }
        return 
jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
          return 
waypoint.offset <= context.oldScroll.x;
        });
      },
      
right: function(contextSelector) {
        if (
contextSelector == null) {
          
contextSelector = window;
        }
        return 
jQMethods._filter(contextSelector, 'horizontal', function(context, waypoint) {
          return 
waypoint.offset > context.oldScroll.x;
        });
      },
      
enable: function() {
        return 
jQMethods._invoke('enable');
      },
      
disable: function() {
        return 
jQMethods._invoke('disable');
      },
      
destroy: function() {
        return 
jQMethods._invoke('destroy');
      },
      
extendFn: function(methodName, f) {
        return 
methods[methodName] = f;
      },
      
_invoke: function(method) {
        var 
waypoints;

        
waypoints = $.extend({}, allWaypoints.vertical, allWaypoints.horizontal);
        return $.
each(waypoints, function(key, waypoint) {
          
waypoint[method]();
          return 
true;
        });
      },
      
_filter: function(selector, axis, test) {
        var 
context, waypoints;

        
context = contexts[$(selector).data(contextKey)];
        if (!
context) {
          return [];
        }
        
waypoints = [];
        $.
each(context.waypoints[axis], function(i, waypoint) {
          if (
test(context, waypoint)) {
            return 
waypoints.push(waypoint);
          }
        });
        
waypoints.sort(function(a, b) {
          return 
a.offset - b.offset;
        });
        return $.
map(waypoints, function(waypoint) {
          return 
waypoint.element;
        });
      }
    };
    $[
wps] = function() {
      var 
args, method;

      
method = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
      if (
jQMethods[method]) {
        return 
jQMethods[method].apply(null, args);
      } else {
        return 
jQMethods.aggregate.call(null, method);
      }
    };
    $[
wps].settings = {
      
resizeThrottle: 100,
      
scrollThrottle: 30
    
};
    return 
$w.load(function() {
      return $[
wps]('refresh');
    });
  });

}).
call(this);
?>
Онлайн: 3
Реклама