mirror of
https://github.com/inverse-inc/sogo.git
synced 2026-03-17 20:45:56 +00:00
58 lines
1.6 KiB
JavaScript
58 lines
1.6 KiB
JavaScript
(function() {
|
|
'use strict';
|
|
|
|
/**
|
|
* Conditionally configure ink bar animations when the
|
|
* tab selection changes. If `mdNoBar` then do not show the
|
|
* bar nor animate.
|
|
*/
|
|
angular.module('material.components.tabs')
|
|
.directive('mdTabsInkBar', MdTabInkDirective);
|
|
|
|
function MdTabInkDirective($$rAF) {
|
|
|
|
var lastIndex = 0;
|
|
|
|
return {
|
|
restrict: 'E',
|
|
require: ['^?mdNoBar', '^mdTabs'],
|
|
link: postLink
|
|
};
|
|
|
|
function postLink(scope, element, attr, ctrls) {
|
|
if (ctrls[0]) return;
|
|
|
|
var tabsCtrl = ctrls[1],
|
|
debouncedUpdateBar = $$rAF.debounce(updateBar);
|
|
|
|
tabsCtrl.inkBarElement = element;
|
|
|
|
scope.$on('$mdTabsPaginationChanged', debouncedUpdateBar);
|
|
|
|
function updateBar() {
|
|
var selected = tabsCtrl.getSelectedItem();
|
|
var hideInkBar = !selected || tabsCtrl.count() < 2;
|
|
|
|
element.css('display', hideInkBar ? 'none' : 'block');
|
|
|
|
if (hideInkBar) return;
|
|
|
|
if (scope.pagination && scope.pagination.tabData) {
|
|
var index = tabsCtrl.getSelectedIndex();
|
|
var data = scope.pagination.tabData.tabs[index] || { left: 0, right: 0, width: 0 };
|
|
var right = element.parent().prop('offsetWidth') - data.right;
|
|
var classNames = ['md-transition-left', 'md-transition-right', 'md-no-transition'];
|
|
var classIndex = lastIndex > index ? 0 : lastIndex < index ? 1 : 2;
|
|
|
|
element
|
|
.removeClass(classNames.join(' '))
|
|
.addClass(classNames[classIndex])
|
|
.css({ left: (data.left + 1) + 'px', right: right + 'px' });
|
|
|
|
lastIndex = index;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
})();
|