From b406305b19dd8a2d8eff6820a2a4ca64eb1cf9d5 Mon Sep 17 00:00:00 2001 From: Andy Joslin Date: Tue, 25 Feb 2014 11:18:25 -0500 Subject: [PATCH] refactor(ionicContent): use $-prefix for onRefresh and onScroll events Closes #675 --- .../angular/src/controller/ionicScrollController.js | 3 ++- js/ext/angular/src/directive/ionicContent.js | 11 ++++++----- .../src/service/delegates/ionicScrollDelegate.js | 5 +---- .../test/controller/ionicScrollController.unit.js | 8 +++++--- .../service/delegates/ionicScrollDelegate.unit.js | 4 ++-- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/js/ext/angular/src/controller/ionicScrollController.js b/js/ext/angular/src/controller/ionicScrollController.js index 7f3d0d5db2..7e42078da5 100644 --- a/js/ext/angular/src/controller/ionicScrollController.js +++ b/js/ext/angular/src/controller/ionicScrollController.js @@ -43,12 +43,13 @@ angular.module('ionic.ui.scroll') var refresherHeight = self.refresher.clientHeight || 0; scrollView.activatePullToRefresh(refresherHeight, function() { self.refresher.classList.add('active'); + $scope.$onRefreshOpening && $scope.$onRefreshOpening(); }, function() { self.refresher.classList.remove('refreshing'); self.refresher.classList.remove('active'); }, function() { self.refresher.classList.add('refreshing'); - $scope.onRefresh && $scope.onRefresh(); + $scope.$onRefresh && $scope.$onRefresh(); $scope.$parent.$broadcast('scroll.onRefresh'); }); } diff --git a/js/ext/angular/src/directive/ionicContent.js b/js/ext/angular/src/directive/ionicContent.js index 7ae643e6f0..fd1c6b6b1d 100644 --- a/js/ext/angular/src/directive/ionicContent.js +++ b/js/ext/angular/src/directive/ionicContent.js @@ -57,10 +57,11 @@ function($parse, $timeout, $ionicScrollDelegate, $controller, $ionicBind) { }); $ionicBind($scope, $attr, { - onRefresh: '&', - onRefreshOpening: '&', - onScroll: '&', - onScrollComplete: '&', + //Use $ to stop onRefresh from recursively calling itself + $onRefresh: '&onRefresh', + $onRefreshOpening: '&onRefreshOpening', + $onScroll: '&onScroll', + $onScrollComplete: '&onScrollComplete', refreshComplete: '=', onInfiniteScroll: '&', infiniteScrollDistance: '@', @@ -99,7 +100,7 @@ function($parse, $timeout, $ionicScrollDelegate, $controller, $ionicBind) { scrollingY: $scope.$eval($scope.hasScrollY) !== false, scrollEventInterval: parseInt($scope.scrollEventInterval, 10) || 20, scrollingComplete: function() { - $scope.onScrollComplete({ + $scope.$onScrollComplete({ scrollTop: this.__scrollTop, scrollLeft: this.__scrollLeft }); diff --git a/js/ext/angular/src/service/delegates/ionicScrollDelegate.js b/js/ext/angular/src/service/delegates/ionicScrollDelegate.js index 445d38ab44..82222bd93e 100644 --- a/js/ext/angular/src/service/delegates/ionicScrollDelegate.js +++ b/js/ext/angular/src/service/delegates/ionicScrollDelegate.js @@ -74,12 +74,9 @@ angular.module('ionic.ui.service.scrollDelegate', []) } $element.on('scroll', function(e) { - if ( !$scope.onScroll ) { - return; - } var detail = (e.originalEvent || e).detail || {}; - $scope.onScroll && $scope.onScroll({ + $scope.$onScroll && $scope.$onScroll({ event: e, scrollTop: detail.scrollTop || 0, scrollLeft: detail.scrollLeft || 0 diff --git a/js/ext/angular/test/controller/ionicScrollController.unit.js b/js/ext/angular/test/controller/ionicScrollController.unit.js index eee232bddc..e6106e8129 100644 --- a/js/ext/angular/test/controller/ionicScrollController.unit.js +++ b/js/ext/angular/test/controller/ionicScrollController.unit.js @@ -97,7 +97,8 @@ describe('$ionicScroll Controller', function() { doneCb = done; }); - scope.onRefresh = jasmine.createSpy('onRefresh'); + scope.$onRefresh = jasmine.createSpy('onRefresh'); + scope.$onRefreshOpening = jasmine.createSpy('onRefreshOpening'); timeout.flush(); var refresher = ctrl.refresher; @@ -108,17 +109,18 @@ describe('$ionicScroll Controller', function() { startCb(); expect(refresher.classList.contains('active')).toBe(true); expect(refresher.classList.contains('refreshing')).toBe(false); + expect(scope.$onRefreshOpening).toHaveBeenCalled(); refreshingCb(); expect(refresher.classList.contains('active')).toBe(false); expect(refresher.classList.contains('refreshing')).toBe(false); - expect(scope.onRefresh).not.toHaveBeenCalled(); + expect(scope.$onRefresh).not.toHaveBeenCalled(); doneCb(); expect(refresher.classList.contains('active')).toBe(false); expect(refresher.classList.contains('refreshing')).toBe(true); - expect(scope.onRefresh).toHaveBeenCalled(); + expect(scope.$onRefresh).toHaveBeenCalled(); }); }); diff --git a/js/ext/angular/test/service/delegates/ionicScrollDelegate.unit.js b/js/ext/angular/test/service/delegates/ionicScrollDelegate.unit.js index 08256d7553..0a57aa0104 100644 --- a/js/ext/angular/test/service/delegates/ionicScrollDelegate.unit.js +++ b/js/ext/angular/test/service/delegates/ionicScrollDelegate.unit.js @@ -37,12 +37,12 @@ describe('Ionic ScrollDelegate Service', function() { scope = el.scope(); scope.$apply(); var top, left; - scope.onScroll = jasmine.createSpy('scroll').andCallFake(function(data) { + scope.$onScroll = jasmine.createSpy('scroll').andCallFake(function(data) { top = data.scrollTop; left = data.scrollLeft; }); ionic.trigger('scroll', {target: el[0]}); - expect(scope.onScroll).toHaveBeenCalled(); + expect(scope.$onScroll).toHaveBeenCalled(); expect(top).toBe(0); expect(left).toBe(0);