From c41e5371e73f277b2ff808716e9cc84c4a61caf9 Mon Sep 17 00:00:00 2001 From: Andy Joslin Date: Fri, 7 Feb 2014 12:07:41 -0500 Subject: [PATCH] refactor(scroll): make refresher be detected after timeout --- .../src/controller/ionicScrollController.js | 17 ++++++++++------- .../controller/ionicScrollController.unit.js | 15 ++++++++++++--- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/js/ext/angular/src/controller/ionicScrollController.js b/js/ext/angular/src/controller/ionicScrollController.js index 59aa59c481..928e334cf4 100644 --- a/js/ext/angular/src/controller/ionicScrollController.js +++ b/js/ext/angular/src/controller/ionicScrollController.js @@ -10,8 +10,9 @@ angular.module('ionic.ui.scroll') scrollViewOptions.bouncing : !ionic.Platform.isAndroid(); + var self = this; + var element = this.element = scrollViewOptions.el; - var refresher = this.refresher = element.querySelector('.scroll-refresher'); var scrollView = this.scrollView = new ionic.views.Scroll(scrollViewOptions); this.$element = angular.element(element); @@ -23,16 +24,18 @@ angular.module('ionic.ui.scroll') $timeout(function() { scrollView.run(); + self.refresher = element.querySelector('.scroll-refresher'); + // Activate pull-to-refresh - if(refresher) { - var refresherHeight = refresher.clientHeight || 0; + if(self.refresher) { + var refresherHeight = self.refresher.clientHeight || 0; scrollView.activatePullToRefresh(refresherHeight, function() { - refresher.classList.add('active'); + self.refresher.classList.add('active'); }, function() { - refresher.classList.remove('refreshing'); - refresher.classList.remove('active'); + self.refresher.classList.remove('refreshing'); + self.refresher.classList.remove('active'); }, function() { - refresher.classList.add('refreshing'); + self.refresher.classList.add('refreshing'); $scope.onRefresh && $scope.onRefresh(); $scope.$parent.$broadcast('scroll.onRefresh'); }); diff --git a/js/ext/angular/test/controller/ionicScrollController.unit.js b/js/ext/angular/test/controller/ionicScrollController.unit.js index 67d42c0bbd..c8c93d030b 100644 --- a/js/ext/angular/test/controller/ionicScrollController.unit.js +++ b/js/ext/angular/test/controller/ionicScrollController.unit.js @@ -43,12 +43,21 @@ describe('$ionicScroll Controller', function() { it('should not setup if no child .scroll-refresher', function() { setup(); + timeout.flush(); expect(ctrl.refresher).toBeFalsy(); spyOn(ctrl.scrollView, 'activatePullToRefresh'); - timeout.flush(); expect(ctrl.scrollView.activatePullToRefresh).not.toHaveBeenCalled(); }); + it('should not setup ctrl.refresher until after timeout', function() { + setup({ + el: angular.element('
')[0] + }); + expect(ctrl.refresher).toBeUndefined(); + timeout.flush(); + expect(ctrl.refresher).toBe(ctrl.element.children[0]); + }); + it('should work with .scroll-refresher child and proper refresher', function() { var startCb, refreshingCb, doneCb, refresherEl; setup({ @@ -59,12 +68,12 @@ describe('$ionicScroll Controller', function() { refreshingCb = refreshing; doneCb = done; }); - + scope.onRefresh = jasmine.createSpy('onRefresh'); scope.$parent.$broadcast = jasmine.createSpy('$broadcast'); - var refresher = ctrl.refresher; timeout.flush(); + var refresher = ctrl.refresher; expect(refresher.classList.contains('active')).toBe(false); expect(refresher.classList.contains('refreshing')).toBe(false);