Repository: guacamole-client Updated Branches: refs/heads/staging/1.0.0 0163cfc30 -> bc1dc41a7
GUACAMOLE-470: Allow TEXT fields to be associated with predefined sets of known-good values. Project: http://git-wip-us.apache.org/repos/asf/guacamole-client/repo Commit: http://git-wip-us.apache.org/repos/asf/guacamole-client/commit/426a7919 Tree: http://git-wip-us.apache.org/repos/asf/guacamole-client/tree/426a7919 Diff: http://git-wip-us.apache.org/repos/asf/guacamole-client/diff/426a7919 Branch: refs/heads/staging/1.0.0 Commit: 426a7919b3a3b4db94354da455354f48ce69f4e8 Parents: a8bb6fe Author: Michael Jumper <mjum...@apache.org> Authored: Tue Jun 12 12:37:07 2018 -0700 Committer: Michael Jumper <mjum...@apache.org> Committed: Tue Jun 12 13:58:04 2018 -0700 ---------------------------------------------------------------------- .../org/apache/guacamole/form/TextField.java | 17 +++++++++ .../app/form/controllers/textFieldController.js | 40 ++++++++++++++++++++ .../webapp/app/form/services/formService.js | 2 + .../webapp/app/form/templates/textField.html | 8 +++- 4 files changed, 66 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/426a7919/guacamole-ext/src/main/java/org/apache/guacamole/form/TextField.java ---------------------------------------------------------------------- diff --git a/guacamole-ext/src/main/java/org/apache/guacamole/form/TextField.java b/guacamole-ext/src/main/java/org/apache/guacamole/form/TextField.java index 2751e14..990ad73 100644 --- a/guacamole-ext/src/main/java/org/apache/guacamole/form/TextField.java +++ b/guacamole-ext/src/main/java/org/apache/guacamole/form/TextField.java @@ -19,6 +19,8 @@ package org.apache.guacamole.form; +import java.util.Collection; + /** * Represents a basic text field. The field may generally contain any data, but * may not contain multiple lines. @@ -36,6 +38,21 @@ public class TextField extends Field { } /** + * Creates a new TextField with the given name and possible values. As a + * text field may contain any data by definition, any provided options are + * simply known-good values. + * + * @param name + * The unique name to associate with this field. + * + * @param options + * A set of known legal options for this field. + */ + public TextField(String name, Collection<String> options) { + super(name, Field.Type.TEXT, options); + } + + /** * Parses the given string, interpreting empty strings as equivalent to * null. For all other cases, the given string is returned verbatim. * http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/426a7919/guacamole/src/main/webapp/app/form/controllers/textFieldController.js ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/form/controllers/textFieldController.js b/guacamole/src/main/webapp/app/form/controllers/textFieldController.js new file mode 100644 index 0000000..b5bc753 --- /dev/null +++ b/guacamole/src/main/webapp/app/form/controllers/textFieldController.js @@ -0,0 +1,40 @@ +/* + * 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. + */ + + +/** + * Controller for text fields. + */ +angular.module('form').controller('textFieldController', ['$scope', '$injector', + function textFieldController($scope, $injector) { + + /** + * The ID of the datalist element that should be associated with the text + * field, providing a set of known-good values. If no such values are + * defined, this will be null. + * + * @type String + */ + $scope.dataListId = null; + + // Generate unique ID for datalist, if applicable + if ($scope.field.options && $scope.field.options.length) + $scope.dataListId = $scope.field.name + '-datalist'; + +}]); http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/426a7919/guacamole/src/main/webapp/app/form/services/formService.js ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/form/services/formService.js b/guacamole/src/main/webapp/app/form/services/formService.js index 64a1713..168a1ef 100644 --- a/guacamole/src/main/webapp/app/form/services/formService.js +++ b/guacamole/src/main/webapp/app/form/services/formService.js @@ -44,6 +44,8 @@ angular.module('form').provider('formService', function formServiceProvider() { * @type FieldType */ 'TEXT' : { + module : 'form', + controller : 'textFieldController', templateUrl : 'app/form/templates/textField.html' }, http://git-wip-us.apache.org/repos/asf/guacamole-client/blob/426a7919/guacamole/src/main/webapp/app/form/templates/textField.html ---------------------------------------------------------------------- diff --git a/guacamole/src/main/webapp/app/form/templates/textField.html b/guacamole/src/main/webapp/app/form/templates/textField.html index e213bc2..a338db4 100644 --- a/guacamole/src/main/webapp/app/form/templates/textField.html +++ b/guacamole/src/main/webapp/app/form/templates/textField.html @@ -1 +1,7 @@ -<input type="text" ng-model="model" autocorrect="off" autocapitalize="off"/> \ No newline at end of file +<div class="text-field"> + <input type="text" ng-model="model" autocorrect="off" autocapitalize="off" ng-attr-list="{{ dataListId }}"/> + <datalist ng-if="dataListId" id="{{ dataListId }}"> + <option ng-repeat="option in field.options | orderBy: option" + value="{{ option }}">{{ getFieldOption(option) | translate }}</option> + </datalist> +</div> \ No newline at end of file