mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-06 13:17:41 +00:00
GUACAMOLE-220: Add common directive for displaying the save/clone/cancel/delete buttons shared by all object management pages.
This commit is contained in:
@@ -0,0 +1,201 @@
|
|||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
|
||||||
|
}]);
|
@@ -0,0 +1,6 @@
|
|||||||
|
<div class="action-buttons">
|
||||||
|
<button ng-show="permissions.canSaveObject" ng-click="saveObject()">{{namespace + '.ACTION_SAVE' | translate}}</button>
|
||||||
|
<button ng-show="permissions.canCloneObject" ng-click="cloneObject()">{{namespace + '.ACTION_CLONE' | translate}}</button>
|
||||||
|
<button ng-click="cancel()">{{namespace + '.ACTION_CANCEL' | translate}}</button>
|
||||||
|
<button ng-show="permissions.canDeleteObject" ng-click="deleteObject()" class="danger">{{namespace + '.ACTION_DELETE' | translate}}</button>
|
||||||
|
</div>
|
Reference in New Issue
Block a user