mirror of
https://github.com/gyurix1968/guacamole-client.git
synced 2025-09-10 07:01:21 +00:00
GUAC-932: Fix connection parameter directive and display.
This commit is contained in:
@@ -31,55 +31,128 @@ angular.module('manage').directive('guacConnectionParameter', [function connecti
|
||||
restrict: 'E',
|
||||
replace: true,
|
||||
scope: {
|
||||
parameter: '=parameter',
|
||||
connection: '=connection',
|
||||
|
||||
/**
|
||||
* The protocol this parameter is associated with.
|
||||
*
|
||||
* @type Protocol
|
||||
*/
|
||||
protocol : '=',
|
||||
|
||||
/**
|
||||
* The unique name of this parameter within the protocol
|
||||
* definition.
|
||||
*
|
||||
* @type String
|
||||
*/
|
||||
name : '=',
|
||||
|
||||
/**
|
||||
* The current map of parameter names to their corresponding string
|
||||
* values.
|
||||
*
|
||||
* @type Object.<String, String>
|
||||
*/
|
||||
parameters : '='
|
||||
|
||||
},
|
||||
templateUrl: 'app/manage/templates/connectionParameter.html',
|
||||
controller: ['$scope', function connectionParameterController($scope) {
|
||||
$scope.connectionParameters = $scope.connection.parameters;
|
||||
$scope.parameterType = $scope.parameter.type;
|
||||
$scope.parameterName = $scope.parameter.name;
|
||||
|
||||
// Coerce numeric strings to numbers
|
||||
if ($scope.parameterType === 'NUMERIC') {
|
||||
|
||||
// If a value exists, coerce it to a number
|
||||
if ($scope.connectionParameters[$scope.parameterName])
|
||||
$scope.parameterValue = Number($scope.connectionParameters[$scope.parameterName]);
|
||||
else
|
||||
$scope.parameterValue = null;
|
||||
|
||||
}
|
||||
|
||||
// Coerce boolean strings to boolean values
|
||||
else if ($scope.parameterType === 'BOOLEAN') {
|
||||
// TODO: Use defined checked value from protocol description
|
||||
$scope.parameterValue = $scope.connectionParameters[$scope.parameterName] === 'true';
|
||||
}
|
||||
|
||||
// All other parameter types are represented internally as strings
|
||||
else
|
||||
$scope.parameterValue = $scope.connectionParameters[$scope.parameterName];
|
||||
|
||||
// Update internal representation as model is changed
|
||||
$scope.$watch('parameterValue', function parameterValueChanges(value) {
|
||||
|
||||
// Convert numeric values back into strings
|
||||
if ($scope.parameterType === 'NUMERIC') {
|
||||
if (value === null || typeof value === 'undefined')
|
||||
$scope.connectionParameters[$scope.parameterName] = '';
|
||||
controller: ['$scope', '$q', function connectionParameterController($scope, $q) {
|
||||
|
||||
/**
|
||||
* Deferred load of the parameter definition, pending availability
|
||||
* of the protocol definition as a whole.
|
||||
*
|
||||
* @type Deferred
|
||||
*/
|
||||
var parameterDefinitionAvailable = $q.defer();
|
||||
|
||||
/**
|
||||
* Populates the parameter definition on the scope as
|
||||
* <code>$scope.parameter</code> if both the parameter name and
|
||||
* protocol definition are available. If either are unavailable,
|
||||
* this function has no effect.
|
||||
*/
|
||||
var retrieveParameterDefinition = function retrieveParameterDefinition() {
|
||||
|
||||
// Both name and protocol are needed to retrieve the parameter definition
|
||||
if (!$scope.name || !$scope.protocol)
|
||||
return;
|
||||
|
||||
// Once protocol definition is available, locate parameter definition by name
|
||||
$scope.protocol.parameters.forEach(function findParameter(parameter) {
|
||||
if (parameter.name === $scope.name) {
|
||||
$scope.parameter = parameter;
|
||||
parameterDefinitionAvailable.resolve(parameter);
|
||||
}
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// Load parameter definition once protocol definition is available.
|
||||
$scope.$watch('name', retrieveParameterDefinition);
|
||||
$scope.$watch('protocol', retrieveParameterDefinition);
|
||||
|
||||
// Update typed value when parameter set is changed
|
||||
$scope.$watch('parameters', function setParameters(parameters) {
|
||||
|
||||
// Don't bother if no parameters were provided
|
||||
if (!parameters)
|
||||
return;
|
||||
|
||||
// Wait for parameter definition
|
||||
parameterDefinitionAvailable.promise.then(function setTypedValue() {
|
||||
|
||||
// Pull parameter value
|
||||
var value = parameters[$scope.name];
|
||||
|
||||
// Coerce numeric strings to numbers
|
||||
if ($scope.parameter.type === 'NUMERIC')
|
||||
$scope.typedValue = (value ? Number(value) : null);
|
||||
|
||||
// Coerce boolean strings to boolean values
|
||||
else if ($scope.parameter.type === 'BOOLEAN')
|
||||
$scope.typedValue = (value === $scope.parameter.value);
|
||||
|
||||
// All other parameter types are represented internally as strings
|
||||
else
|
||||
$scope.connectionParameters[$scope.parameterName] = value.toString();
|
||||
}
|
||||
|
||||
// TODO: Transform BOOLEAN input fields back into strings based on protocol description
|
||||
|
||||
// All other parameter types are already strings
|
||||
else
|
||||
$scope.connectionParameters[$scope.parameterName] = value;
|
||||
|
||||
$scope.typedValue = value || '';
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
}]
|
||||
|
||||
// Update string value in parameter set when typed value is changed
|
||||
$scope.$watch('typedValue', function typedValueChanged(typedValue) {
|
||||
|
||||
// Don't bother if there's nothing to set
|
||||
if (!$scope.parameters)
|
||||
return;
|
||||
|
||||
// Wait for parameter definition
|
||||
parameterDefinitionAvailable.promise.then(function setValue() {
|
||||
|
||||
// Convert numeric values back into strings
|
||||
if ($scope.parameter.type === 'NUMERIC') {
|
||||
if (!typedValue)
|
||||
$scope.parameters[$scope.name] = '';
|
||||
else
|
||||
$scope.parameters[$scope.name] = typedValue.toString();
|
||||
}
|
||||
|
||||
// Convert boolean values back into strings based on protocol description
|
||||
else if ($scope.parameter.type === 'BOOLEAN')
|
||||
$scope.parameters[$scope.name] = (typedValue ? $scope.parameter.value : '');
|
||||
|
||||
// All other parameter types are already strings
|
||||
else
|
||||
$scope.parameters[$scope.name] = typedValue || '';
|
||||
|
||||
});
|
||||
|
||||
}); // end watch typedValue
|
||||
|
||||
}] // end controller
|
||||
};
|
||||
|
||||
}]);
|
Reference in New Issue
Block a user