/**
@name Edo.controls.FileUpload
@class
@typeName FileUpload
@description flash对象
@extend Edo.controls.Control
*/
Edo.controls.FileUpload = function(){
if(typeof SWFUpload == 'undefined'){
throw new Error("请引入swfupload.js");
}
/**
@name Edo.controls.FileUpload#filequeued
@event
@description 文件选择成功事件
@property {Object} upload 文件上传对象
@property {String} filename 文件名
@property {Object} file 文件对象
*/
/**
@name Edo.controls.FileUpload#filequeueerror
@event
@description 文件选择出错事件
@property {Object} upload 文件上传对象
@property {Object} file 文件对象
@property {Object} errorCode 错误码
@property {String} message 错误描述
*/
/**
@name Edo.controls.FileUpload#filestart
@event
@description 上传开始事件
@property {Object} upload 文件上传对象
*/
/**
@name Edo.controls.FileUpload#fileerror
@event
@description 上传失败事件
@property {Object} upload 文件上传对象
*/
/**
@name Edo.controls.FileUpload#filesuccess
@event
@description 上传成功事件
@property {Object} upload 文件上传对象
@property {Object} file
@property {String} serverData 返回的数据字符串
*/
Edo.controls.FileUpload.superclass.constructor.call(this);
}
Edo.controls.FileUpload.extend(Edo.controls.Control,{
/**
@name Edo.controls.FileUpload#swfUploadConfig
@property
@type Object
@description swfupload配置对象(请参考标准swfupload)
*/
swfUploadConfig: null,
/**
@name Edo.controls.FileUpload#buttonWidth
@property
@type Number
@default 69
@description 上传按钮宽度
*/
buttonWidth: 69,
/**
@name Edo.controls.FileUpload#autoClear
@property
@type Boolean
@default true
@description 上传后自动清空文本
*/
autoClear: true,
/**
@name Edo.controls.FileUpload#textVisible
@property
@type Boolean
@default true
@description 是否显示文本
*/
textVisible: true,
elCls: 'e-fileupload e-div',
getInnerHtml: function(sb){
var id = this.id+"$place";
var inputid = this.id+"$input";
var w = this.realWidth - this.buttonWidth;
sb[sb.length] = ' ';
},
createChildren: function(){
Edo.controls.FileUpload.superclass.createChildren.a(this, arguments);
var id = this.id+"$place";
var c = Edo.apply({
//upload_url: "upload.aspx",
//file_post_name: "resume_file",
//flash_url : "../../source/res/swfupload.swf",
button_image_url : "XPButtonUploadText_61x22.png",
//button_placeholder_id : "spanButtonPlaceholder",
button_width: 61,
button_height: 22,
// Flash file settings
file_size_limit : "64",
file_types : "*.jpg;*.gif;*.png;*.bmp",
file_types_description : "All Files",
file_upload_limit : "0",
file_queue_limit : "0",
file_queued_handler : this._onFileQueued.bind(this),
file_queue_error_handler: this._onFileQueueError.bind(this),
upload_start_handler: this._onFileStart.bind(this),
upload_error_handler: this._onFileError.bind(this),
upload_success_handler: this._onFileSuccess.bind(this)
}, this.swfUploadConfig);
c.button_placeholder_id = id;
this.upload = new SWFUpload(c);
var inputid = this.id+"$input";
this.inputField = document.getElementById(inputid);
},
_onFileQueued: function(file){
var txt = this.inputField;
var txtFileName = txt.value;
if(txtFileName && txtFileName != file.name){
//this.upload.cancelUpload();
}
txt.value = file.name;
var e = {
type: 'filequeued',
source: this,
upload: this.upload,
filename: file.name,
file: file
};
this.fireEvent('filequeued', e);
},
_onFileQueueError: function(file, errorCode, message){
var e = {
type: 'filequeueerror',
source: this,
upload: this.upload,
file: file,
errorCode: errorCode,
message: message
};
this.fireEvent('filequeueerror', e);
},
_onFileStart: function(){
var e = {
type: 'filestart',
source: this,
upload: this.upload
};
this.fireEvent('filestart', e);
},
_onFileError: function(file, errorCode, message){
var e = {
type: 'fileerror',
source: this,
upload: this.upload,
file: file,
errorCode: errorCode,
message: message
};
this.fireEvent('fileerror', e);
},
_onFileSuccess: function(file, serverData){
if(this.autoClear) this.inputField.value = '';
var e = {
type: 'filesuccess',
source: this,
upload: this.upload,
file: file,
serverData: serverData
};
this.fireEvent('filesuccess', e);
},
syncSize: function(){
Edo.controls.FileUpload.superclass.syncSize.call(this);
if(this.textVisible){
var w = this.realWidth - this.buttonWidth;
Edo.util.Dom.setWidth(this.inputField, w);
this.inputField.style.display = '';
}else{
this.inputField.style.display = 'none';
}
}
});
Edo.controls.FileUpload.regType('fileupload');