Github user necouchman commented on a diff in the pull request:

    https://github.com/apache/guacamole-client/pull/282#discussion_r185634576
  
    --- Diff: 
guacamole/src/main/webapp/app/manage/directives/managementButtons.js ---
    @@ -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
    --- End diff --
    
    to *save* the


---

Reply via email to