UNPKG

ionic-angular

Version:

[![Circle CI](https://circleci.com/gh/driftyco/ionic.svg?style=svg)](https://circleci.com/gh/driftyco/ionic)

132 lines (116 loc) 3.5 kB
IonicModule .controller('$ionicTabs', [ '$scope', '$element', '$ionicHistory', function($scope, $element, $ionicHistory) { var self = this; var selectedTab = null; var previousSelectedTab = null; var selectedTabIndex; var isVisible = true; self.tabs = []; self.selectedIndex = function() { return self.tabs.indexOf(selectedTab); }; self.selectedTab = function() { return selectedTab; }; self.previousSelectedTab = function() { return previousSelectedTab; }; self.add = function(tab) { $ionicHistory.registerHistory(tab); self.tabs.push(tab); }; self.remove = function(tab) { var tabIndex = self.tabs.indexOf(tab); if (tabIndex === -1) { return; } //Use a field like '$tabSelected' so developers won't accidentally set it in controllers etc if (tab.$tabSelected) { self.deselect(tab); //Try to select a new tab if we're removing a tab if (self.tabs.length === 1) { //Do nothing if there are no other tabs to select } else { //Select previous tab if it's the last tab, else select next tab var newTabIndex = tabIndex === self.tabs.length - 1 ? tabIndex - 1 : tabIndex + 1; self.select(self.tabs[newTabIndex]); } } self.tabs.splice(tabIndex, 1); }; self.deselect = function(tab) { if (tab.$tabSelected) { previousSelectedTab = selectedTab; selectedTab = selectedTabIndex = null; tab.$tabSelected = false; (tab.onDeselect || noop)(); tab.$broadcast && tab.$broadcast('$ionicHistory.deselect'); } }; self.select = function(tab, shouldEmitEvent) { var tabIndex; if (isNumber(tab)) { tabIndex = tab; if (tabIndex >= self.tabs.length) return; tab = self.tabs[tabIndex]; } else { tabIndex = self.tabs.indexOf(tab); } if (arguments.length === 1) { shouldEmitEvent = !!(tab.navViewName || tab.uiSref); } if (selectedTab && selectedTab.$historyId == tab.$historyId) { if (shouldEmitEvent) { $ionicHistory.goToHistoryRoot(tab.$historyId); } } else if (selectedTabIndex !== tabIndex) { forEach(self.tabs, function(tab) { self.deselect(tab); }); selectedTab = tab; selectedTabIndex = tabIndex; if (self.$scope && self.$scope.$parent) { self.$scope.$parent.$activeHistoryId = tab.$historyId; } //Use a funny name like $tabSelected so the developer doesn't overwrite the var in a child scope tab.$tabSelected = true; (tab.onSelect || noop)(); if (shouldEmitEvent) { $scope.$emit('$ionicHistory.change', { type: 'tab', tabIndex: tabIndex, historyId: tab.$historyId, navViewName: tab.navViewName, hasNavView: !!tab.navViewName, title: tab.title, url: tab.href, uiSref: tab.uiSref }); } $scope.$broadcast("tabSelected", { selectedTab: tab, selectedTabIndex: tabIndex}); } }; self.hasActiveScope = function() { for (var x = 0; x < self.tabs.length; x++) { if ($ionicHistory.isActiveScope(self.tabs[x])) { return true; } } return false; }; self.showBar = function(show) { if (arguments.length) { if (show) { $element.removeClass('tabs-item-hide'); } else { $element.addClass('tabs-item-hide'); } isVisible = !!show; } return isVisible; }; }]);