passman/js/app/directives/fileselect.js

67 lines
1.6 KiB
JavaScript
Raw Normal View History

2016-10-08 01:56:29 +08:00
(function () {
'use strict';
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
/**
* @ngdoc directive
* @name passmanApp.directive:passwordGen
* @description
* # passwordGen
*/
angular.module('passmanApp')
.directive('fileSelect', ['$window', function ($window) {
return {
restrict: 'A',
scope: {
success: '&success',
error: '&error',
progress: '&progress'
},
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
link: function (scope, el, attr, ctrl) {
scope.success = scope.success();
scope.error = scope.error();
scope.progress = scope.progress();
var fileReader = new $window.FileReader();
var _currentFile;
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
fileReader.onload = function () {
_currentFile.data = fileReader.result;
scope.success(_currentFile);
};
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
fileReader.onprogress = function (event) {
var percent = (event.loaded / event.total * 100);
scope.$apply(scope.progress({
file_total: event.total,
file_loaded: event.loaded,
file_percent: percent
}));
};
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
fileReader.onerror = function () {
scope.error();
};
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
el.bind('change', function (e) {
var _queueTotalFileSize = 0;
var _queueProgressBytes = 0;
var i;
//Calcutate total size
for (i = 0; i < e.target.files.length; i++) {
_queueTotalFileSize += e.target.files[i].size;
2016-09-14 05:03:12 +08:00
}
2016-10-08 01:56:29 +08:00
//Now load the files
for (i = 0; i < e.target.files.length; i++) {
_currentFile = e.target.files[i];
var mb_limit = 5;
if (_currentFile.size > (mb_limit * 1024 * 1024)) {
scope.error('TO_BIG', _currentFile);
}
fileReader.readAsDataURL(_currentFile);
2016-09-14 05:03:12 +08:00
2016-10-08 01:56:29 +08:00
}
});
}
};
}]);
}());