mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	GUACAMOLE-526: Provide key/value pairs via toArray filter. Consistently return same array for same object.
This commit is contained in:
		| @@ -19,20 +19,62 @@ | ||||
|  | ||||
| /** | ||||
|  * A filter for transforming an object into an array of all non-inherited | ||||
|  * property values. | ||||
|  * property key/value pairs. The resulting array contains one object for each | ||||
|  * property in the original object, where the "key" property contains the | ||||
|  * original property key and the "value" property contains the original | ||||
|  * property value. | ||||
|  */ | ||||
| angular.module('index').filter('toArray', [function toArrayFactory() { | ||||
|  | ||||
|     return function toArrayFiter(input) { | ||||
|     /** | ||||
|      * The name of the property to use to store the cached result of converting | ||||
|      * an object to an array. This property is added to each object converted, | ||||
|      * such that the same array is returned each time unless the original | ||||
|      * object has changed. | ||||
|      * | ||||
|      * @type String | ||||
|      */ | ||||
|     var CACHE_KEY = '_guac_toArray'; | ||||
|  | ||||
|     return function toArrayFilter(input) { | ||||
|  | ||||
|         // If no object is available, just return an empty array | ||||
|         if (!input) { | ||||
|             return []; | ||||
|         } | ||||
|  | ||||
|         return Object.keys(input).map(function fetchValueByKey(key) { | ||||
|             return input[key]; | ||||
|         // Translate object into array of key/value pairs | ||||
|         var array = []; | ||||
|         angular.forEach(input, function fetchValueByKey(value, key) { | ||||
|             array.push({ | ||||
|                 key   : key, | ||||
|                 value : value | ||||
|             }); | ||||
|         }); | ||||
|  | ||||
|         // Sort consistently by key | ||||
|         array.sort(function compareKeys(a, b) { | ||||
|             if (a.key < b.key) return -1; | ||||
|             if (a.key > b.key) return 1; | ||||
|             return 0; | ||||
|         }); | ||||
|  | ||||
|         // Define non-enumerable property for holding cached array | ||||
|         if (!input[CACHE_KEY]) { | ||||
|             Object.defineProperty(input, CACHE_KEY, { | ||||
|                 value        : [], | ||||
|                 enumerable   : false, | ||||
|                 configurable : true, | ||||
|                 writable     : true | ||||
|             }); | ||||
|         } | ||||
|  | ||||
|         // Update cache if resulting array is different | ||||
|         if (!angular.equals(input[CACHE_KEY], array)) | ||||
|             input[CACHE_KEY] = array; | ||||
|  | ||||
|         return input[CACHE_KEY]; | ||||
|  | ||||
|     }; | ||||
|  | ||||
| }]); | ||||
|   | ||||
| @@ -32,7 +32,7 @@ | ||||
|             <tr> | ||||
|                 <th>{{'MANAGE_CONNECTION.FIELD_HEADER_PROTOCOL' | translate}}</th> | ||||
|                 <td> | ||||
|                     <select ng-model="connection.protocol" ng-options="protocol.name as getProtocolName(protocol.name) | translate for protocol in protocols | toArray | orderBy: name"></select> | ||||
|                     <select ng-model="connection.protocol" ng-options="protocol.value.name as getProtocolName(protocol.value.name) | translate for protocol in protocols | toArray | orderBy: value.name"></select> | ||||
|                 </td> | ||||
|             </tr> | ||||
|         </table> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user