提交 71f53423 编写于 作者: M Mr.doob

Editor: Implemented DataTransferItemList support.

上级 10f3f03f
......@@ -188,7 +188,17 @@
event.preventDefault();
editor.loader.loadFiles( event.dataTransfer.files );
// DataTransferItemList supports folders
if ( event.dataTransfer.items ) {
editor.loader.loadItemList( event.dataTransfer.items );
} else {
editor.loader.loadFiles( event.dataTransfer.files );
}
}, false );
......
......@@ -23,17 +23,29 @@ import { VRMLLoader } from '../../examples/jsm/loaders/VRMLLoader.js';
import { AddObjectCommand } from './commands/AddObjectCommand.js';
import { SetSceneCommand } from './commands/SetSceneCommand.js';
import { LoaderUtils } from './LoaderUtils.js';
var Loader = function ( editor ) {
var scope = this;
this.texturePath = '';
this.loadFiles = function ( files ) {
this.loadItemList = function ( items ) {
LoaderUtils.getFilesFromItemList( items, function ( files, filesMap ) {
scope.loadFiles( files, filesMap );
} );
};
this.loadFiles = function ( files, filesMap ) {
if ( files.length > 0 ) {
var filesMap = createFileMap( files );
var filesMap = filesMap || LoaderUtils.createFilesMap( files );
var manager = new THREE.LoadingManager();
manager.setURLModifier( function ( url ) {
......@@ -566,21 +578,6 @@ var Loader = function ( editor ) {
}
function createFileMap( files ) {
var map = {};
for ( var i = 0; i < files.length; i ++ ) {
var file = files[ i ];
map[ file.name ] = file;
}
return map;
}
function handleZIP( contents ) {
var zip = new JSZip( contents );
......
/**
* @author mrdoob / http://mrdoob.com/
*/
var LoaderUtils = {
createFilesMap: function ( files ) {
var map = {};
for ( var i = 0; i < files.length; i ++ ) {
var 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
var itemsCount = 0;
var itemsTotal = 0;
var files = [];
var filesMap = {};
function onEntryHandled() {
itemsCount ++;
if ( itemsCount === itemsTotal ) {
onDone( files, filesMap );
}
}
function handleEntry( entry ) {
if ( entry.isDirectory ) {
var reader = entry.createReader();
reader.readEntries( function ( entries ) {
for ( var i = 0; i < entries.length; i ++ ) {
handleEntry( entries[ i ] );
}
onEntryHandled( entry );
} );
} else if ( entry.isFile ) {
entry.file( function ( file ) {
files.push( file );
filesMap[ entry.fullPath.substr( 1 ) ] = file;
onEntryHandled();
} );
}
itemsTotal ++;
}
for ( var i = 0; i < items.length; i ++ ) {
handleEntry( items[ i ].webkitGetAsEntry() );
}
}
};
export { LoaderUtils };
......@@ -101,6 +101,7 @@ const assets = [
'./js/Config.js',
'./js/History.js',
'./js/Loader.js',
'./js/LoaderUtils.js',
'./js/Menubar.js',
'./js/Menubar.File.js',
'./js/Menubar.Edit.js',
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册