mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-30 00:23:21 +00:00 
			
		
		
		
	GUAC-963: Add directive for selecting files for upload via arbitrary elements.
This commit is contained in:
		| @@ -0,0 +1,97 @@ | ||||
| /* | ||||
|  * Copyright (C) 2014 Glyptodon LLC | ||||
|  * | ||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy | ||||
|  * of this software and associated documentation files (the "Software"), to deal | ||||
|  * in the Software without restriction, including without limitation the rights | ||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||||
|  * copies of the Software, and to permit persons to whom the Software is | ||||
|  * furnished to do so, subject to the following conditions: | ||||
|  * | ||||
|  * The above copyright notice and this permission notice shall be included in | ||||
|  * all copies or substantial portions of the Software. | ||||
|  * | ||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||||
|  * THE SOFTWARE. | ||||
|  */ | ||||
|  | ||||
| /** | ||||
|  * A directive which allows multiple files to be uploaded. Clicking on the | ||||
|  * associated element will result in a file selector dialog, which then calls | ||||
|  * the provided callback function with any chosen files. | ||||
|  */ | ||||
| angular.module('element').directive('guacUpload', ['$document', function guacUpload($document) { | ||||
|  | ||||
|     return { | ||||
|         restrict: 'A', | ||||
|  | ||||
|         link: function linkGuacUpload($scope, $element, $attrs) { | ||||
|  | ||||
|             /** | ||||
|              * Angular expression which evaluates to the function to call | ||||
|              * whenever files are chosen. The callback is provided a single | ||||
|              * parameter: the FileList containing all chosen files. | ||||
|              * | ||||
|              * @type String  | ||||
|              */ | ||||
|             var guacUpload = $attrs.guacUpload; | ||||
|  | ||||
|             /** | ||||
|              * The element which will register the drag gesture. | ||||
|              * | ||||
|              * @type Element | ||||
|              */ | ||||
|             var element = $element[0]; | ||||
|  | ||||
|             /** | ||||
|              * Internal form, containing a single file input element. | ||||
|              * | ||||
|              * @type HTMLFormElement | ||||
|              */ | ||||
|             var form = $document[0].createElement('form'); | ||||
|  | ||||
|             /** | ||||
|              * Internal file input element. | ||||
|              * | ||||
|              * @type HTMLInputElement | ||||
|              */ | ||||
|             var input = $document[0].createElement('input'); | ||||
|  | ||||
|             // Init input element | ||||
|             input.type = 'file'; | ||||
|             input.multiple = true; | ||||
|  | ||||
|             // Add input element to internal form | ||||
|             form.appendChild(input); | ||||
|  | ||||
|             // Notify of any chosen files | ||||
|             input.addEventListener('change', function filesSelected() { | ||||
|                 $scope.$apply(function setSelectedFiles() { | ||||
|  | ||||
|                     var callback = $scope.$eval(guacUpload); | ||||
|  | ||||
|                     // Only set chosen files selection is not canceled | ||||
|                     if (callback && input.files.length > 0) | ||||
|                         callback(input.files); | ||||
|  | ||||
|                     // Reset selection | ||||
|                     form.reset(); | ||||
|  | ||||
|                 }); | ||||
|             }); | ||||
|  | ||||
|             // Open file chooser when element is clicked | ||||
|             element.addEventListener('click', function elementClicked() { | ||||
|                 input.click(); | ||||
|             }); | ||||
|  | ||||
|         } // end guacUpload link function | ||||
|  | ||||
|     }; | ||||
|  | ||||
| }]); | ||||
		Reference in New Issue
	
	Block a user