src/components/tabs/js/tabsController.js
function updateInkBarStyles (previousTotalWidth, previousWidthOfTabItems) {
    if (ctrl.noInkBar) {
      return;
    }
    var elements = getElements();

    if (!elements.tabs[ ctrl.selectedIndex ]) {
      angular.element(elements.inkBar).css({ left: 'auto', right: 'auto' });
      return;
    }

    if (!ctrl.tabs.length) {
      queue.push(ctrl.updateInkBarStyles);
      return;
    }
    // If the element is not visible, we will not be able to calculate sizes until it becomes
    // visible. We should treat that as a resize event rather than just updating the ink bar.
    if (!$element.prop('offsetParent')) {
      handleResizeWhenVisible();
      return;
    }

    var index      = ctrl.selectedIndex,
        totalWidth = elements.paging.offsetWidth,
        tab        = elements.tabs[ index ],
        left       = tab.offsetLeft,
        right      = totalWidth - left - tab.offsetWidth;

    if (ctrl.shouldCenterTabs) {
      // We need to use the same calculate process as in the pagination wrapper, to avoid rounding
      // deviations.
      var totalWidthOfTabItems = calcTabsWidth(elements.tabs);

      if (totalWidth > totalWidthOfTabItems &&
          previousTotalWidth !== totalWidth &&
          previousWidthOfTabItems !== totalWidthOfTabItems) {
        $timeout(updateInkBarStyles, 0, true, totalWidth, totalWidthOfTabItems);
      }
    }
    updateInkBarClassName();
    angular.element(elements.inkBar).css({ left: left + 'px', right: right + 'px' });
  }
function updateInkBarStyles (previousTotalWidth, previousWidthOfTabItems) {
    if (ctrl.noInkBar) {
      return;
    }
    var elements = getElements();

    if (!elements.tabs[ ctrl.selectedIndex ]) {
      angular.element(elements.inkBar).css({ left: 'auto', right: 'auto' });
      return;
    }

    if (!ctrl.tabs.length) {
      queue.push(ctrl.updateInkBarStyles);
      return;
    }
    // If the element is not visible, we will not be able to calculate sizes until it becomes
    // visible. We should treat that as a resize event rather than just updating the ink bar.
    if (!$element.prop('offsetParent')) {
      handleResizeWhenVisible();
      return;
    }

    var index      = ctrl.selectedIndex,
        totalWidth = elements.paging.offsetWidth,
        tab        = elements.tabs[ index ],
        left       = tab.offsetLeft,
        right      = totalWidth - left - tab.offsetWidth;

    if (ctrl.shouldCenterTabs) {
      // We need to use the same calculate process as in the pagination wrapper, to avoid rounding
      // deviations.
      var totalWidthOfTabItems = calcTabsWidth(elements.tabs);

      if (totalWidth > totalWidthOfTabItems &&
          previousTotalWidth !== totalWidth &&
          previousWidthOfTabItems !== totalWidthOfTabItems) {
        $timeout(updateInkBarStyles, 0, true, totalWidth, totalWidthOfTabItems);
      }
    }
    updateInkBarClassName();
    angular.element(elements.inkBar).css({ left: left + 'px', right: right + 'px' });
  }
function updateInkBarStyles ( previousTotalWidth , previousWidthOfTabItems ) { if ( ctrl . noInkBar ) { return ; } var elements = getElements ( ) ; if ( ! elements . tabs [ ctrl . selectedIndex ] ) { angular . element ( elements . inkBar ) . css ( { left : 'auto' , right : 'auto' } ) ; return ; } if ( ! ctrl . tabs . length ) { queue . push ( ctrl . updateInkBarStyles ) ; return ; } // If the element is not visible, we will not be able to calculate sizes until it becomes // visible. We should treat that as a resize event rather than just updating the ink bar. if ( ! $element . prop ( 'offsetParent' ) ) { handleResizeWhenVisible ( ) ; return ; } var index = ctrl . selectedIndex , totalWidth = elements . paging . offsetWidth , tab = elements . tabs [ index ] , left = tab . offsetLeft , right = totalWidth - left - tab . offsetWidth ; if ( ctrl . shouldCenterTabs ) { // We need to use the same calculate process as in the pagination wrapper, to avoid rounding // deviations. var totalWidthOfTabItems = calcTabsWidth ( elements . tabs ) ; if ( totalWidth > totalWidthOfTabItems && previousTotalWidth !== totalWidth && previousWidthOfTabItems !== totalWidthOfTabItems ) { $timeout ( updateInkBarStyles , 0 , true , totalWidth , totalWidthOfTabItems ) ; } } updateInkBarClassName ( ) ; angular . element ( elements . inkBar ) . css ( { left : left + 'px' , right : right + 'px' } ) ; }
Repositions the ink bar to the selected tab.
Parameters are used when calling itself recursively when md-center-tabs is used as we need to
run two passes to properly center the tabs. These parameters ensure that we only run two passes
and that we don't run indefinitely.
@param {number=} previousTotalWidth previous width of pagination wrapper
@param {number=} previousWidthOfTabItems previous width of all tab items
Repositions the ink bar to the selected tab . Parameters are used when calling itself recursively when md - center - tabs is used as we need to run two passes to properly center the tabs . These parameters ensure that we only run two passes and that we don t run indefinitely .