openfl
Version:
A fast, productive library for 2D cross-platform development.
322 lines (304 loc) • 12.9 kB
JavaScript
// Class: openfl.net.FileReference
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;
var $bind = require("./../../bind_stub").default;
var $extend = require("./../../extend_stub").default;
function openfl_events_EventDispatcher() {return require("./../../openfl/events/EventDispatcher");}
function StringTools() {return require("./../../StringTools");}
function openfl_events_Event() {return require("./../../openfl/events/Event");}
function haxe_io_Path() {return require("./../../haxe/io/Path");}
function openfl_net_URLLoader() {return require("./../../openfl/net/URLLoader");}
function lime_ui_FileDialog() {return require("./../../lime/ui/FileDialog");}
function lime_ui_FileDialogType() {return require("./../../lime/ui/FileDialogType");}
function openfl_utils__$ByteArray_ByteArray_$Impl_$() {return require("./../../openfl/utils/_ByteArray/ByteArray_Impl_");}
function openfl_events_IOErrorEvent() {return require("./../../openfl/events/IOErrorEvent");}
function openfl_utils_ByteArrayData() {return require("./../../openfl/utils/ByteArrayData");}
function Std() {return require("./../../Std");}
function Type() {return require("./../../Type");}
function ValueType() {return require("./../../ValueType");}
function Reflect() {return require("./../../Reflect");}
function openfl_net_URLRequestHeader() {return require("./../../openfl/net/URLRequestHeader");}
function haxe_Timer() {return require("./../../haxe/Timer");}
function openfl_events_DataEvent() {return require("./../../openfl/events/DataEvent");}
// Constructor
var FileReference = function() {
this.__pendingDownload = false;
(openfl_events_EventDispatcher().default).call(this);
this.__inputControl = window.document.createElement("input");
this.__inputControl.setAttribute("type","file");
this.__inputControl.onclick = function(e) {
e.cancelBubble = true;
e.stopPropagation();
};
}
// Meta
FileReference.__name__ = "openfl.net.FileReference";
FileReference.__isInterface__ = false;
FileReference.__super__ = (openfl_events_EventDispatcher().default);
FileReference.prototype = $extend((openfl_events_EventDispatcher().default).prototype, {
browse: function(typeFilter) {
var _gthis = this;
this.__data = null;
this.__path = null;
var filter = null;
if(typeFilter != null) {
var filters = [];
var _g = 0;
while(_g < typeFilter.length) {
var type = typeFilter[_g];
++_g;
filters.push((StringTools().default).replace((StringTools().default).replace(type.extension,"*.","."),";",","));
}
filter = filters.join(",");
}
if(filter != null) {
this.__inputControl.setAttribute("accept",filter);
} else {
this.__inputControl.removeAttribute("accept");
}
this.__inputControl.onchange = function() {
if(_gthis.__inputControl.files.length == 0) {
_gthis.dispatchEvent(new (openfl_events_Event().default)("cancel"));
return;
}
var file = _gthis.__inputControl.files[0];
var tmp = new Date(file.lastModified);
_gthis.modificationDate = tmp;
_gthis.creationDate = _gthis.get_modificationDate();
_gthis.size = file.size;
var tmp1 = (haxe_io_Path().default).extension(file.name);
_gthis.type = "." + tmp1;
_gthis.name = (haxe_io_Path().default).withoutDirectory(file.name);
_gthis.__path = file.name;
_gthis.dispatchEvent(new (openfl_events_Event().default)("select"));
};
this.__inputControl.click();
return true;
},
cancel: function() {
if(this.__urlLoader != null) {
this.__urlLoader.close();
}
},
download: function(request,defaultFileName) {
this.__data = null;
this.__path = null;
this.__urlLoader = new (openfl_net_URLLoader().default)();
this.__urlLoader.dataFormat = "binary";
this.__urlLoader.addEventListener("open",$bind(this,this.urlLoader_onOpen));
this.__urlLoader.addEventListener("complete",$bind(this,this.urlLoader_download_onComplete));
this.__urlLoader.addEventListener("ioError",$bind(this,this.urlLoader_onIOError));
this.__urlLoader.addEventListener("progress",$bind(this,this.urlLoader_onProgress));
this.__urlLoader.load(request);
var saveFileDialog = new (lime_ui_FileDialog().default)();
saveFileDialog.onCancel.add($bind(this,this.saveFileDialog_onCancel));
saveFileDialog.onSelect.add($bind(this,this.saveFileDialog_onSelect));
saveFileDialog.browse((lime_ui_FileDialogType().default).SAVE,defaultFileName != null ? (haxe_io_Path().default).extension(defaultFileName) : null,defaultFileName);
this.__pendingDownload = true;
this.__pendingDefaultFileName = defaultFileName;
},
load: function() {
var _gthis = this;
var file = this.__inputControl.files[0];
var reader = new FileReader();
reader.onload = function(evt) {
_gthis.data = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).fromArrayBuffer(evt.target.result);
_gthis.openFileDialog_onComplete();
};
reader.onerror = function(evt1) {
_gthis.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError"));
};
reader.readAsArrayBuffer(file);
},
save: function(data,defaultFileName) {
this.__data = null;
this.__path = null;
if(data == null) {
return;
}
if(((data) instanceof (openfl_utils_ByteArrayData().default))) {
this.__data = data;
} else {
var this1 = new (openfl_utils_ByteArrayData().default)(0);
this.__data = this1;
this.__data.writeUTFBytes((Std().default).string(data));
}
var saveFileDialog = new (lime_ui_FileDialog().default)();
saveFileDialog.onCancel.add($bind(this,this.saveFileDialog_onCancel));
saveFileDialog.onSave.add($bind(this,this.saveFileDialog_onSave));
saveFileDialog.save((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).toBytes(this.__data),defaultFileName != null ? (haxe_io_Path().default).extension(defaultFileName) : null,defaultFileName);
},
upload: function(request,uploadDataFieldName,testUpload) {
if(testUpload == null) {
testUpload = false;
}
if(uploadDataFieldName == null) {
uploadDataFieldName = "Filedata";
}
var _gthis = this;
var file = this.__inputControl.files[0];
var reader = new FileReader();
reader.onload = function(evt) {
var fileBytes = (openfl_utils__$ByteArray_ByteArray_$Impl_$().default).fromArrayBuffer(evt.target.result);
_gthis.__uploadFileBytes(request,uploadDataFieldName,fileBytes);
};
reader.onerror = function(evt1) {
_gthis.dispatchEvent(new (openfl_events_IOErrorEvent().default)("ioError"));
};
},
__uploadFileBytes: function(request,uploadDataFieldName,fileBytes) {
var hasUrlVars = (Type().default).typeof(request.data) == (ValueType().default).TObject;
if(hasUrlVars && request.method == "GET") {
var getVariables = "";
var fields = (Reflect().default).fields(request.data);
var startsWith = request.url.lastIndexOf("?") == -1 ? "?" : "&";
var _g = 0;
while(_g < fields.length) {
var field = fields[_g];
++_g;
var value = (Reflect().default).field(request.data,field);
getVariables += getVariables.length == 0 ? startsWith : "&";
getVariables += field + "=" + value;
}
request.url += getVariables;
}
var boundary = "----------KM7GI3GI3ae0GI3ae0cH2KM7Ef1cH2";
var this1 = new (openfl_utils_ByteArrayData().default)(0);
var requestData = this1;
if(hasUrlVars && request.method == "POST") {
var fields1 = (Reflect().default).fields(request.data);
var _g1 = 0;
while(_g1 < fields1.length) {
var field1 = fields1[_g1];
++_g1;
var value1 = (Reflect().default).field(request.data,field1);
requestData.writeUTFBytes("--" + boundary + "\r\n");
requestData.writeUTFBytes("Content-Disposition: form-data; name=\"" + field1 + "\"\r\n\r\n");
requestData.writeUTFBytes((Std().default).string(value1));
requestData.writeUTFBytes("\r\n");
}
}
requestData.writeUTFBytes("--" + boundary + "\r\n");
requestData.writeUTFBytes("Content-Disposition: form-data; name=\"Filename\"\r\n\r\n");
requestData.writeUTFBytes(this.get_name());
requestData.writeUTFBytes("\r\n");
requestData.writeUTFBytes("--" + boundary + "\r\n");
requestData.writeUTFBytes("Content-Disposition: form-data; name=\"" + uploadDataFieldName + "\"; ");
requestData.writeUTFBytes("filename=\"" + this.get_name() + "\"\r\n");
requestData.writeUTFBytes("Content-Type: application/octet-stream\r\n\r\n");
requestData.writeBytes(fileBytes,0,0);
requestData.writeUTFBytes("\r\n");
requestData.writeUTFBytes("--" + boundary + "\r\n");
requestData.writeUTFBytes("Content-Disposition: form-data; name=\"Upload\"\r\n\r\n");
requestData.writeUTFBytes("Submit Query");
requestData.writeUTFBytes("\r\n");
requestData.writeUTFBytes("--" + boundary + "--\r\n");
request.data = requestData;
request.method = "POST";
request.contentType = "multipart/form-data; boundary=" + boundary;
request.requestHeaders = [new (openfl_net_URLRequestHeader().default)("Accept","text/*"),new (openfl_net_URLRequestHeader().default)("Cache-Control","no-cache")];
var urlLoader = new (openfl_net_URLLoader().default)();
urlLoader.dataFormat = "binary";
urlLoader.addEventListener("open",$bind(this,this.urlLoader_onOpen));
urlLoader.addEventListener("complete",$bind(this,this.urlLoader_upload_onComplete));
urlLoader.addEventListener("httpResponseStatus",$bind(this,this.urlLoader_upload_onHttpResponseStatus));
urlLoader.addEventListener("httpStatus",$bind(this,this.urlLoader_upload_onHttpStatus));
urlLoader.addEventListener("progress",$bind(this,this.urlLoader_onProgress));
urlLoader.addEventListener("ioError",$bind(this,this.urlLoader_onIOError));
urlLoader.load(request);
},
openFileDialog_onCancel: function() {
this.dispatchEvent(new (openfl_events_Event().default)("cancel"));
},
openFileDialog_onComplete: function() {
this.dispatchEvent(new (openfl_events_Event().default)("complete"));
},
openFileDialog_onSelect: function(path) {
this.name = (haxe_io_Path().default).withoutDirectory(path);
this.__path = path;
this.dispatchEvent(new (openfl_events_Event().default)("select"));
},
saveFileDialog_onCancel: function() {
this.dispatchEvent(new (openfl_events_Event().default)("cancel"));
},
saveFileDialog_onSave: function(path) {
var _gthis = this;
(haxe_Timer().default).delay(function() {
_gthis.dispatchEvent(new (openfl_events_Event().default)("complete"));
},1);
},
saveFileDialog_onSelect: function(path) {
this.dispatchEvent(new (openfl_events_Event().default)("select"));
},
urlLoader_download_onComplete: function(event) {
if(((this.__urlLoader.data) instanceof (openfl_utils_ByteArrayData().default))) {
this.__data = this.__urlLoader.data;
} else {
var this1 = new (openfl_utils_ByteArrayData().default)(0);
this.__data = this1;
this.__data.writeUTFBytes((Std().default).string(this.__urlLoader.data));
}
if(this.__pendingDownload) {
var saveFileDialog = new (lime_ui_FileDialog().default)();
saveFileDialog.save((openfl_utils__$ByteArray_ByteArray_$Impl_$().default).toBytes(this.__data),this.__pendingDefaultFileName != null ? (haxe_io_Path().default).extension(this.__pendingDefaultFileName) : null,this.__pendingDefaultFileName);
this.__pendingDownload = false;
this.__pendingDefaultFileName = null;
}
this.dispatchEvent(event);
},
urlLoader_upload_onHttpResponseStatus: function(event) {
this.dispatchEvent(event);
},
urlLoader_upload_onHttpStatus: function(event) {
if(event.status == 200) {
this.dispatchEvent(new (openfl_events_Event().default)("complete"));
} else if(event.status != 0) {
this.dispatchEvent(event);
}
},
urlLoader_upload_onComplete: function(event) {
var urlLoader = event.currentTarget;
this.dispatchEvent(new (openfl_events_DataEvent().default)("uploadCompleteData",false,false,urlLoader.data));
},
urlLoader_onIOError: function(event) {
if(this.__pendingDownload) {
this.__pendingDownload = false;
this.__pendingDefaultFileName = null;
}
this.dispatchEvent(event);
},
urlLoader_onProgress: function(event) {
this.dispatchEvent(event);
},
urlLoader_onOpen: function(event) {
this.dispatchEvent(event);
},
get_creationDate: function() {
return this.creationDate;
},
get_modificationDate: function() {
return this.modificationDate;
},
get_name: function() {
return this.name;
},
get_size: function() {
return this.size;
},
get_type: function() {
return this.type;
},
get_extension: function() {
return this.extension;
}
});
FileReference.prototype.__class__ = FileReference.prototype.constructor = $hxClasses["openfl.net.FileReference"] = FileReference;
// Init
// Statics
// Export
exports.default = FileReference;