/** * The application header bar. */ angular.module('quay').directive('headerBar', function () { var number = 0; var directiveDefinitionObject = { priority: 0, templateUrl: '/static/directives/header-bar.html', replace: false, transclude: false, restrict: 'C', scope: { }, controller: function($scope, $element, $location, $timeout, UserService, PlanService, ApiService, NotificationService, Config) { $scope.notificationService = NotificationService; $scope.searchVisible = false; $scope.currentSearchQuery = null; $scope.searchResultState = null; // Monitor any user changes and place the current user into the scope. UserService.updateUserIn($scope); $scope.isNewLayout = Config.isNewLayout(); var conductSearch = function(query) { if (!query) { $scope.searchResultState = null; return; } $scope.searchResultState = { 'state': 'loading' }; var params = { 'query': query }; ApiService.conductSearch(null, params).then(function(resp) { if (!$scope.searchVisible) { return; } $scope.searchResultState = { 'state': resp.results.length ? 'results' : 'no-results', 'results': resp.results, 'current': -1 }; }, /* background */ true); }; $scope.$watch('currentSearchQuery', conductSearch); $scope.signout = function() { ApiService.logout().then(function() { UserService.load(); $location.path('/'); }); }; $scope.appLinkTarget = function() { if ($("div[ng-view]").length === 0) { return "_self"; } return ""; }; $scope.getEnterpriseLogo = function() { if (!Config.ENTERPRISE_LOGO_URL) { return '/static/img/quay-logo.png'; } return Config.ENTERPRISE_LOGO_URL; }; $scope.toggleSearch = function() { $scope.searchVisible = !$scope.searchVisible; if ($scope.searchVisible) { $('#search-box-input').focus(); if ($scope.currentSearchQuery) { conductSearch($scope.currentSearchQuery); } } else { $scope.searchResultState = null; } }; $scope.getSearchBoxClasses = function(searchVisible, searchResultState) { var classes = searchVisible ? 'search-visible ' : ''; if (searchResultState) { classes += 'results-visible'; } return classes; }; $scope.handleSearchKeyDown = function(e) { if (e.keyCode == 27) { $scope.toggleSearch(); return; } if (!$scope.searchResultState) { return; } if (e.keyCode == 40) { $scope.searchResultState['current']++; e.preventDefault(); } else if (e.keyCode == 38) { $scope.searchResultState['current']--; e.preventDefault(); } else if (e.keyCode == 13) { var current = $scope.searchResultState['current']; if (current >= 0 && current < $scope.searchResultState['results'].length) { $scope.showResult($scope.searchResultState['results'][current]); } e.preventDefault(); } if (!$scope.searchResultState) { return; } if ($scope.searchResultState['current'] < -1) { $scope.searchResultState['current'] = $scope.searchResultState['results'].length - 1; } else if ($scope.searchResultState['current'] >= $scope.searchResultState['results'].length) { $scope.searchResultState['current'] = 0; } }; $scope.showResult = function(result) { $scope.toggleSearch(); $timeout(function() { $location.url(result['href']) }, 500); }; $scope.setCurrentResult = function(result) { if (!$scope.searchResultState) { return; } $scope.searchResultState['current'] = result; }; } }; return directiveDefinitionObject; });