Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var traverse_items = function(items, structure) {
- var $result = $.Deferred();
- var files = [];
- var events = [];
- function traverse_item() {
- var $get = $.Deferred();
- var item, file;
- events.push($get);
- if (items[i] instanceof DataTransferItem) {
- item = items[i].webkitGetAsEntry();
- file = items[i].getAsFile();
- } else {
- item = items[i];
- }
- if (item) {
- if (item.isFile) {
- files.push(item);
- $get.resolve();
- } else if (item.isDirectory) {
- var dirReader = item.createReader();
- dirReader.readEntries(function (entries) {
- traverse_items(entries, structure).then(function (result) {
- if(structure) {
- files.push({
- name: item.name,
- fullPath: item.fullPath,
- files: result,
- isDirectory: true,
- isFile: false,
- });
- } else {
- files = _.union(files, result);
- }
- $get.resolve();
- });
- });
- }
- } else if (file) {
- if(file.size) {
- file.isFileItem = !!file.size;
- files.push(file);
- }
- $get.resolve();
- } else {
- console.warn("Your browser doesn't support Drag and Drop!");
- $get.resolve();
- }
- };
- for (var i = 0; i < items.length; i++) {
- traverse_item();
- }
- $.when.apply($, events).then(function () {
- $result.resolve(files);
- });
- return $result;
- };
- var count_files_in_structure = function(structure) {
- var counter = 0;
- _.each(structure, function(item, index, structure) {
- if(item.isFile || item.isFileItem) {
- counter++;
- } else if(item.isDirectory) {
- counter += count_files_in_structure(item.files);
- }
- });
- return counter;
- }
- var get_file_list = function(items) {
- return traverse_items(items, false);
- };
- var get_file_structure = function(items) {
- return traverse_items(items, true);
- };
- var load_file = function(file, callback) {
- var fileReader = new FileReader();
- fileReader.readAsDataURL(file);
- fileReader.onloadend = callback;
- };
- var read_file = function(file, callback) {
- if(file.isFile) {
- file.file(function(file) {
- load_file(file, callback);
- });
- } else {
- load_file(file, callback);
- }
- };
Add Comment
Please, Sign In to add comment