src/viewer/scene/utils/LoadingManager.js
class LoadingManager {
constructor(onLoad, onProgress, onError) {
this.isLoading = false;
this.itemsLoaded = 0;
this.itemsTotal = 0;
this.urlModifier = undefined;
this.handlers = [];
this.onStart = undefined;
this.onLoad = onLoad;
this.onProgress = onProgress;
this.onError = onError;
}
itemStart(url) {
this.itemsTotal++;
if (this.isLoading === false) {
if (this.onStart !== undefined) {
this.onStart(url, this.itemsLoaded, this.itemsTotal);
}
}
this.isLoading = true;
}
itemEnd(url) {
this.itemsLoaded++;
if (this.onProgress !== undefined) {
this.onProgress(url, this.itemsLoaded, this.itemsTotal);
}
if (this.itemsLoaded === this.itemsTotal) {
this.isLoading = false;
if (this.onLoad !== undefined) {
this.onLoad();
}
}
}
itemError(url) {
if (this.onError !== undefined) {
this.onError(url);
}
}
resolveURL(url) {
if (this.urlModifier) {
return this.urlModifier(url);
}
return url;
}
setURLModifier(transform) {
this.urlModifier = transform;
return this;
}
addHandler(regex, loader) {
this.handlers.push(regex, loader);
return this;
}
removeHandler(regex) {
const index = this.handlers.indexOf(regex);
if (index !== -1) {
this.handlers.splice(index, 2);
}
return this;
}
getHandler(file) {
for (let i = 0, l = this.handlers.length; i < l; i += 2) {
const regex = this.handlers[i];
const loader = this.handlers[i + 1];
if (regex.global) regex.lastIndex = 0; // see #17920
if (regex.test(file)) {
return loader;
}
}
return null;
}
}
const DefaultLoadingManager = new LoadingManager();
export {DefaultLoadingManager, LoadingManager};