diff --git a/dist/js/ionic-angular.js b/dist/js/ionic-angular.js index 3c109feac1..005c6e669e 100644 --- a/dist/js/ionic-angular.js +++ b/dist/js/ionic-angular.js @@ -2615,15 +2615,12 @@ angular.module('ionic.ui.viewState', ['ionic.service.view', 'ionic.service.gestu return function link($scope, $element, $attr) { // Should we hide a back button when this tab is shown $scope.hideBackButton = $scope.$eval($scope.hideBackButton); + if($scope.hideBackButton) { + $rootScope.$broadcast('viewState.showBackButton', false); + } $scope.hideNavBar = $scope.$eval($scope.hideNavBar); - if($scope.hideBackButton === true) { - $scope.$emit('viewState.hideBackButton'); - } else { - $scope.$emit('viewState.showBackButton'); - } - // watch for changes in the left buttons $scope.$watch('leftButtons', function(value) { $scope.$emit('viewState.leftButtonsChanged', $scope.leftButtons); @@ -2653,14 +2650,22 @@ angular.module('ionic.ui.viewState', ['ionic.service.view', 'ionic.service.gestu tElement.addClass('hide'); return function link($scope, $element) { - $element.bind('click', goBack); + $element.bind('tap', goBack); - $rootScope.$on('$viewHistory.historyChange', function(e, data) { - if(data.showBack) { + $scope.showButton = function(val) { + if(val) { $element[0].classList.remove('hide'); } else { $element[0].classList.add('hide'); } + }; + + $rootScope.$on('$viewHistory.historyChange', function(e, data) { + $scope.showButton(data.showBack); + }); + + $rootScope.$on('viewState.showBackButton', function(e, data) { + $scope.showButton(data); }); }; diff --git a/js/ext/angular/src/directive/ionicViewState.js b/js/ext/angular/src/directive/ionicViewState.js index 15bca454b0..a5551323f4 100644 --- a/js/ext/angular/src/directive/ionicViewState.js +++ b/js/ext/angular/src/directive/ionicViewState.js @@ -174,15 +174,12 @@ angular.module('ionic.ui.viewState', ['ionic.service.view', 'ionic.service.gestu return function link($scope, $element, $attr) { // Should we hide a back button when this tab is shown $scope.hideBackButton = $scope.$eval($scope.hideBackButton); + if($scope.hideBackButton) { + $rootScope.$broadcast('viewState.showBackButton', false); + } $scope.hideNavBar = $scope.$eval($scope.hideNavBar); - if($scope.hideBackButton === true) { - $scope.$emit('viewState.hideBackButton'); - } else { - $scope.$emit('viewState.showBackButton'); - } - // watch for changes in the left buttons $scope.$watch('leftButtons', function(value) { $scope.$emit('viewState.leftButtonsChanged', $scope.leftButtons); @@ -212,14 +209,22 @@ angular.module('ionic.ui.viewState', ['ionic.service.view', 'ionic.service.gestu tElement.addClass('hide'); return function link($scope, $element) { - $element.bind('click', goBack); + $element.bind('tap', goBack); - $rootScope.$on('$viewHistory.historyChange', function(e, data) { - if(data.showBack) { + $scope.showButton = function(val) { + if(val) { $element[0].classList.remove('hide'); } else { $element[0].classList.add('hide'); } + }; + + $rootScope.$on('$viewHistory.historyChange', function(e, data) { + $scope.showButton(data.showBack); + }); + + $rootScope.$on('viewState.showBackButton', function(e, data) { + $scope.showButton(data); }); }; diff --git a/js/ext/angular/test/directive/ionicView.unit.js b/js/ext/angular/test/directive/ionicView.unit.js new file mode 100644 index 0000000000..702b3ce47a --- /dev/null +++ b/js/ext/angular/test/directive/ionicView.unit.js @@ -0,0 +1,48 @@ +'use strict'; + +describe('Ionic View', function() { + var compile, scope, listElement, listCtrl; + + beforeEach(module('ionic.ui.viewState')); + + beforeEach(inject(function($compile, $rootScope, $controller) { + compile = $compile; + scope = $rootScope; + })); + + it('should init a view', function() { + var element = compile('me view')(scope); + expect(element.html()).toEqual('me view'); + }); + + it('should add pane classname and remove title from view', function() { + var element = compile('')(scope); + expect(element.attr('title')).toBeUndefined(); + expect(element.hasClass('pane')).toEqual(true); + }); + + it('should set hide back button', function() { + spyOn(scope, '$broadcast'); + + var element = compile('')(scope); + var viewScope = element.isolateScope(); + expect(viewScope.hideBackButton).toBeUndefined(); + expect(scope.$broadcast).not.toHaveBeenCalledWith('viewState.showBackButton', false); + + element = compile('')(scope); + viewScope = element.isolateScope(); + expect(viewScope.hideBackButton).toEqual(true); + expect(scope.$broadcast).toHaveBeenCalledWith('viewState.showBackButton', false); + }); + + it('should show/hide viewBack', function() { + var element = compile('')(scope); + expect(element.hasClass('hide')).toEqual(true); + scope.$broadcast('viewState.showBackButton', true); + expect(element.hasClass('hide')).toEqual(false); + scope.$broadcast('$viewHistory.historyChange', { showBack: false }); + expect(element.hasClass('hide')).toEqual(true); + }); + +}); + diff --git a/js/ext/angular/test/viewState.html b/js/ext/angular/test/viewState.html index a1c2b06a0e..5cfcfd261a 100644 --- a/js/ext/angular/test/viewState.html +++ b/js/ext/angular/test/viewState.html @@ -80,8 +80,9 @@