Guest User

Untitled

a guest
Jun 22nd, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.54 KB | None | 0 0
  1. var traverse_items = function(items, structure) {
  2. var $result = $.Deferred();
  3. var files = [];
  4. var events = [];
  5. function traverse_item() {
  6. var $get = $.Deferred();
  7. var item, file;
  8. events.push($get);
  9. if (items[i] instanceof DataTransferItem) {
  10. item = items[i].webkitGetAsEntry();
  11. file = items[i].getAsFile();
  12. } else {
  13. item = items[i];
  14. }
  15. if (item) {
  16. if (item.isFile) {
  17. files.push(item);
  18. $get.resolve();
  19. } else if (item.isDirectory) {
  20. var dirReader = item.createReader();
  21. dirReader.readEntries(function (entries) {
  22. traverse_items(entries, structure).then(function (result) {
  23. if(structure) {
  24. files.push({
  25. name: item.name,
  26. fullPath: item.fullPath,
  27. files: result,
  28. isDirectory: true,
  29. isFile: false,
  30. });
  31. } else {
  32. files = _.union(files, result);
  33. }
  34. $get.resolve();
  35. });
  36. });
  37. }
  38. } else if (file) {
  39. if(file.size) {
  40. file.isFileItem = !!file.size;
  41. files.push(file);
  42. }
  43. $get.resolve();
  44. } else {
  45. console.warn("Your browser doesn't support Drag and Drop!");
  46. $get.resolve();
  47. }
  48. };
  49. for (var i = 0; i < items.length; i++) {
  50. traverse_item();
  51. }
  52. $.when.apply($, events).then(function () {
  53. $result.resolve(files);
  54. });
  55. return $result;
  56. };
  57.  
  58. var count_files_in_structure = function(structure) {
  59. var counter = 0;
  60. _.each(structure, function(item, index, structure) {
  61. if(item.isFile || item.isFileItem) {
  62. counter++;
  63. } else if(item.isDirectory) {
  64. counter += count_files_in_structure(item.files);
  65. }
  66. });
  67. return counter;
  68. }
  69.  
  70. var get_file_list = function(items) {
  71. return traverse_items(items, false);
  72. };
  73.  
  74. var get_file_structure = function(items) {
  75. return traverse_items(items, true);
  76. };
  77.  
  78. var load_file = function(file, callback) {
  79. var fileReader = new FileReader();
  80. fileReader.readAsDataURL(file);
  81. fileReader.onloadend = callback;
  82. };
  83.  
  84. var read_file = function(file, callback) {
  85. if(file.isFile) {
  86. file.file(function(file) {
  87. load_file(file, callback);
  88. });
  89. } else {
  90. load_file(file, callback);
  91. }
  92. };
Add Comment
Please, Sign In to add comment