From 0f4662daffdd53f490b89aa4b9403a8b78985877 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Thu, 12 Mar 2015 00:00:50 -0700 Subject: [PATCH] GUAC-1120: Close menu when user clicks outside menu. --- .../app/userMenu/directives/guacUserMenu.js | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/guacamole/src/main/webapp/app/userMenu/directives/guacUserMenu.js b/guacamole/src/main/webapp/app/userMenu/directives/guacUserMenu.js index 584192726..77c1f5895 100644 --- a/guacamole/src/main/webapp/app/userMenu/directives/guacUserMenu.js +++ b/guacamole/src/main/webapp/app/userMenu/directives/guacUserMenu.js @@ -42,13 +42,14 @@ angular.module('userMenu').directive('guacUserMenu', [function guacUserMenu() { }, templateUrl: 'app/userMenu/templates/guacUserMenu.html', - controller: ['$scope', '$injector', function guacUserMenuController($scope, $injector) { + controller: ['$scope', '$injector', '$element', function guacUserMenuController($scope, $injector, $element) { // Get required types var ConnectionGroup = $injector.get("ConnectionGroup"); var PermissionSet = $injector.get("PermissionSet"); // Get required services + var $document = $injector.get("$document"); var $location = $injector.get("$location"); var authenticationService = $injector.get("authenticationService"); var userService = $injector.get("userService"); @@ -64,7 +65,21 @@ angular.module('userMenu').directive('guacUserMenu', [function guacUserMenu() { $scope.showStatus(false); } }; - + + /** + * The outermost element of the user menu directive. + * + * @type Element + */ + var element = $element[0]; + + /** + * The main document object. + * + * @type Document + */ + var document = $document[0]; + /** * Whether the current user has sufficient permissions to use the * management interface. If permissions have not yet been loaded, @@ -258,6 +273,18 @@ angular.module('userMenu').directive('guacUserMenu', [function guacUserMenu() { }); }; + // Close menu when use clicks anywhere else + document.body.addEventListener("click", function clickOutsideMenu() { + $scope.$apply(function closeMenu() { + $scope.menuShown = false; + }); + }, false); + + // Prevent click within menu from triggering the outside-menu handler + element.addEventListener("click", function clickInsideMenu(e) { + e.stopPropagation(); + }, false); + }] // end controller };