Files
awx/awx/ui/client/lib/components/layout/side-nav.directive.js
2018-10-18 13:37:44 -04:00

71 lines
1.6 KiB
JavaScript

const templateUrl = require('~components/layout/side-nav.partial.html');
let $document;
function atSideNavLink (scope, element, attrs, ctrl) {
scope.layoutVm = ctrl;
$document.on('click', (e) => {
if ($(e.target).parents('.at-Layout-side').length === 0) {
scope.$emit('clickOutsideSideNav');
}
});
element.find('.at-SettingsSubPane').hover(() => {
scope.vm.onSettingsSubPane = true;
}, () => {
scope.vm.onSettingsSubPane = false;
setTimeout(() => {
if (!scope.vm.onSettingsNavItem) {
scope.vm.showSettingsSubMenu = false;
}
}, 100);
});
}
function AtSideNavController ($scope, $window) {
const vm = this || {};
const breakpoint = 700;
vm.isExpanded = true;
vm.toggleExpansion = () => {
vm.isExpanded = !vm.isExpanded;
};
$scope.$watch('layoutVm.currentState', () => {
if ($window.innerWidth <= breakpoint) {
vm.isExpanded = false;
}
});
$scope.$on('clickOutsideSideNav', () => {
if ($window.innerWidth <= breakpoint) {
vm.isExpanded = false;
}
});
}
AtSideNavController.$inject = ['$scope', '$window'];
function atSideNav (_$document_) {
$document = _$document_;
return {
restrict: 'E',
replace: true,
require: '^^atLayout',
controller: AtSideNavController,
controllerAs: 'vm',
link: atSideNavLink,
transclude: true,
templateUrl,
scope: {
}
};
}
atSideNav.$inject = ['$document'];
export default atSideNav;