acha-framework
Version:
is a modular framework on both client (angular.js) and server (node.js) side, it provides security, orm, ioc, obfuscation and ...
125 lines • 4.12 kB
JavaScript
(function ($, angular, underscore, window, document, undefined) {
'use strict';
angular.module('frontend.directives').factory('filePickerService', [
'apiService',
function (apiService) {
return function (path, files, data, callbacks) {
};
}
]).directive('filePicker', [
'translateService',
'filePickerService',
function (translateService, filePickerService) {
return {
restrict: 'E',
replace: true,
scope: {
tag: '<?',
disabled: '=?',
visible: '=?',
cssClass: '=?',
backend: '=?',
backendData: '=?',
backendKey: '=?',
maxSize: '=?',
accept: '=?',
pattern: '=?',
multiple: '=?',
preview: '=?',
onSuccess: '<?',
onError: '<?',
onProgress: '<?',
model: '=?'
},
templateUrl: '/templates/framework/directives/file-picker/template.html',
link: function (scope, element, attr) {
scope.vm = {
uploading: false,
uploadPercent: 0
};
scope.vm.init = function () {
if (angular.isUndefined(scope.disabled)) {
scope.disabled = false;
}
if (angular.isUndefined(scope.multiple)) {
scope.multiple = false;
}
if (angular.isUndefined(scope.preview)) {
scope.preview = true;
}
if (angular.isUndefined(scope.visible)) {
scope.visible = true;
}
if (angular.isUndefined(scope.cssClass)) {
scope.cssClass = '';
}
if (angular.isUndefined(scope.pattern)) {
scope.pattern = '';
}
if (angular.isUndefined(scope.accept)) {
scope.accept = '';
}
if (angular.isUndefined(scope.backendKey)) {
scope.backendKey = '$uploadedFiles';
}
if (angular.isUndefined(scope.model)) {
scope.model = [];
}
if (angular.isUndefined(scope.maxSize)) {
scope.maxSize = '20MB';
}
scope.vm.bind();
};
scope.vm.onSelect = function ($files) {
var files = {};
files[scope.backendKey] = $files;
if (scope.backend) {
scope.vm.uploading = true;
scope.vm.uploadPercent = 0;
filePickerService(scope.backend, files, scope.backendData, {
onSuccess: function (op) {
scope.vm.uploading = false;
if (scope.onSuccess) {
scope.onSuccess(op, scope.tag);
}
},
onError: function (err) {
scope.vm.uploading = false;
if (scope.onError) {
scope.onError(err, scope.tag);
}
},
onProgress: function (percent, fileName, file) {
scope.vm.uploadPercent = percent;
if (scope.onProgress) {
scope.onProgress(percent, fileName, file, scope.tag);
}
}
});
}
};
scope.vm.remove = function (item) {
if (scope.disabled)
return;
scope.model.del(item);
};
scope.vm.onChange = function ($files, $file, $newFiles, $duplicateFiles, $invalidFiles, $event) {
scope.model = $files;
};
scope.vm.bind = function () {
};
scope.vm.getText = function () {
if (!scope.model || !scope.model.length) {
return translateService('general.noFileSelected');
}
if (!scope.multiple) {
return scope.model[0].name;
}
return scope.model.pluck('name').join(', ');
};
scope.vm.init();
}
};
}
]);
}(jQuery, angular, _, window, document));