64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
/* ng-infinite-scroll - v1.0.0 - 2013-02-23 
 | 
						|
  Matrix: Modified to support scrolling UP to get infinite loading and to listen
 | 
						|
  to scroll events on the PARENT element, not the window.
 | 
						|
*/
 | 
						|
var mod;
 | 
						|
 | 
						|
mod = angular.module('infinite-scroll', []);
 | 
						|
 | 
						|
mod.directive('infiniteScroll', [
 | 
						|
  '$rootScope', '$window', '$timeout', function($rootScope, $window, $timeout) {
 | 
						|
    return {
 | 
						|
      link: function(scope, elem, attrs) {
 | 
						|
        var checkWhenEnabled, handler, scrollDistance, scrollEnabled;
 | 
						|
        $window = angular.element($window);
 | 
						|
        scrollDistance = 0;
 | 
						|
        if (attrs.infiniteScrollDistance != null) {
 | 
						|
          scope.$watch(attrs.infiniteScrollDistance, function(value) {
 | 
						|
            return scrollDistance = parseInt(value, 10);
 | 
						|
          });
 | 
						|
        }
 | 
						|
        scrollEnabled = true;
 | 
						|
        checkWhenEnabled = false;
 | 
						|
        if (attrs.infiniteScrollDisabled != null) {
 | 
						|
          scope.$watch(attrs.infiniteScrollDisabled, function(value) {
 | 
						|
            scrollEnabled = !value;
 | 
						|
            if (scrollEnabled && checkWhenEnabled) {
 | 
						|
              checkWhenEnabled = false;
 | 
						|
              return handler();
 | 
						|
            }
 | 
						|
          });
 | 
						|
        }
 | 
						|
        handler = function() {
 | 
						|
          var elementTop, remaining, shouldScroll, windowTop;
 | 
						|
          windowTop = 0;
 | 
						|
          elementTop = elem.offset().top;
 | 
						|
          shouldScroll = elementTop >= 0; // top of list is at the top of the window or further down the page
 | 
						|
          if (shouldScroll && scrollEnabled) {
 | 
						|
            if ($rootScope.$$phase) {
 | 
						|
              return scope.$eval(attrs.infiniteScroll);
 | 
						|
            } else {
 | 
						|
              return scope.$apply(attrs.infiniteScroll);
 | 
						|
            }
 | 
						|
          } else if (shouldScroll) {
 | 
						|
            return checkWhenEnabled = true;
 | 
						|
          }
 | 
						|
        };
 | 
						|
        elem.parent().on('scroll', handler);
 | 
						|
        scope.$on('$destroy', function() {
 | 
						|
          return elem.parent().off('scroll', handler);
 | 
						|
        });
 | 
						|
        return $timeout((function() {
 | 
						|
          if (attrs.infiniteScrollImmediateCheck) {
 | 
						|
            if (scope.$eval(attrs.infiniteScrollImmediateCheck)) {
 | 
						|
              return handler();
 | 
						|
            }
 | 
						|
          } else {
 | 
						|
            return handler();
 | 
						|
          }
 | 
						|
        }), 0);
 | 
						|
      }
 | 
						|
    };
 | 
						|
  }
 | 
						|
]);
 |