LoaderUtils.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. const LoaderUtils = {
  2. createFilesMap: function ( files ) {
  3. const map = {};
  4. for ( let i = 0; i < files.length; i ++ ) {
  5. const file = files[ i ];
  6. map[ file.name ] = file;
  7. }
  8. return map;
  9. },
  10. getFilesFromItemList: function ( items, onDone ) {
  11. // TOFIX: setURLModifier() breaks when the file being loaded is not in root
  12. let itemsCount = 0;
  13. let itemsTotal = 0;
  14. const files = [];
  15. const filesMap = {};
  16. function onEntryHandled() {
  17. itemsCount ++;
  18. if ( itemsCount === itemsTotal ) {
  19. onDone( files, filesMap );
  20. }
  21. }
  22. function handleEntry( entry ) {
  23. if ( entry.isDirectory ) {
  24. const reader = entry.createReader();
  25. reader.readEntries( function ( entries ) {
  26. for ( let i = 0; i < entries.length; i ++ ) {
  27. handleEntry( entries[ i ] );
  28. }
  29. onEntryHandled();
  30. } );
  31. } else if ( entry.isFile ) {
  32. entry.file( function ( file ) {
  33. files.push( file );
  34. filesMap[ entry.fullPath.slice( 1 ) ] = file;
  35. onEntryHandled();
  36. } );
  37. }
  38. itemsTotal ++;
  39. }
  40. for ( let i = 0; i < items.length; i ++ ) {
  41. const item = items[ i ];
  42. if ( item.kind === 'file' ) {
  43. handleEntry( item.webkitGetAsEntry() );
  44. }
  45. }
  46. }
  47. };
  48. export { LoaderUtils };