From 2de0cf26a4e7fc985b6247039537311a7e7861c1 Mon Sep 17 00:00:00 2001 From: Robert Messerle Date: Wed, 1 Apr 2015 11:26:56 -0700 Subject: [PATCH] feat(tabs): adds support for `md-center-tabs` Closes #1992 --- src/components/tabs/js/tabsController.js | 9 ++++++++- src/components/tabs/js/tabsDirective.js | 3 +++ src/components/tabs/tabs.scss | 8 ++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/components/tabs/js/tabsController.js b/src/components/tabs/js/tabsController.js index ae2299de616..bf709dc3bf9 100644 --- a/src/components/tabs/js/tabsController.js +++ b/src/components/tabs/js/tabsController.js @@ -23,6 +23,7 @@ ctrl.attachRipple = attachRipple; ctrl.shouldStretchTabs = shouldStretchTabs; ctrl.shouldPaginate = shouldPaginate; + ctrl.shouldCenterTabs = shouldCenterTabs; ctrl.insertTab = insertTab; ctrl.removeTab = removeTab; ctrl.select = select; @@ -97,7 +98,8 @@ } function handleOffsetChange (left) { - angular.element(elements.paging).css('left', '-' + left + 'px'); + var newValue = shouldCenterTabs() ? '' : '-' + left + 'px'; + angular.element(elements.paging).css('left', newValue); $scope.$broadcast('$mdTabsPaginationChanged'); } @@ -113,6 +115,7 @@ } function adjustOffset () { + if (shouldCenterTabs()) return; var tab = elements.tabs[ctrl.focusIndex], left = tab.offsetLeft, right = tab.offsetWidth + left; @@ -249,6 +252,10 @@ } } + function shouldCenterTabs () { + return $scope.centerTabs && !shouldPaginate(); + } + function shouldPaginate () { var canvasWidth = $element.prop('clientWidth'); angular.forEach(elements.tabs, function (tab) { canvasWidth -= tab.offsetWidth; }); diff --git a/src/components/tabs/js/tabsDirective.js b/src/components/tabs/js/tabsDirective.js index 4fa8e941ab5..dae2587231f 100644 --- a/src/components/tabs/js/tabsDirective.js +++ b/src/components/tabs/js/tabsDirective.js @@ -57,6 +57,7 @@ * @param {string=} md-align-tabs Attribute to indicate position of tab buttons: `bottom` or `top`; default is `top` * @param {string=} md-stretch-tabs Attribute to indicate whether or not to stretch tabs: `auto`, `always`, or `never`; default is `auto` * @param {boolean=} md-dynamic-height When enabled, the tab wrapper will resize based on the contents of the selected tab + * @param {boolean=} md-center-tabs When enabled, tabs will be centered provided there is no need for pagination * * @usage * @@ -91,6 +92,7 @@ return { scope: { dynamicHeight: '=?mdDynamicHeight', + centerTabs: '=?mdCenterTabs', selectedIndex: '=?mdSelected', stretchTabs: '@?mdStretchTabs' }, @@ -126,6 +128,7 @@ ng-keydown="$mdTabsCtrl.keydown($event)"\ role="tablist">\ \