fix(viewSwitcher): do not finish transition from bubbled transitionend events

Closes #3006. Closes #3063.
This commit is contained in:
Andrew
2015-02-09 11:50:28 -07:00
parent 83cc181800
commit 6fa75b7fff
4 changed files with 73 additions and 5 deletions

View File

@@ -225,4 +225,58 @@ describe('Ionic View Switcher', function() {
expect(switcher.enteringEle().data('$accessed')).toBeDefined();
}));
it('should end the transition on transitionend', inject(function($ionicViewSwitcher, $rootScope, $ionicConfig, $compile) {
$ionicConfig.views.transition('test');
$ionicConfig.transitions.views.test = function() {
return { run: angular.noop, shouldAnimate: true };
};
var afterEnterSpy = jasmine.createSpy('afterEnter');
var navViewCtrl = setup();
var enteringEle = $compile('<enter>')($rootScope);
navViewCtrl.element.append(enteringEle);
enteringEle.data('$eleId', 'foo');
var switcher = $ionicViewSwitcher.create(navViewCtrl, {}, {
viewId: 'foo'
});
switcher.loadViewElements({});
$rootScope.$on('$ionicView.afterEnter', afterEnterSpy);
switcher.transition('forward');
expect(afterEnterSpy).not.toHaveBeenCalled();
enteringEle.triggerHandler('transitionend');
expect(afterEnterSpy).toHaveBeenCalled();
}));
it('should not end the transition on bubbled transitionend', inject(function($ionicViewSwitcher, $rootScope, $ionicConfig, $compile) {
$ionicConfig.views.transition('test');
$ionicConfig.transitions.views.test = function() {
return { run: angular.noop, shouldAnimate: true };
};
var afterEnterSpy = jasmine.createSpy('afterEnter');
var navViewCtrl = setup();
var enteringEle = $compile('<enter>')($rootScope);
navViewCtrl.element.append(enteringEle);
var enteringEleChild = angular.element('<child>');
enteringEle.append(enteringEleChild);
enteringEle.data('$eleId', 'foo');
var switcher = $ionicViewSwitcher.create(navViewCtrl, {}, {
viewId: 'foo'
});
switcher.loadViewElements({});
$rootScope.$on('$ionicView.afterEnter', afterEnterSpy);
switcher.transition('forward');
expect(afterEnterSpy).not.toHaveBeenCalled();
enteringEle.triggerHandler({
type: 'transitionend',
target: enteringEleChild[0]
});
expect(afterEnterSpy).not.toHaveBeenCalled();
}));
});