public function buildUploaderBehaviour($deleted = false)
    {
        $returnValue = (string) '';
        
        $widgetName = $this->buildWidgetName();
        
        // get the upload max size (the min of those 3 directives)
        $max_upload = (int) (ini_get('upload_max_filesize'));
        $max_post = (int) (ini_get('post_max_size'));
        $memory_limit = (int) (ini_get('memory_limit'));
        $fileSize = min($max_upload, $max_post, $memory_limit) * 1024 * 1024;
        
        $mimetypes = array();
        
        // add a client validation
        foreach ($this->validators as $validator) {
            // get the valid file extensions
            if ($validator instanceof tao_helpers_form_validators_FileMimeType) {
                $options = $validator->getOptions();
                if (isset($options['mimetype'])) {
                    $mimetypes = $options['mimetype'];
                }
            }
            // get the max file size
            if ($validator instanceof tao_helpers_form_validators_FileSize) {
                $options = $validator->getOptions();
                if (isset($options['max'])) {
                    $validatorMax = (int) $options['max'];
                    if ($validatorMax > 0 && $validatorMax < $fileSize) {
                        $fileSize = $validatorMax;
                    }
                }
            }
        }
        
        // default value for 'auto' is 'true':
        $auto = 'true';
        if (isset($this->attributes['auto'])) {
            if (! $this->attributes['auto'] || $this->attributes['auto'] === 'false') {
                $auto = 'false';
            }
            unset($this->attributes['auto']);
        }
        
        // initialize the Uploader Js component
        $returnValue .= '
                 require([\'jquery\',  \'ui/feedback\', \'ui/uploader\'], function($, feedback){
					 $("#' . $this->buildWidgetContainerId() . '").uploader({
							 uploadUrl: "' . ROOT_URL . 'tao/File/upload",
							autoUpload: "' . $auto . '"  ,
							showResetButton: "' . ! $auto . '" ,
							showUploadButton: "' . ! $auto . '" ,
							fileSelect  : function(files, done){
											var error = [],
												givenLength = files.length,
												filters = "' . implode(',', $mimetypes) . '".split(",").filter(function(e){return e.length});

												if (filters.length){

													files = _.filter(files, function(file){
														return _.contains(filters, file.type);
													});

													if(files.length !== givenLength){
														error.push( "Unauthorized files have been removed");
													}

												}

												files = _.filter(files, function(file){
														return file.size <= ' . $fileSize . ';
													});

												if(files.length !== givenLength && !error.length){
													error.push( "Size limit is ' . $fileSize . ' bytes");
												}

												if (error.length){
													feedback().error(error.join(","));
												}

												done(files);
												if ( ' . $auto . ' ){
													$(this).uploader("upload");
												}
										 }

					 }).on("upload.uploader", function(e, file, result){
					 	if ( result && result.uploaded ){
					 	    var $container = $(e.target);
                            var $form = $container.parents("form");
                            var $fileHandling = $form.find("[name=\'file_handling\']");
							$container.append($("<input type=\'hidden\' name=\'' . $this->getName() . '\'/>").val(result.data));
						}
					 })
			});';
        
        return (string) $returnValue;
    }