starling-framework
Version:
A fast, productive library for 2D cross-platform development.
122 lines (106 loc) • 3.89 kB
JavaScript
// Class: starling.assets.DataLoader
var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this
$global.Object.defineProperty(exports, "__esModule", {value: true});
var __map_reserved = {};
// Imports
var $hxClasses = require("./../../hxClasses_stub").default;
var $hxEnums = require("./../../hxEnums_stub").default;
var $import = require("./../../import_stub").default;
function starling_utils_Execute() {return require("./../../starling/utils/Execute");}
function openfl_net_URLRequest() {return $import(require("openfl/net/URLRequest"));}
function openfl_net_URLLoader() {return $import(require("openfl/net/URLLoader"));}
function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");}
function haxe_ds_ObjectMap() {return require("./../../haxe/ds/ObjectMap");}
// Constructor
var DataLoader = function() {
this._urlLoaders = new (haxe_ds_ObjectMap().default)();
}
// Meta
DataLoader.__name__ = "starling.assets.DataLoader";
DataLoader.__isInterface__ = false;
DataLoader.prototype = {
load: function(url,onComplete,onError,onProgress) {
var _gthis = this;
var loader = null;
var message;
var mimeType = null;
var httpStatus = 0;
var request = null;
var cleanup = null;
var onHttpResponseStatus = null;
var onLoadError = null;
var onLoadProgress = null;
var onLoadComplete = null;
cleanup = function() {
loader.removeEventListener("ioError",onLoadError);
loader.removeEventListener("securityError",onLoadError);
loader.removeEventListener(DataLoader.HTTP_RESPONSE_STATUS,onHttpResponseStatus);
loader.removeEventListener("progress",onLoadProgress);
loader.removeEventListener("complete",onLoadComplete);
_gthis._urlLoaders.remove(loader);
};
onHttpResponseStatus = function(event) {
httpStatus = event.status;
mimeType = DataLoader.getHttpHeader(event.responseHeaders,"Content-Type");
};
onLoadError = function(event1) {
cleanup();
message = event1.type + " - " + event1.text;
(starling_utils_Execute().default).execute(onError,[message]);
};
onLoadProgress = function(event2) {
if(onProgress != null && event2.bytesTotal > 0) {
onProgress(event2.bytesLoaded / event2.bytesTotal);
}
};
onLoadComplete = function(event3) {
cleanup();
if(httpStatus < 400) {
(starling_utils_Execute().default).execute(onComplete,[loader.data,mimeType]);
} else {
(starling_utils_Execute().default).execute(onError,["Unexpected HTTP status '" + httpStatus + "'. URL: " + request.url]);
}
};
request = new (openfl_net_URLRequest().default)(url);
loader = new (openfl_net_URLLoader().default)();
loader.dataFormat = "binary";
loader.addEventListener("ioError",onLoadError);
loader.addEventListener("securityError",onLoadError);
loader.addEventListener(DataLoader.HTTP_RESPONSE_STATUS,onHttpResponseStatus);
loader.addEventListener("progress",onLoadProgress);
loader.addEventListener("complete",onLoadComplete);
loader.load(request);
this._urlLoaders.set(loader,true);
},
close: function() {
var loader = this._urlLoaders.keys();
while(loader.hasNext()) {
var loader1 = loader.next();
try {
loader1.close();
} catch( e ) {
var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e;
}
}
this._urlLoaders = new (haxe_ds_ObjectMap().default)();
}
};
DataLoader.prototype.__class__ = DataLoader.prototype.constructor = $hxClasses["starling.assets.DataLoader"] = DataLoader;
// Init
// Statics
DataLoader.getHttpHeader = function(headers,headerName) {
if(headers != null) {
var _g = 0;
while(_g < headers.length) {
var header = headers[_g];
++_g;
if(header.name == headerName) {
return header.value;
}
}
}
return null;
}
DataLoader.HTTP_RESPONSE_STATUS = "httpResponseStatus"
// Export
exports.default = DataLoader;