From 3efb33dbd20ac5cdcde130e27f9e213cc159bca0 Mon Sep 17 00:00:00 2001 From: Max Lynch Date: Thu, 17 Dec 2015 09:54:06 -0600 Subject: [PATCH] fix(refresher): PTR doesn't break after scrolling. Fixes #4753 --- js/angular/controller/refresherController.js | 7 +++++-- .../angular/controller/refreshController.unit.js | 13 ++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/js/angular/controller/refresherController.js b/js/angular/controller/refresherController.js index f6f07f9a078..5516c5e2ff4 100644 --- a/js/angular/controller/refresherController.js +++ b/js/angular/controller/refresherController.js @@ -49,12 +49,12 @@ IonicModule } function handleTouchend() { + // reset Y + startY = null; // if this wasn't an overscroll, get out immediately if (!canOverscroll && !isDragging) { return; } - // reset Y - startY = null; // the user has overscrolled but went back to native scrolling if (!isDragging) { dragOffset = 0; @@ -104,6 +104,8 @@ IonicModule // if we've dragged up and back down in to native scroll territory if (deltaY - dragOffset <= 0 || scrollParent.scrollTop !== 0) { + console.log('NOT PULLING', deltaY, dragOffset, scrollParent.scrollTop); + if (isOverscrolling) { isOverscrolling = false; setScrollLock(false); @@ -120,6 +122,7 @@ IonicModule return; } else if (deltaY > 0 && scrollParent.scrollTop === 0 && !isOverscrolling) { + console.log('PULLING', deltaY, dragOffset, scrollParent.scrollTop, isOverscrolling); // starting overscroll, but drag started below scrollTop 0, so we need to offset the position dragOffset = deltaY; } diff --git a/test/unit/angular/controller/refreshController.unit.js b/test/unit/angular/controller/refreshController.unit.js index e8639bd1e32..5be014fabbd 100644 --- a/test/unit/angular/controller/refreshController.unit.js +++ b/test/unit/angular/controller/refreshController.unit.js @@ -43,13 +43,17 @@ describe('$ionicRefresh Controller', function() { }).toThrow(); }); - it('should oversroll using CSS transforms', function() { + it('should overscroll using CSS transforms', function() { setup(); + function getTy(el) { + return parseInt(el.style[ionic.CSS.TRANSFORM].replace('translateY(', '')); + } + ctrl.__handleTouchmove(evt(0)); ctrl.__handleTouchmove(evt(10)); ctrl.__handleTouchmove(evt(20)); - expect(ctrl.__getScrollChild().style[ionic.CSS.TRANSFORM]).toBe('translateY(3px)'); + expect(getTy(ctrl.__getScrollChild())).toBe(3); expect(ctrl.__getScrollChild().classList.contains('overscroll')).toBe(true); expect(refresher.classList.contains('invisible')).toBe(false); }); @@ -70,6 +74,9 @@ describe('$ionicRefresh Controller', function() { }); it('should activate and deactivate when dragging past activation threshold', function() { + function getTy(el) { + return parseInt(el.style[ionic.CSS.TRANSFORM].replace('translateY(', '')); + } setup(); var domMethods = ctrl.getRefresherDomMethods(); spyOn(domMethods, 'activate'); @@ -78,7 +85,7 @@ describe('$ionicRefresh Controller', function() { ctrl.__handleTouchmove(evt(0)); ctrl.__handleTouchmove(evt(10)); ctrl.__handleTouchmove(evt(300)); - expect(ctrl.__getScrollChild().style[ionic.CSS.TRANSFORM]).toBe('translateY(96px)'); + expect(getTy(ctrl.__getScrollChild())).toBe(96); expect(ctrl.__getScrollChild().classList.contains('overscroll')).toBe(true); expect(refresher.classList.contains('invisible')).toBe(false); expect(refresher.classList.contains('active')).toBe(true);