evoapp.directive('fileUpload', function($rootScope, $filter, globals, $timeout) {
return {
restrict: 'AE',
template:
'' +
'Seleccionar Ficheiro' +
'' +
'' +
'
'
,
scope: {
title: '@',
name: '@',
itemId: '@',
url: '@',
formData: '='
},
controller: function($rootScope, $scope, $filter, globals, $timeout) {
$scope.files = [];
$scope.$filter = $filter;
$scope.$rootScope = $rootScope;
if($scope.$parent[$scope.itemId] == undefined)
{
$scope.$parent[$scope.itemId] = $scope;
}
else
{
throw Error('FileUpload ' + $scope.itemId + ' already exists!');
}
},
link: function (scope, elem, attrs) {
var files = $($(elem[0]).find('#files')[0]);
//pass specified values to specified function arguments
function callback(fn, args) {
var fnArgs = [].concat(args);
fnArgs.push.apply(fnArgs, arguments);
return fn.apply(this, fnArgs);
};
$(elem[0]).fileupload({
url: scope.url,
dataType: 'json',
singleFileUploads: true,
autoUpload: false,
acceptFileTypes: /(\.|\/)(gif|jpe?g|png|pdf|doc|docx)$/i
}).on('fileuploadadd', function (e, data) {
var file = data.files[0];
files.html('
' + file.name + '
');
}).on('fileuploadprocessalways', function (e, data) {
}).on('fileuploadprogressall', function (e, data) {
}).on('fileuploaddone', function (e, data) {
files.text('');
}).on('fileuploadfail', function (e, data) {
files.text('');
});
$(elem[0]).bind('change', function (e) {
var f = e.target.files || [{name: this.value}];
scope.files = new Array();
var file = f[0];
if(file.error == undefined)
{
scope.files.push(f[0]);
}
else
{
globals.message.alert({
message: 'Tipo de Ficheiro inválido!',
callback: function(){
scope.reset();
}
});
}
});
scope.upload = function(formData){
if(scope.files.length > 0)
{
scope.$rootScope.$broadcast('loadingStatusActive');
var callbackFn = arguments[1];
$(elem[0]).fileupload('send', {
files: scope.files,
formData: formData
})
.success(function (result, textStatus, jqXHR) {
scope.$rootScope.$broadcast('loadingStatusInactive');
callback(callbackFn, [result, textStatus, jqXHR]);
})
.error(function (jqXHR, textStatus, errorThrown) {
scope.$rootScope.$broadcast('loadingStatusInactive');
//callback(callbackFn, [jqXHR, textStatus, errorThrown]);
})
.complete(function (result, textStatus, jqXHR) {
//callback(callbackFn, [result, textStatus, jqXHR]);
});
}
};
scope.reset = function(){
scope.files = [];
files.empty();
};
}
}
});