diff --git a/guacamole/src/main/webapp/app/list/directives/guacUserItem.js b/guacamole/src/main/webapp/app/list/directives/guacUserItem.js new file mode 100644 index 000000000..5c5d26d06 --- /dev/null +++ b/guacamole/src/main/webapp/app/list/directives/guacUserItem.js @@ -0,0 +1,92 @@ +/* + * 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. + */ + +/** + * A directive which graphically represents an individual user. + */ +angular.module('list').directive('guacUserItem', [function guacUserItem() { + + return { + restrict: 'E', + replace: true, + scope: { + + /** + * The username of the user represented by this guacUserItem. + * + * @type String + */ + username : '=' + + }, + + templateUrl: 'app/list/templates/guacUserItem.html', + controller: ['$scope', '$injector', + function guacUserItemController($scope, $injector) { + + // Required types + var AuthenticationResult = $injector.get('AuthenticationResult'); + + // Required services + var $translate = $injector.get('$translate'); + + /** + * The string to display when listing the user having the provided + * username. Generally, this will be the username itself, but can + * also be an arbitrary human-readable representation of the user, + * or null if the display name is not yet determined. + * + * @type String + */ + $scope.displayName = null; + + /** + * Returns whether the username provided to this directive denotes + * a user that authenticated anonymously. + * + * @returns {Boolean} + * true if the username provided represents an anonymous user, + * false otherwise. + */ + $scope.isAnonymous = function isAnonymous() { + return $scope.username === AuthenticationResult.ANONYMOUS_USERNAME; + }; + + // Update display name whenever provided username changes + $scope.$watch('username', function updateDisplayName(username) { + + // If the user is anonymous, pull the display name for anonymous + // users from the translation service + if ($scope.isAnonymous()) { + $translate('LIST.TEXT_ANONYMOUS_USER') + .then(function retrieveAnonymousDisplayName(anonymousDisplayName) { + $scope.displayName = anonymousDisplayName; + }); + } + + // For all other users, use the username verbatim + else + $scope.displayName = username; + + }); + + }] // end controller + + }; +}]); diff --git a/guacamole/src/main/webapp/app/list/listModule.js b/guacamole/src/main/webapp/app/list/listModule.js index b3e65810e..845c8c968 100644 --- a/guacamole/src/main/webapp/app/list/listModule.js +++ b/guacamole/src/main/webapp/app/list/listModule.js @@ -21,4 +21,6 @@ * Module for displaying, sorting, and filtering the contents of a list, split * into multiple pages. */ -angular.module('list', []); +angular.module('list', [ + 'auth' +]); diff --git a/guacamole/src/main/webapp/app/list/styles/user-item.css b/guacamole/src/main/webapp/app/list/styles/user-item.css new file mode 100644 index 000000000..ffedd3902 --- /dev/null +++ b/guacamole/src/main/webapp/app/list/styles/user-item.css @@ -0,0 +1,23 @@ +/* + * 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. + */ + +.user-item.anonymous { + font-style: italic; + opacity: 0.5; +} diff --git a/guacamole/src/main/webapp/app/list/templates/guacUserItem.html b/guacamole/src/main/webapp/app/list/templates/guacUserItem.html new file mode 100644 index 000000000..e6ea670a6 --- /dev/null +++ b/guacamole/src/main/webapp/app/list/templates/guacUserItem.html @@ -0,0 +1,3 @@ +