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.
91 lines
1.2 KiB
91 lines
1.2 KiB
2 years ago
|
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 };
|