| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| /** |
| * Directive which displays a set of object management buttons (save, delete, |
| * clone, etc.) representing the actions available to the current user in |
| * context of the object being edited/created. |
| */ |
| angular.module('manage').directive('managementButtons', ['$injector', |
| function managementButtons($injector) { |
| |
| // Required services |
| var guacNotification = $injector.get('guacNotification'); |
| |
| var directive = { |
| |
| restrict : 'E', |
| replace : true, |
| templateUrl : 'app/manage/templates/managementButtons.html', |
| |
| scope : { |
| |
| /** |
| * The translation namespace associated with all applicable |
| * translation strings. This directive requires at least the |
| * following translation strings within the given namespace: |
| * |
| * - ACTION_CANCEL |
| * - ACTION_CLONE |
| * - ACTION_DELETE |
| * - ACTION_SAVE |
| * - DIALOG_HEADER_CONFIRM_DELETE |
| * - TEXT_CONFIRM_DELETE |
| * |
| * @type String |
| */ |
| namespace : '@', |
| |
| /** |
| * The permissions which dictate the management actions available |
| * to the current user. |
| * |
| * @type ManagementPermissions |
| */ |
| permissions : '=', |
| |
| /** |
| * The function to invoke to save the arbitrary object being edited |
| * if the current user has permission to do so. The provided |
| * function MUST return a promise which is resolved if the save |
| * operation succeeds and is rejected with an {@link Error} if the |
| * save operation fails. |
| * |
| * @type Function |
| */ |
| save : '&', |
| |
| /** |
| * The function to invoke when the current user chooses to clone |
| * the object being edited. The provided function MUST perform the |
| * actions necessary to produce an interface which will clone the |
| * object. |
| * |
| * @type Function |
| */ |
| clone : '&', |
| |
| /** |
| * The function to invoke to delete the arbitrary object being edited |
| * if the current user has permission to do so. The provided |
| * function MUST return a promise which is resolved if the delete |
| * operation succeeds and is rejected with an {@link Error} if the |
| * delete operation fails. |
| * |
| * @type Function |
| */ |
| delete : '&', |
| |
| /** |
| * The function to invoke when the current user chooses to cancel |
| * the edit in progress, or when a save/delete operation has |
| * succeeded. The provided function MUST perform the actions |
| * necessary to return the user to a reasonable starting point. |
| * |
| * @type Function |
| */ |
| return : '&' |
| |
| } |
| |
| }; |
| |
| directive.controller = ['$scope', function managementButtonsController($scope) { |
| |
| /** |
| * An action to be provided along with the object sent to showStatus which |
| * immediately deletes the current connection. |
| */ |
| var DELETE_ACTION = { |
| name : $scope.namespace + '.ACTION_DELETE', |
| className : 'danger', |
| callback : function deleteCallback() { |
| deleteObjectImmediately(); |
| guacNotification.showStatus(false); |
| } |
| }; |
| |
| /** |
| * An action to be provided along with the object sent to showStatus which |
| * closes the currently-shown status dialog. |
| */ |
| var CANCEL_ACTION = { |
| name : $scope.namespace + '.ACTION_CANCEL', |
| callback : function cancelCallback() { |
| guacNotification.showStatus(false); |
| } |
| }; |
| |
| /** |
| * Invokes the provided return function to navigate the user back to |
| * the page they started from. |
| */ |
| var navigateBack = function navigateBack() { |
| $scope['return']($scope.$parent); |
| }; |
| |
| /** |
| * Invokes the provided delete function, immediately deleting the |
| * current object without prompting the user for confirmation. If |
| * deletion is successful, the user is navigated back to the page they |
| * started from. If the deletion fails, an error notification is |
| * displayed. |
| */ |
| var deleteObjectImmediately = function deleteObjectImmediately() { |
| $scope['delete']($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); |
| }; |
| |
| /** |
| * Cancels all pending edits, returning to the page the user started |
| * from. |
| */ |
| $scope.cancel = navigateBack; |
| |
| /** |
| * Cancels all pending edits, invoking the provided clone function to |
| * open an edit page for a new object which is prepopulated with the |
| * data from the current object. |
| */ |
| $scope.cloneObject = function cloneObject () { |
| $scope.clone($scope.$parent); |
| }; |
| |
| /** |
| * Invokes the provided save function to saves the current object. If |
| * saving is successful, the user is navigated back to the page they |
| * started from. If saving fails, an error notification is displayed. |
| */ |
| $scope.saveObject = function saveObject() { |
| $scope.save($scope.$parent).then(navigateBack, guacNotification.SHOW_REQUEST_ERROR); |
| }; |
| |
| /** |
| * Deletes the current object, prompting the user first to confirm that |
| * deletion is desired. If the user confirms that deletion is desired, |
| * the object is deleted through invoking the provided delete function. |
| * The user is automatically navigated back to the page they started |
| * from or given an error notification depending on whether deletion |
| * succeeds. |
| */ |
| $scope.deleteObject = function deleteObject() { |
| |
| // Confirm deletion request |
| guacNotification.showStatus({ |
| title : $scope.namespace + '.DIALOG_HEADER_CONFIRM_DELETE', |
| text : { key : $scope.namespace + '.TEXT_CONFIRM_DELETE' }, |
| actions : [ DELETE_ACTION, CANCEL_ACTION] |
| }); |
| |
| }; |
| |
| }]; |
| |
| return directive; |
| |
| }]); |