@xviewer.js/core 1.0.0-alpha.56 → 1.0.0-alpha.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/main.js +238 -89
- package/dist/main.js.map +1 -1
- package/dist/module.js +238 -90
- package/dist/module.js.map +1 -1
- package/package.json +1 -1
- package/types/ObjectInstance.d.ts +2 -2
- package/types/Viewer.d.ts +3 -2
- package/types/asset/ResourceManager.d.ts +7 -15
- package/types/asset/aLoader.d.ts +5 -1
- package/types/loaders/aEXRLoader.d.ts +2 -1
- package/types/loaders/aFBXLoader.d.ts +2 -1
- package/types/loaders/aGLTFLoader.d.ts +3 -1
- package/types/loaders/aHDRLoader.d.ts +2 -1
- package/types/loaders/aJSONLoader.d.ts +2 -1
- package/types/loaders/aTextureLoader.d.ts +2 -1
- package/types/plugins/DropFilePlugin.d.ts +16 -0
- package/types/plugins/index.d.ts +1 -0
package/dist/main.js
CHANGED
|
@@ -1106,10 +1106,14 @@ aLoader._texKeys = [
|
|
|
1106
1106
|
];
|
|
1107
1107
|
|
|
1108
1108
|
class aEXRLoader extends aLoader {
|
|
1109
|
-
load({ url, onLoad, onProgress, onError
|
|
1110
|
-
|
|
1111
|
-
loader
|
|
1112
|
-
|
|
1109
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1110
|
+
let loader = this._loader;
|
|
1111
|
+
if (loader === undefined) {
|
|
1112
|
+
loader = this._loader = new EXRLoader_js.EXRLoader();
|
|
1113
|
+
}
|
|
1114
|
+
loader.manager = manager;
|
|
1115
|
+
loader.setPath(path);
|
|
1116
|
+
loader.setResourcePath(resourcePath);
|
|
1113
1117
|
loader.load(url, (tex)=>onLoad(Object.assign(tex, texSettings)), onProgress, onError);
|
|
1114
1118
|
}
|
|
1115
1119
|
constructor(...args){
|
|
@@ -1121,15 +1125,19 @@ class aEXRLoader extends aLoader {
|
|
|
1121
1125
|
}
|
|
1122
1126
|
|
|
1123
1127
|
class aFBXLoader extends aLoader {
|
|
1124
|
-
load({ url, buffer, onLoad, onProgress, onError }) {
|
|
1128
|
+
load({ url, buffer, path, resourcePath, manager, onLoad, onProgress, onError }) {
|
|
1129
|
+
let loader = this._loader;
|
|
1130
|
+
if (loader === undefined) {
|
|
1131
|
+
loader = this._loader = new FBXLoader_js.FBXLoader();
|
|
1132
|
+
}
|
|
1133
|
+
loader.manager = manager;
|
|
1134
|
+
loader.setPath(path);
|
|
1135
|
+
loader.setResourcePath(resourcePath);
|
|
1125
1136
|
const loadCallback = (node)=>{
|
|
1126
1137
|
onLoad(aLoader._setUserData(node));
|
|
1127
1138
|
};
|
|
1128
|
-
const loader = new FBXLoader_js.FBXLoader(this.manager.loadingManager);
|
|
1129
|
-
loader.setPath(this.manager.path);
|
|
1130
|
-
loader.setResourcePath(this.manager.resourcePath);
|
|
1131
1139
|
if (buffer) {
|
|
1132
|
-
loadCallback(loader.parse(buffer,
|
|
1140
|
+
loadCallback(loader.parse(buffer, path));
|
|
1133
1141
|
} else {
|
|
1134
1142
|
loader.load(url, loadCallback, onProgress, onError);
|
|
1135
1143
|
}
|
|
@@ -1143,23 +1151,31 @@ class aFBXLoader extends aLoader {
|
|
|
1143
1151
|
}
|
|
1144
1152
|
|
|
1145
1153
|
class aGLTFLoader extends aLoader {
|
|
1146
|
-
load({ url, buffer, onLoad, onProgress, onError }) {
|
|
1154
|
+
load({ url, buffer, path, resourcePath, dracoPath, manager, onLoad, onProgress, onError }) {
|
|
1155
|
+
let dracoLoader = this._dracoLoader;
|
|
1156
|
+
if (dracoLoader === undefined) {
|
|
1157
|
+
dracoLoader = this._dracoLoader = new DRACOLoader_js.DRACOLoader();
|
|
1158
|
+
}
|
|
1159
|
+
dracoLoader.manager = manager;
|
|
1160
|
+
dracoLoader.setDecoderPath(dracoPath);
|
|
1161
|
+
let loader = this._loader;
|
|
1162
|
+
if (loader === undefined) {
|
|
1163
|
+
loader = this._loader = new GLTFLoader_js.GLTFLoader();
|
|
1164
|
+
loader.setDRACOLoader(dracoLoader);
|
|
1165
|
+
loader.setMeshoptDecoder(meshopt_decoder_module_js.MeshoptDecoder);
|
|
1166
|
+
}
|
|
1167
|
+
loader.manager = manager;
|
|
1168
|
+
loader.setPath(path);
|
|
1169
|
+
loader.setResourcePath(resourcePath);
|
|
1147
1170
|
const loadCallback = (gltf)=>{
|
|
1148
1171
|
const node = gltf.scene;
|
|
1149
|
-
|
|
1172
|
+
node.animations.push(...gltf.animations);
|
|
1150
1173
|
onLoad(aLoader._setUserData(node));
|
|
1151
1174
|
};
|
|
1152
|
-
let gltfLoader = new GLTFLoader_js.GLTFLoader(this.manager.loadingManager);
|
|
1153
|
-
gltfLoader.setPath(this.manager.path);
|
|
1154
|
-
gltfLoader.setResourcePath(this.manager.resourcePath);
|
|
1155
|
-
let dracoLoader = new DRACOLoader_js.DRACOLoader(this.manager.loadingManager);
|
|
1156
|
-
dracoLoader.setDecoderPath(this.manager.dracoPath);
|
|
1157
|
-
gltfLoader.setDRACOLoader(dracoLoader);
|
|
1158
|
-
gltfLoader.setMeshoptDecoder(meshopt_decoder_module_js.MeshoptDecoder);
|
|
1159
1175
|
if (buffer) {
|
|
1160
|
-
|
|
1176
|
+
loader.parse(buffer, resourcePath, loadCallback, onError);
|
|
1161
1177
|
} else {
|
|
1162
|
-
|
|
1178
|
+
loader.load(url, loadCallback, onProgress, onError);
|
|
1163
1179
|
}
|
|
1164
1180
|
}
|
|
1165
1181
|
constructor(...args){
|
|
@@ -1172,13 +1188,17 @@ class aGLTFLoader extends aLoader {
|
|
|
1172
1188
|
}
|
|
1173
1189
|
|
|
1174
1190
|
class aHDRLoader extends aLoader {
|
|
1175
|
-
load({ url, onLoad, onProgress, onError
|
|
1191
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1192
|
+
let loader = this._loader;
|
|
1193
|
+
if (loader === undefined) {
|
|
1194
|
+
loader = this._loader = new RGBELoader_js.RGBELoader();
|
|
1195
|
+
}
|
|
1196
|
+
loader.manager = manager;
|
|
1197
|
+
loader.setPath(path);
|
|
1198
|
+
loader.setResourcePath(resourcePath);
|
|
1176
1199
|
const settings = Object.assign({
|
|
1177
1200
|
mapping: three.EquirectangularReflectionMapping
|
|
1178
1201
|
}, texSettings);
|
|
1179
|
-
const loader = new RGBELoader_js.RGBELoader(this.manager.loadingManager);
|
|
1180
|
-
loader.setPath(this.manager.path);
|
|
1181
|
-
loader.setResourcePath(this.manager.resourcePath);
|
|
1182
1202
|
loader.load(url, (tex)=>onLoad(Object.assign(tex, settings)), onProgress, onError);
|
|
1183
1203
|
}
|
|
1184
1204
|
constructor(...args){
|
|
@@ -1190,10 +1210,14 @@ class aHDRLoader extends aLoader {
|
|
|
1190
1210
|
}
|
|
1191
1211
|
|
|
1192
1212
|
class aJSONLoader extends aLoader {
|
|
1193
|
-
load({ url, onLoad, onProgress, onError }) {
|
|
1194
|
-
|
|
1195
|
-
loader
|
|
1196
|
-
|
|
1213
|
+
load({ url, path, resourcePath, manager, onLoad, onProgress, onError }) {
|
|
1214
|
+
let loader = this._loader;
|
|
1215
|
+
if (loader === undefined) {
|
|
1216
|
+
loader = this._loader = new three.FileLoader();
|
|
1217
|
+
}
|
|
1218
|
+
loader.manager = manager;
|
|
1219
|
+
loader.setPath(path);
|
|
1220
|
+
loader.setResourcePath(resourcePath);
|
|
1197
1221
|
loader.load(url, (file)=>onLoad(JSON.parse(file)), onProgress, onError);
|
|
1198
1222
|
}
|
|
1199
1223
|
constructor(...args){
|
|
@@ -1205,14 +1229,18 @@ class aJSONLoader extends aLoader {
|
|
|
1205
1229
|
}
|
|
1206
1230
|
|
|
1207
1231
|
class aTextureLoader extends aLoader {
|
|
1208
|
-
load({ url, onLoad, onProgress, onError
|
|
1232
|
+
load({ url, path, resourcePath, manager, texSettings, onLoad, onProgress, onError }) {
|
|
1233
|
+
let loader = this._loader;
|
|
1234
|
+
if (loader === undefined) {
|
|
1235
|
+
loader = this._loader = new three.TextureLoader();
|
|
1236
|
+
}
|
|
1237
|
+
loader.manager = manager;
|
|
1238
|
+
loader.setPath(path);
|
|
1239
|
+
loader.setResourcePath(resourcePath);
|
|
1209
1240
|
const loadCallback = (tex)=>{
|
|
1210
1241
|
tex.colorSpace = three.SRGBColorSpace;
|
|
1211
1242
|
onLoad(Object.assign(tex, texSettings));
|
|
1212
1243
|
};
|
|
1213
|
-
const loader = new three.TextureLoader(this.manager.loadingManager);
|
|
1214
|
-
loader.setPath(this.manager.path);
|
|
1215
|
-
loader.setResourcePath(this.manager.resourcePath);
|
|
1216
1244
|
loader.load(url, loadCallback, onProgress, onError);
|
|
1217
1245
|
}
|
|
1218
1246
|
constructor(...args){
|
|
@@ -2874,13 +2902,13 @@ class FreelookVirtualCamera extends VirtualCamera {
|
|
|
2874
2902
|
this._touchID = -1;
|
|
2875
2903
|
this._preLoc0 = new three.Vector2();
|
|
2876
2904
|
this._preLoc1 = new three.Vector2();
|
|
2877
|
-
this._spherical = new three.Spherical(
|
|
2905
|
+
this._spherical = new three.Spherical(4, Math.PI / 2);
|
|
2878
2906
|
this._lookAt = new three.Vector3();
|
|
2879
2907
|
this._tempSmoothing = 6;
|
|
2880
2908
|
this._tempRotateSmoothing = 8;
|
|
2881
2909
|
this._targetTheta = 0;
|
|
2882
2910
|
this._targetPhi = 0;
|
|
2883
|
-
this._targetSpringLength =
|
|
2911
|
+
this._targetSpringLength = 4;
|
|
2884
2912
|
this._targetFov = this.fov;
|
|
2885
2913
|
this._targetLookAt = new three.Vector3();
|
|
2886
2914
|
this.forbidX = false;
|
|
@@ -4263,15 +4291,6 @@ class ResourceManager {
|
|
|
4263
4291
|
let str = path.split("/").pop();
|
|
4264
4292
|
return ext ? str.replace("." + ext, "") : str;
|
|
4265
4293
|
}
|
|
4266
|
-
static _getTextureKey(url, settings) {
|
|
4267
|
-
let keys = [
|
|
4268
|
-
url
|
|
4269
|
-
];
|
|
4270
|
-
for(let k in settings){
|
|
4271
|
-
if (settings[k] !== undefined) keys.push(k + "=" + settings[k]);
|
|
4272
|
-
}
|
|
4273
|
-
return keys.join(",");
|
|
4274
|
-
}
|
|
4275
4294
|
static _splitTextureSettings(props) {
|
|
4276
4295
|
let settings = {};
|
|
4277
4296
|
for (let v of ResourceManager._texSettingKeys){
|
|
@@ -4286,7 +4305,6 @@ class ResourceManager {
|
|
|
4286
4305
|
return settings;
|
|
4287
4306
|
}
|
|
4288
4307
|
destroy() {
|
|
4289
|
-
this._caches.clear();
|
|
4290
4308
|
this._loaders.clear();
|
|
4291
4309
|
}
|
|
4292
4310
|
getLoader(ext) {
|
|
@@ -4298,47 +4316,32 @@ class ResourceManager {
|
|
|
4298
4316
|
this._loaders.set(ext, loader);
|
|
4299
4317
|
}
|
|
4300
4318
|
}
|
|
4301
|
-
loadAsset({ url, buffer, ext, onProgress, ...props }) {
|
|
4319
|
+
loadAsset({ url, buffer, ext, path, resourcePath, dracoPath, manager, onProgress, ...props }) {
|
|
4302
4320
|
return new Promise((resolve, reject)=>{
|
|
4303
|
-
const
|
|
4321
|
+
const sel = ext || url && ResourceManager.extension(url) || "";
|
|
4304
4322
|
const texSettings = ResourceManager._splitTextureSettings(props);
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4323
|
+
if (this._loaders.has(sel)) {
|
|
4324
|
+
this._loaders.get(sel).load({
|
|
4325
|
+
url,
|
|
4326
|
+
buffer,
|
|
4327
|
+
texSettings,
|
|
4328
|
+
path,
|
|
4329
|
+
resourcePath,
|
|
4330
|
+
dracoPath,
|
|
4331
|
+
manager,
|
|
4332
|
+
onProgress,
|
|
4333
|
+
onLoad: resolve,
|
|
4334
|
+
onError: (e)=>{
|
|
4335
|
+
console.error(`${url} not exist`, e);
|
|
4336
|
+
}
|
|
4337
|
+
});
|
|
4309
4338
|
} else {
|
|
4310
|
-
|
|
4311
|
-
this._caches.set(key, file);
|
|
4312
|
-
resolve(file);
|
|
4313
|
-
};
|
|
4314
|
-
const sel = ext || ext_;
|
|
4315
|
-
if (this._loaders.has(sel)) {
|
|
4316
|
-
this._loaders.get(sel).load({
|
|
4317
|
-
url,
|
|
4318
|
-
buffer,
|
|
4319
|
-
texSettings,
|
|
4320
|
-
onProgress,
|
|
4321
|
-
onLoad,
|
|
4322
|
-
onError: (e)=>{
|
|
4323
|
-
console.error(`${url} not exist`, e);
|
|
4324
|
-
}
|
|
4325
|
-
});
|
|
4326
|
-
} else {
|
|
4327
|
-
reject("ResourceManager.loadAsset: missing loader for " + url);
|
|
4328
|
-
}
|
|
4339
|
+
reject("ResourceManager.loadAsset: missing loader for " + url);
|
|
4329
4340
|
}
|
|
4330
4341
|
});
|
|
4331
4342
|
}
|
|
4332
|
-
constructor(
|
|
4333
|
-
this.path = "";
|
|
4334
|
-
this.resourcePath = "";
|
|
4335
|
-
this.dracoPath = "";
|
|
4336
|
-
this._caches = new Map();
|
|
4343
|
+
constructor(){
|
|
4337
4344
|
this._loaders = new Map();
|
|
4338
|
-
this.path = props.path;
|
|
4339
|
-
this.resourcePath = props.resourcePath;
|
|
4340
|
-
this.dracoPath = props.dracoPath;
|
|
4341
|
-
this.loadingManager = props.loadingManager;
|
|
4342
4345
|
}
|
|
4343
4346
|
}
|
|
4344
4347
|
ResourceManager._texSettingKeys = [
|
|
@@ -4547,9 +4550,6 @@ class Viewer extends EventEmitter {
|
|
|
4547
4550
|
static getMesh(node, name, group = false) {
|
|
4548
4551
|
return Viewer._getObjectValue(node.userData.meshes, name, group);
|
|
4549
4552
|
}
|
|
4550
|
-
get instanceId() {
|
|
4551
|
-
return this._instanceId;
|
|
4552
|
-
}
|
|
4553
4553
|
get root() {
|
|
4554
4554
|
return this._root;
|
|
4555
4555
|
}
|
|
@@ -4601,6 +4601,9 @@ class Viewer extends EventEmitter {
|
|
|
4601
4601
|
set targetFrameRate(v) {
|
|
4602
4602
|
this._targetFrameRate = Math.max(0.001, v);
|
|
4603
4603
|
}
|
|
4604
|
+
get instanceId() {
|
|
4605
|
+
return this._instanceId;
|
|
4606
|
+
}
|
|
4604
4607
|
get loadingManager() {
|
|
4605
4608
|
return this._loadingManager;
|
|
4606
4609
|
}
|
|
@@ -4734,7 +4737,7 @@ class Viewer extends EventEmitter {
|
|
|
4734
4737
|
}
|
|
4735
4738
|
}
|
|
4736
4739
|
loadAsset(props) {
|
|
4737
|
-
return this._resourceManager.loadAsset(props);
|
|
4740
|
+
return this._resourceManager.loadAsset(Object.assign(Object.assign({}, this._defaultProps), props));
|
|
4738
4741
|
}
|
|
4739
4742
|
getLoader(ext) {
|
|
4740
4743
|
return this._resourceManager.getLoader(ext);
|
|
@@ -4930,6 +4933,7 @@ class Viewer extends EventEmitter {
|
|
|
4930
4933
|
factor: 1
|
|
4931
4934
|
};
|
|
4932
4935
|
this._orientation = exports.Orientation.AUTO;
|
|
4936
|
+
this._defaultProps = {};
|
|
4933
4937
|
this._running = false;
|
|
4934
4938
|
this._rootRotated = false;
|
|
4935
4939
|
this._time = 0;
|
|
@@ -4963,17 +4967,18 @@ class Viewer extends EventEmitter {
|
|
|
4963
4967
|
this._renderer.shadowMap.enabled = !!shadows;
|
|
4964
4968
|
this._renderer.shadowMap.type = typeof shadows === "boolean" ? three.PCFSoftShadowMap : shadows;
|
|
4965
4969
|
this._renderer.info.autoReset = false;
|
|
4966
|
-
|
|
4967
|
-
this.
|
|
4968
|
-
path,
|
|
4969
|
-
resourcePath,
|
|
4970
|
-
dracoPath,
|
|
4971
|
-
loadingManager
|
|
4972
|
-
});
|
|
4970
|
+
this._resourceManager = new ResourceManager();
|
|
4971
|
+
this._loadingManager = new three.LoadingManager(loader.onLoad, loader.onProgress, loader.onError);
|
|
4973
4972
|
this._taskManager = new TaskManager(tasker.onComplete, tasker.onProgress, tasker.onError);
|
|
4974
4973
|
this._componentManager = new ComponentManager(this);
|
|
4975
4974
|
this._pluginManager = new PluginManager(this);
|
|
4976
4975
|
this._tweenManager = new TweenManager();
|
|
4976
|
+
this._defaultProps = {
|
|
4977
|
+
path,
|
|
4978
|
+
resourcePath,
|
|
4979
|
+
dracoPath,
|
|
4980
|
+
manager: this._loadingManager
|
|
4981
|
+
};
|
|
4977
4982
|
this._autoResize = autoResize;
|
|
4978
4983
|
this._targetFrameRate = targetFrameRate;
|
|
4979
4984
|
this._input = new DeviceInput(this);
|
|
@@ -5567,6 +5572,149 @@ class PerformanceMonitorPlugin extends Plugin {
|
|
|
5567
5572
|
}
|
|
5568
5573
|
}
|
|
5569
5574
|
|
|
5575
|
+
class DropFilePlugin extends Plugin {
|
|
5576
|
+
install() {
|
|
5577
|
+
document.addEventListener("dragover", this._onDrogOver);
|
|
5578
|
+
document.addEventListener("drop", this._onDrop);
|
|
5579
|
+
}
|
|
5580
|
+
uninstall() {
|
|
5581
|
+
document.removeEventListener("dragover", this._onDrogOver);
|
|
5582
|
+
document.removeEventListener("drop", this._onDrop);
|
|
5583
|
+
}
|
|
5584
|
+
_loadItemList(items) {
|
|
5585
|
+
getFilesFromItemList(items, (files, filesMap, dirs)=>{
|
|
5586
|
+
this._loadFiles(files, filesMap, dirs);
|
|
5587
|
+
});
|
|
5588
|
+
}
|
|
5589
|
+
_loadFiles(files, filesMap, dirs) {
|
|
5590
|
+
if (files.length > 0) {
|
|
5591
|
+
filesMap = filesMap || createFilesMap(files);
|
|
5592
|
+
dirs = dirs || [];
|
|
5593
|
+
this.viewer.loadingManager.setURLModifier((url)=>{
|
|
5594
|
+
url = url.replace(/^(\.?\/)/, ''); // remove './'
|
|
5595
|
+
const file = filesMap[url];
|
|
5596
|
+
if (file) {
|
|
5597
|
+
console.log('Loading', url);
|
|
5598
|
+
return URL.createObjectURL(file);
|
|
5599
|
+
}
|
|
5600
|
+
return url;
|
|
5601
|
+
});
|
|
5602
|
+
for(let i = 0; i < files.length; i++){
|
|
5603
|
+
this._loadFile(files[i], dirs[i]);
|
|
5604
|
+
}
|
|
5605
|
+
}
|
|
5606
|
+
}
|
|
5607
|
+
_loadFile(file, dir = "") {
|
|
5608
|
+
const filename = file.name;
|
|
5609
|
+
const ext = ResourceManager.extension(filename);
|
|
5610
|
+
if (this._extensions.some((v)=>v === ext)) {
|
|
5611
|
+
const reader = new FileReader();
|
|
5612
|
+
reader.addEventListener("progress", (event)=>{
|
|
5613
|
+
const size = '(' + Math.floor(event.total / 1000) + ' KB)';
|
|
5614
|
+
const progress = Math.floor(event.loaded / event.total * 100) + '%';
|
|
5615
|
+
console.log('Loading', filename, size, progress);
|
|
5616
|
+
});
|
|
5617
|
+
const loadCallback = (asset)=>{
|
|
5618
|
+
asset.userData.ext = ext;
|
|
5619
|
+
this._onLoad && this._onLoad(asset);
|
|
5620
|
+
};
|
|
5621
|
+
if ([
|
|
5622
|
+
"fbx",
|
|
5623
|
+
"gltf",
|
|
5624
|
+
"glb"
|
|
5625
|
+
].some((v)=>v === ext)) {
|
|
5626
|
+
reader.addEventListener("load", (event)=>{
|
|
5627
|
+
this.viewer.loadAsset({
|
|
5628
|
+
ext,
|
|
5629
|
+
buffer: event.target.result,
|
|
5630
|
+
resourcePath: dir
|
|
5631
|
+
}).then(loadCallback);
|
|
5632
|
+
}, false);
|
|
5633
|
+
reader.readAsArrayBuffer(file);
|
|
5634
|
+
} else {
|
|
5635
|
+
reader.addEventListener("load", (event)=>{
|
|
5636
|
+
this.viewer.loadAsset({
|
|
5637
|
+
ext,
|
|
5638
|
+
url: event.target.result
|
|
5639
|
+
}).then(loadCallback);
|
|
5640
|
+
}, false);
|
|
5641
|
+
reader.readAsDataURL(file);
|
|
5642
|
+
}
|
|
5643
|
+
}
|
|
5644
|
+
}
|
|
5645
|
+
constructor({ onLoad, extension = [
|
|
5646
|
+
"glb",
|
|
5647
|
+
"gltf",
|
|
5648
|
+
"fbx",
|
|
5649
|
+
"hdr"
|
|
5650
|
+
] } = {}){
|
|
5651
|
+
super();
|
|
5652
|
+
this._onDrogOver = (e)=>{
|
|
5653
|
+
e.preventDefault();
|
|
5654
|
+
e.dataTransfer.dropEffect = "copy";
|
|
5655
|
+
};
|
|
5656
|
+
this._onDrop = (e)=>{
|
|
5657
|
+
e.preventDefault();
|
|
5658
|
+
if (e.dataTransfer.types[0] === "text/plain") return; // Outliner drop
|
|
5659
|
+
if (e.dataTransfer.items) {
|
|
5660
|
+
this._loadItemList(e.dataTransfer.items);
|
|
5661
|
+
} else {
|
|
5662
|
+
this._loadFiles(e.dataTransfer.files);
|
|
5663
|
+
}
|
|
5664
|
+
};
|
|
5665
|
+
this._onLoad = onLoad;
|
|
5666
|
+
this._extensions = Array.isArray(extension) ? extension : [
|
|
5667
|
+
extension
|
|
5668
|
+
];
|
|
5669
|
+
}
|
|
5670
|
+
}
|
|
5671
|
+
function createFilesMap(files) {
|
|
5672
|
+
const map = {};
|
|
5673
|
+
for(let i = 0; i < files.length; i++){
|
|
5674
|
+
const file = files[i];
|
|
5675
|
+
map[file.name] = file;
|
|
5676
|
+
}
|
|
5677
|
+
return map;
|
|
5678
|
+
}
|
|
5679
|
+
function getFilesFromItemList(items, onDone) {
|
|
5680
|
+
let itemsCount = 0;
|
|
5681
|
+
let itemsTotal = 0;
|
|
5682
|
+
const dirs = [];
|
|
5683
|
+
const files = [];
|
|
5684
|
+
const filesMap = {};
|
|
5685
|
+
function onEntryHandled() {
|
|
5686
|
+
itemsCount++;
|
|
5687
|
+
if (itemsCount === itemsTotal) {
|
|
5688
|
+
onDone(files, filesMap, dirs);
|
|
5689
|
+
}
|
|
5690
|
+
}
|
|
5691
|
+
function handleEntry(entry, dir = "") {
|
|
5692
|
+
if (entry.isDirectory) {
|
|
5693
|
+
const reader = entry.createReader();
|
|
5694
|
+
reader.readEntries((entries)=>{
|
|
5695
|
+
for(let i = 0; i < entries.length; i++){
|
|
5696
|
+
handleEntry(entries[i], dir + "/" + entry.name + "/");
|
|
5697
|
+
}
|
|
5698
|
+
onEntryHandled();
|
|
5699
|
+
});
|
|
5700
|
+
} else if (entry.isFile) {
|
|
5701
|
+
entry.file((file)=>{
|
|
5702
|
+
files.push(file);
|
|
5703
|
+
filesMap[entry.fullPath.slice(1)] = file;
|
|
5704
|
+
dirs.push(dir);
|
|
5705
|
+
onEntryHandled();
|
|
5706
|
+
});
|
|
5707
|
+
}
|
|
5708
|
+
itemsTotal++;
|
|
5709
|
+
}
|
|
5710
|
+
for(let i = 0; i < items.length; i++){
|
|
5711
|
+
const item = items[i];
|
|
5712
|
+
if (item.kind === 'file') {
|
|
5713
|
+
handleEntry(item.webkitGetAsEntry());
|
|
5714
|
+
}
|
|
5715
|
+
}
|
|
5716
|
+
}
|
|
5717
|
+
|
|
5570
5718
|
exports.AnimationCurve = AnimationCurve;
|
|
5571
5719
|
exports.Box = Box;
|
|
5572
5720
|
exports.BoxProjectionPlugin = BoxProjectionPlugin;
|
|
@@ -5575,6 +5723,7 @@ exports.CinestationBrain = CinestationBrain;
|
|
|
5575
5723
|
exports.Component = Component;
|
|
5576
5724
|
exports.DebugPlugin = DebugPlugin;
|
|
5577
5725
|
exports.DeviceInput = DeviceInput;
|
|
5726
|
+
exports.DropFilePlugin = DropFilePlugin;
|
|
5578
5727
|
exports.Easing = Easing;
|
|
5579
5728
|
exports.EnvironmentPlugin = EnvironmentPlugin;
|
|
5580
5729
|
exports.EventEmitter = EventEmitter;
|