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);
 | |
|       }
 | |
|     };
 | |
|   }
 | |
| ]);
 |