summary refs log tree commit diff
path: root/syweb/webclient/js/ng-infinite-scroll-matrix.js
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2014-11-07 10:55:28 +0000
committerErik Johnston <erik@matrix.org>2014-11-07 10:55:28 +0000
commit3cb678f84cb3252f08788a31bef1a205edffde9c (patch)
tree01ad785dc284526ecd4aa1a04ce132bcf639f5ac /syweb/webclient/js/ng-infinite-scroll-matrix.js
parentFix joining over federation (diff)
parentDon't cache isWebRTCSupported because whether webRTC is supported might chang... (diff)
downloadsynapse-3cb678f84cb3252f08788a31bef1a205edffde9c.tar.xz
Merge branch 'develop' of github.com:matrix-org/synapse into federation_authorization
Diffstat (limited to 'syweb/webclient/js/ng-infinite-scroll-matrix.js')
-rw-r--r--syweb/webclient/js/ng-infinite-scroll-matrix.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/syweb/webclient/js/ng-infinite-scroll-matrix.js b/syweb/webclient/js/ng-infinite-scroll-matrix.js
new file mode 100644
index 0000000000..045ec8d93e
--- /dev/null
+++ b/syweb/webclient/js/ng-infinite-scroll-matrix.js
@@ -0,0 +1,63 @@
+/* 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);
+      }
+    };
+  }
+]);