You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

90 lines
1.2 KiB

const LoaderUtils = {
createFilesMap: function ( files ) {
const map = {};
for ( let i = 0; i < files.length; i ++ ) {
const file = files[ i ];
map[ file.name ] = file;
}
return map;
},
getFilesFromItemList: function ( items, onDone ) {
// TOFIX: setURLModifier() breaks when the file being loaded is not in root
let itemsCount = 0;
let itemsTotal = 0;
const files = [];
const filesMap = {};
function onEntryHandled() {
itemsCount ++;
if ( itemsCount === itemsTotal ) {
onDone( files, filesMap );
}
}
function handleEntry( entry ) {
if ( entry.isDirectory ) {
const reader = entry.createReader();
reader.readEntries( function ( entries ) {
for ( let i = 0; i < entries.length; i ++ ) {
handleEntry( entries[ i ] );
}
onEntryHandled();
} );
} else if ( entry.isFile ) {
entry.file( function ( file ) {
files.push( file );
filesMap[ entry.fullPath.slice( 1 ) ] = file;
onEntryHandled();
} );
}
itemsTotal ++;
}
for ( let i = 0; i < items.length; i ++ ) {
const item = items[ i ];
if ( item.kind === 'file' ) {
handleEntry( item.webkitGetAsEntry() );
}
}
}
};
export { LoaderUtils };