Files
ERP/sophal/js/widget/widget.navtabs.js

86 lines
2.2 KiB
JavaScript

/*
* Axelor Business Solutions
*
* Copyright (C) 2005-2019 Axelor (<http://axelor.com>).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
(function() {
"use strict";
var ui = angular.module('axelor.ui');
ui.directive('uiNavTabs', function() {
return {
restrict: 'EA',
replace: true,
link: function(scope, elem, attrs) {
if (scope.singleTabOnly) {
return elem.parent().addClass("view-tabs-single");
}
scope.$watch('tabs.length', function navTabsWatch(value, oldValue){
if (value != oldValue) elem.trigger('adjust:tabs');
});
var menu = $();
setTimeout(function () {
elem.bsTabs();
elem.on('contextmenu', '.nav-tabs-main > li > a', showMenu);
menu = elem.find('#nav-tabs-menu');
menu.css({
position: 'absolute',
zIndex: 1000
}).hide();
});
function showMenu(e) {
var tabElem = $(e.target).parents('li:first');
var tabScope = tabElem.data('$scope');
if (!tabScope || !tabScope.tab) {
return;
}
e.preventDefault();
e.stopPropagation();
scope.current = tabScope.tab;
scope.$timeout(function () {
var offset = elem.offset();
menu.show().css({
left: e.pageX - offset.left,
top: e.pageY - offset.top
});
$(document).on('click.nav-tabs-menu', hideMenu);
});
}
function hideMenu(e) {
scope.$timeout(function () {
scope.current = null;
menu.hide();
});
$(document).off('click.nav-tabs-menu');
}
},
templateUrl: 'partials/nav-tabs.html'
};
});
})();