From 0bd1fdc16fc06a64c82648b9ece6c9e25c30be44 Mon Sep 17 00:00:00 2001 From: Michael Jumper Date: Sun, 16 Nov 2014 15:06:19 -0800 Subject: [PATCH] GUAC-605: Simplify status modal API. --- .../client/controllers/clientController.js | 24 ++++------ .../app/index/controllers/statusController.js | 14 +++--- .../webapp/app/index/services/statusModal.js | 44 ++++++++++++++++++- 3 files changed, 57 insertions(+), 25 deletions(-) diff --git a/guacamole/src/main/webapp/app/client/controllers/clientController.js b/guacamole/src/main/webapp/app/client/controllers/clientController.js index f392746d7..570da3957 100644 --- a/guacamole/src/main/webapp/app/client/controllers/clientController.js +++ b/guacamole/src/main/webapp/app/client/controllers/clientController.js @@ -178,17 +178,18 @@ angular.module('home').controller('clientController', ['$scope', '$routeParams', // Show status dialog when client status changes $scope.$on('guacClientStateChange', function clientStateChangeListener(event, client, status) { - // Hide previous status, if any - statusModal.deactivate(); - // Show new status if not yet connected if (status !== "connected") { - statusModal.activate({ + statusModal.showStatus({ title: "client.status.connectingStatusTitle", text: "client.status.clientStates." + status }); } + // Hide status upon connecting + else + statusModal.showStatus(false); + }); // Show status dialog when client errors occur @@ -197,14 +198,11 @@ angular.module('home').controller('clientController', ['$scope', '$routeParams', // Disconnect $scope.id = null; - // Hide any existing status - statusModal.deactivate(); - // Determine translation name of error var errorName = (status in CLIENT_ERRORS) ? status.toString(16) : "DEFAULT"; // Show error status - statusModal.activate({ + statusModal.showStatus({ className: "error", title: "client.error.connectionErrorTitle", text: "client.error.clientErrors." + errorName, @@ -216,12 +214,9 @@ angular.module('home').controller('clientController', ['$scope', '$routeParams', // Show status dialog when tunnel status changes $scope.$on('guacTunnelStateChange', function tunnelStateChangeListener(event, tunnel, status) { - // Hide previous status, if any - statusModal.deactivate(); - // Show new status only if disconnected if (status === "closed") { - statusModal.activate({ + statusModal.showStatus({ title: "client.status.closedStatusTitle", text: "client.status.tunnelStates." + status }); @@ -235,14 +230,11 @@ angular.module('home').controller('clientController', ['$scope', '$routeParams', // Disconnect $scope.id = null; - // Hide any existing status - statusModal.deactivate(); - // Determine translation name of error var errorName = (status in TUNNEL_ERRORS) ? status.toString(16) : "DEFAULT"; // Show error status - statusModal.activate({ + statusModal.showStatus({ className: "error", title: "client.error.connectionErrorTitle", text: "client.error.tunnelErrors." + errorName, diff --git a/guacamole/src/main/webapp/app/index/controllers/statusController.js b/guacamole/src/main/webapp/app/index/controllers/statusController.js index 7df2a0ef2..9a45b5e25 100644 --- a/guacamole/src/main/webapp/app/index/controllers/statusController.js +++ b/guacamole/src/main/webapp/app/index/controllers/statusController.js @@ -29,20 +29,18 @@ angular.module('manage').controller('statusController', ['$scope', '$rootScope', var statusModal = $injector.get('statusModal'); /** - * Fires a guacStatusAction event signalling a chosen action. By default, - * the status modal will be closed, but this can be prevented by calling - * preventDefault() on the event. + * Fires a guacStatusAction event signalling a chosen action. The status + * modal will be cloased prior to firing the action event. * * @param {String} action The name of the action. */ $scope.fireAction = function fireAction(action) { - // Fire action event - var actionEvent = $rootScope.$broadcast('guacStatusAction', action); + // Hide status modal + statusModal.showStatus(false); - // Close modal unless default is prevented - if (!actionEvent.defaultPrevented) - statusModal.deactivate(); + // Fire action event + $rootScope.$broadcast('guacStatusAction', action); }; diff --git a/guacamole/src/main/webapp/app/index/services/statusModal.js b/guacamole/src/main/webapp/app/index/services/statusModal.js index 42f693fd0..b2643b6f9 100644 --- a/guacamole/src/main/webapp/app/index/services/statusModal.js +++ b/guacamole/src/main/webapp/app/index/services/statusModal.js @@ -26,11 +26,53 @@ angular.module('manage').factory('statusModal', ['btfModal', function statusModal(btfModal) { + var service = {}; + // Create the modal object to be used later to actually create the modal - return btfModal({ + var modalService = btfModal({ controller: 'statusController', controllerAs: 'modal', templateUrl: 'app/index/templates/status.html' }); + /** + * Whether the status modal is currently displayed. + * + * @type Boolean + */ + service.shown = false; + + /** + * Shows or hides the status modal. + * + * @param {Boolean|Object} status The status to show, or false to hide the + * current status. + * @param {String} [status.title] The title of the status modal. + * @param {String} [status.text] The body text of the status modal. + * @param {String} [status.className] The CSS class name to apply to the + * modal, in addition to the default + * "dialog" and "status" classes. + * @param {String[]} [status.actions] Array of action names which + * correspond to button captions. Each + * action will be displayed as a button + * within the status modal. Clickin a + * button will fire a guacStatusAction + * event. + */ + service.showStatus = function showStatus(status) { + + // Hide any existing status + modalService.deactivate(); + service.shown = false; + + // Show new status if requested + if (status) { + modalService.activate(status); + service.shown = true; + } + + }; + + return service; + }]);