对于UploadDialog报错x-buttons...getEl()为空或不是对象,是由于UploadDialog与EXT3不兼容的缘故,修改之后就又可以使用了。
请命名为Ext.ux.UploadDialog.packed.js:
Ext.namespace("Ext.ux.Utils");
Ext.ux.Utils.EventQueue = function(handler, scope) {
if (!handler) {
throw "Handler is required."
}
this.handler = handler;
this.scope = scope || window;
this.queue = [];
this.is_processing = false;
this.postEvent = function(event, data) {
data = data || null;
this.queue.push( {
event :event,
data :data
});
if (!this.is_processing) {
this.process()
}
};
this.flushEventQueue = function() {
this.queue = []
}, this.process = function() {
while (this.queue.length > 0) {
this.is_processing = true;
var event_data = this.queue.shift();
this.handler.call(this.scope, event_data.event, event_data.data)
}
this.is_processing = false
}
};
Ext.ux.Utils.FSA = function(initial_state, trans_table, trans_table_scope) {
this.current_state = initial_state;
this.trans_table = trans_table || {};
this.trans_table_scope = trans_table_scope || window;
Ext.ux.Utils.FSA.superclass.constructor.call(this, this.processEvent, this)
};
Ext
.extend(
Ext.ux.Utils.FSA,
Ext.ux.Utils.EventQueue,
{
current_state :null,
trans_table :null,
trans_table_scope :null,
state : function() {
return this.current_state
},
processEvent : function(event, data) {
var transitions = this
.currentStateEventTransitions(event);
if (!transitions) {
throw "State '" + this.current_state
+ "' has no transition for event '" + event
+ "'."
}
for ( var i = 0, len = transitions.length; i < len; i++) {
var transition = transitions[i];
var predicate = transition.predicate
|| transition.p || true;
var action = transition.action || transition.a
|| Ext.emptyFn;
var new_state = transition.state || transition.s
|| this.current_state;
var scope = transition.scope
|| this.trans_table_scope;
if (this.computePredicate(predicate, scope, data,
event)) {
this.callAction(action, scope, data, event);
this.current_state = new_state;
return
}
}
throw "State '" + this.current_state
+ "' has no transition for event '" + event
+ "' in current context"
},
currentStateEventTransitions : function(event) {
return this.trans_table[this.current_state] ? this.trans_table[this.current_state][event] || false
: false
},
computePredicate : function(predicate, scope, data, event) {
var result = false;
switch (Ext.type(predicate)) {
case "function":
result = predicate.call(scope, data, event, this);
break;
case "array":
result = true;
for ( var i = 0, len = predicate.length; result
&& (i < len); i++) {
if (Ext.type(predicate[i]) == "function") {
result = predicate[i].call(scope, data,
event, this)
} else {
throw [ "Predicate: ", predicate[i],
' is not callable in "',
this.current_state,
'" state for event "', event ]
.join("")
}
}
break;
case "boolean":
result = predicate;
break;
default:
throw [ "Predicate: ", predicate,
' is not callable in "',
this.current_state, '" state for event "',
event ].join("")
}
return result
},
callAction : function(action, scope, data, event) {
switch (Ext.type(action)) {
case "array":
for ( var i = 0, len = action.length; i < len; i++) {
if (Ext.type(action[i]) == "function") {
action[i].call(scope, data, event, this)
} else {
throw [ "Action: ", action[i],
' is not callable in "',
this.current_state,
'" state for event "', event ]
.join("")
}
}
break;
case "function":
action.call(scope, data, event, this);
break;
default:
throw [ "Action: ", action,
' is not callable in "',
this.current_state, '" state for event "',
event ].join("")
}
}
});
Ext.namespace("Ext.ux.UploadDialog");
Ext.ux.UploadDialog.BrowseButton = Ext
.extend(
Ext.Button,
{
input_name :"file",
input_file :null,
original_handler :null,
original_scope :null,
initComponent : function() {
Ext.ux.UploadDialog.BrowseButton.superclass.initComponent
.call(this);
this.original_handler = this.handler || null;
this.original_scope = this.scope || window;
this.handler = null;
this.scope = null
},
onRender : function(ct, position) {
Ext.ux.UploadDialog.BrowseButton.superclass.onRender
.call(this, ct, position);
this.createInputFile()
},
createInputFile : function() {
var button_container = this.el.child(".x-btn-mc");
button_container.position("relative");
this.input_file = Ext.DomHelper
.append(
button_container,
{
tag :"input",
type :"file",
size :1,
name :this.input_name
|| Ext.id(this.el),
style :"position: absolute; display: block; border: none; cursor: pointer"
}, true);
var button_box = button_container.getBox();
this.input_file.setStyle("font-size",
(button_box.width * 0.5) + "px");
var input_box = this.input_file.getBox();
var adj = {
x :3,
y :3
};
if (Ext.isIE) {
adj = {
x :0,
y :3
}
}
this.input_file.setLeft(button_box.width
- input_box.width + adj.x + "px");
this.input_file.setTop(button_box.height
- input_box.height + adj.y + "px");
this.input_file.setOpacity(0);
if (this.handleMouseEvents) {
this.input_file.on("mouseover", this.onMouseOver,
this);
this.input_file.on("mousedown", this.onMouseDown,
this)
}
if (this.tooltip) {
if (typeof this.tooltip == "object") {
Ext.QuickTips.register(Ext.apply( {
target :this.input_file
}, this.tooltip))
} else {
this.input_file.dom[this.tooltipType] = this.tooltip
}
}
this.input_file.on("change", this.onInputFileChange,
this);
this.input_file.on("click", function(e) {
e.stopPropagation()
})
},
detachInputFile : function(no_create) {
var result = this.input_file;
no_create = no_create || false;
if (typeof this.tooltip == "object") {
Ext.QuickTips.unregister(this.input_file)
} else {
this.input_file.dom[this.tooltipType] = null
}
this.input_file.removeAllListeners();
this.input_file = null;
if (!no_create) {
this.createInputFile()
}
return result
},
getInputFile : function() {
return this.input_file
},
disable : function() {
Ext.ux.UploadDialog.BrowseButton.superclass.disable
.call(this);
this.input_file.dom.disabled = true
},
enable : function() {
Ext.ux.UploadDialog.BrowseButton.superclass.enable
.call(this);
this.input_file.dom.disabled = false
},
destroy : function() {
var input_file = this.detachInputFile(true);
input_file.remove();
input_file = null;
Ext.ux.UploadDialog.BrowseButton.superclass.destroy
.call(this)
},
onInputFileChange : function() {
if (this.original_handler) {
this.original_handler.call(this.original_scope,
this)
}
}
});
Ext.ux.UploadDialog.TBBrowseButton = Ext.extend(
Ext.ux.UploadDialog.BrowseButton, {
hideParent :true,
onDestroy : function() {
Ext.ux.UploadDialog.TBBrowseButton.superclass.onDestroy
.call(this);
if (this.container) {
this.container.remove()
}
}
});
Ext.ux.UploadDialog.FileRecord = Ext.data.Record.create( [ {
name :"filename"
}, {
name :"state",
type :"int"
}, {
name :"note"
}, {
name :"input_element"
} ]);
Ext.ux.UploadDialog.FileRecord.STATE_QUEUE = 0;
Ext.ux.UploadDialog.FileRecord.STATE_FINISHED = 1;
Ext.ux.UploadDialog.FileRecord.STATE_FAILED = 2;
Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING = 3;
Ext.ux.UploadDialog.Dialog = function(config) {
var default_config = {
border :false,
width :450,
height :300,
minWidth :450,
minHeight :300,
plain :true,
constrainHeader :true,
draggable :true,
closable :true,
maximizable :false,
minimizable :false,
resizable :true,
autoDestroy :true,
closeAction :"hide",
title :this.i18n.title,
cls :"ext-ux-uploaddialog-dialog",
url :"",
base_params : {},
permitted_extensions : [],
reset_on_hide :true,
allow_close_on_upload :false,
upload_autostart :false,
post_var_name :"file"
};
config = Ext.applyIf(config || {}, default_config);
config.layout = "absolute";
Ext.ux.UploadDialog.Dialog.superclass.constructor.call(this, config)
};
Ext
.extend(
Ext.ux.UploadDialog.Dialog,
Ext.Window,
{
fsa :null,
state_tpl :null,
form :null,
grid_panel :null,
progress_bar :null,
is_uploading :false,
initial_queued_count :0,
upload_frame :null,
initComponent : function() {
Ext.ux.UploadDialog.Dialog.superclass.initComponent
.call(this);
var tt = {
created : {
"window-render" : [ {
action : [ this.createForm,
this.createProgressBar,
this.createGrid ],
state :"rendering"
} ],
destroy : [ {
action :this.flushEventQueue,
state :"destroyed"
} ]
},
rendering : {
"grid-render" : [ {
action : [ this.fillToolbar,
this.updateToolbar ],
state :"ready"
} ],
destroy : [ {
action :this.flushEventQueue,
state :"destroyed"
} ]
},
ready : {
"file-selected" : [
{
predicate : [
this.fireFileTestEvent,
this.isPermittedFile ],
action :this.addFileToUploadQueue,
state :"adding-file"
}, {} ],
"grid-selection-change" : [ {
action :this.updateToolbar
} ],
"remove-files" : [ {
action : [ this.removeFiles,
this.fireFileRemoveEvent ]
} ],
"reset-queue" : [ {
action : [ this.resetQueue,
this.fireResetQueueEvent ]
} ],
"start-upload" : [
{
predicate :this.hasUnuploadedFiles,
action : [
this.setUploadingFlag,
this.saveInitialQueuedCount,
this.updateToolbar,
this.updateProgressBar,
this.prepareNextUploadTask,
this.fireUploadStartEvent ],
state :"uploading"
}, {} ],
"stop-upload" : [ {} ],
hide : [
{
predicate : [ this.isNotEmptyQueue,
this.getResetOnHide ],
action : [ this.resetQueue,
this.fireResetQueueEvent ]
}, {} ],
destroy : [ {
action :this.flushEventQueue,
state :"destroyed"
} ]
},
"adding-file" : {
"file-added" : [
{
predicate :this.isUploading,
action : [
this.incInitialQueuedCount,
this.updateProgressBar,
this.fireFileAddEvent ],
state :"uploading"
},
{
predicate :this.getUploadAutostart,
action : [ this.startUpload,
this.fireFileAddEvent ],
state :"ready"
},
{
action : [ this.updateToolbar,
this.fireFileAddEvent ],
state :"ready"
} ]
},
uploading : {
"file-selected" : [
{
predicate : [
this.fireFileTestEvent,
this.isPermittedFile ],
action :this.addFileToUploadQueue,
state :"adding-file"
}, {} ],
"grid-selection-change" : [ {} ],
"start-upload" : [ {} ],
"stop-upload" : [
{
predicate :this.hasUnuploadedFiles,
action : [ this.resetUploadingFlag,
this.abortUpload,
this.updateToolbar,
this.updateProgressBar,
this.fireUploadStopEvent ],
state :"ready"
},
{
action : [
this.resetUploadingFlag,
this.abortUpload,
this.updateToolbar,
this.updateProgressBar,
this.fireUploadStopEvent,
this.fireUploadCompleteEvent ],
state :"ready"
} ],
"file-upload-start" : [ {
action : [ this.uploadFile,
this.findUploadFrame,
this.fireFileUploadStartEvent ]
} ],
"file-upload-success" : [
{
predicate :this.hasUnuploadedFiles,
action : [ this.resetUploadFrame,
this.updateRecordState,
this.updateProgressBar,
this.prepareNextUploadTask,
this.fireUploadSuccessEvent ]
},
{
action : [
this.resetUploadFrame,
this.resetUploadingFlag,
this.updateRecordState,
this.updateToolbar,
this.updateProgressBar,
this.fireUploadSuccessEvent,
this.fireUploadCompleteEvent ],
state :"ready"
} ],
"file-upload-error" : [
{
predicate :this.hasUnuploadedFiles,
action : [ this.resetUploadFrame,
this.updateRecordState,
this.updateProgressBar,
this.prepareNextUploadTask,
this.fireUploadErrorEvent ]
},
{
action : [
this.resetUploadFrame,
this.resetUploadingFlag,
this.updateRecordState,
this.updateToolbar,
this.updateProgressBar,
this.fireUploadErrorEvent,
this.fireUploadCompleteEvent ],
state :"ready"
} ],
"file-upload-failed" : [
{
predicate :this.hasUnuploadedFiles,
action : [ this.resetUploadFrame,
this.updateRecordState,
this.updateProgressBar,
this.prepareNextUploadTask,
this.fireUploadFailedEvent ]
},
{
action : [
this.resetUploadFrame,
this.resetUploadingFlag,
this.updateRecordState,
this.updateToolbar,
this.updateProgressBar,
this.fireUploadFailedEvent,
this.fireUploadCompleteEvent ],
state :"ready"
} ],
hide : [
{
predicate :this.getResetOnHide,
action : [ this.stopUpload,
this.repostHide ]
}, {} ],
destroy : [
{
predicate :this.hasUnuploadedFiles,
action : [ this.resetUploadingFlag,
this.abortUpload,
this.fireUploadStopEvent,
this.flushEventQueue ],
state :"destroyed"
},
{
action : [
this.resetUploadingFlag,
this.abortUpload,
this.fireUploadStopEvent,
this.fireUploadCompleteEvent,
this.flushEventQueue ],
state :"destroyed"
} ]
},
destroyed : {}
};
this.fsa = new Ext.ux.Utils.FSA("created", tt, this);
this.addEvents( {
filetest :true,
fileadd :true,
fileremove :true,
resetqueue :true,
uploadsuccess :true,
uploaderror :true,
uploadfailed :true,
uploadstart :true,
uploadstop :true,
uploadcomplete :true,
fileuploadstart :true
});
this.on("render", this.onWindowRender, this);
this.on("beforehide", this.onWindowBeforeHide, this);
this.on("hide", this.onWindowHide, this);
this.on("destroy", this.onWindowDestroy, this);
this.state_tpl = new Ext.Template(
"<div class='ext-ux-uploaddialog-state ext-ux-uploaddialog-state-{state}'> </div>")
.compile()
},
createForm : function() {
this.form = Ext.DomHelper
.append(
this.body,
{
tag :"form",
method :"post",
action :this.url,
style :"position: absolute; left: -100px; top: -100px; width: 100px; height: 100px"
})
},
createProgressBar : function() {
this.progress_bar = this.add(new Ext.ProgressBar( {
x :0,
y :0,
anchor :"0",
value :0,
text :this.i18n.progress_waiting_text
}))
},
createGrid : function() {
var store = new Ext.data.Store( {
proxy :new Ext.data.MemoryProxy( []),
reader :new Ext.data.JsonReader( {},
Ext.ux.UploadDialog.FileRecord),
sortInfo : {
field :"state",
direction :"DESC"
},
pruneModifiedRecords :true
});
var cm = new Ext.grid.ColumnModel( [
{
header :this.i18n.state_col_title,
width :this.i18n.state_col_width,
resizable :false,
dataIndex :"state",
sortable :true,
renderer :this.renderStateCell
.createDelegate(this)
},
{
header :this.i18n.filename_col_title,
width :this.i18n.filename_col_width,
dataIndex :"filename",
sortable :true,
renderer :this.renderFilenameCell
.createDelegate(this)
},
{
header :this.i18n.note_col_title,
width :this.i18n.note_col_width,
dataIndex :"note",
sortable :true,
renderer :this.renderNoteCell
.createDelegate(this)
} ]);
this.grid_panel = new Ext.grid.GridPanel( {
ds :store,
cm :cm,
x :0,
y :22,
anchor :"0 -22",
border :true,
viewConfig : {
autoFill :true,
forceFit :true
},
bbar :new Ext.Toolbar()
});
this.grid_panel.on("render", this.onGridRender, this);
this.add(this.grid_panel);
this.grid_panel.getSelectionModel().on(
"selectionchange", this.onGridSelectionChange,
this)
},
fillToolbar : function() {
var tb = this.grid_panel.getBottomToolbar();
tb.x_buttons = {};
tb.x_buttons.add = tb
.addItem(new Ext.ux.UploadDialog.TBBrowseButton(
{
input_name :this.post_var_name,
text :this.i18n.add_btn_text,
tooltip :this.i18n.add_btn_tip,
iconCls :"ext-ux-uploaddialog-addbtn",
handler :this.onAddButtonFileSelected,
scope :this
}));
tb.x_buttons.remove = tb.addButton( {
text :this.i18n.remove_btn_text,
tooltip :this.i18n.remove_btn_tip,
iconCls :"ext-ux-uploaddialog-removebtn",
handler :this.onRemoveButtonClick,
scope :this
});
tb.x_buttons.reset = tb.addButton( {
text :this.i18n.reset_btn_text,
tooltip :this.i18n.reset_btn_tip,
iconCls :"ext-ux-uploaddialog-resetbtn",
handler :this.onResetButtonClick,
scope :this
});
tb.add("-");
tb.x_buttons.upload = tb.addButton( {
text :this.i18n.upload_btn_start_text,
tooltip :this.i18n.upload_btn_start_tip,
iconCls :"ext-ux-uploaddialog-uploadstartbtn",
handler :this.onUploadButtonClick,
scope :this
});
tb.add("-");
tb.x_buttons.indicator = tb
.addItem(new Ext.Toolbar.Item(
Ext.DomHelper
.append(
tb.getEl(),
{
id:'indicatorId',
tag :"div",
cls :"ext-ux-uploaddialog-indicator-stoped",
html :" "
})));
tb.add("->");
tb.x_buttons.close = tb.addButton( {
text :this.i18n.close_btn_text,
tooltip :this.i18n.close_btn_tip,
handler :this.onCloseButtonClick,
scope :this
})
},
renderStateCell : function(data, cell, record, row_index,
column_index, store) {
return this.state_tpl.apply( {
state :data
})
},
renderFilenameCell : function(data, cell, record,
row_index, column_index, store) {
var view = this.grid_panel.getView();
var f = function() {
try {
Ext.fly(view.getCell(row_index, column_index))
.child(".x-grid3-cell-inner").dom.qtip = data
} catch (e) {
}
};
f.defer(1000);
return data
},
renderNoteCell : function(data, cell, record, row_index,
column_index, store) {
var view = this.grid_panel.getView();
var f = function() {
try {
Ext.fly(view.getCell(row_index, column_index))
.child(".x-grid3-cell-inner").dom.qtip = data
} catch (e) {
}
};
f.defer(1000);
return data
},
getFileExtension : function(filename) {
var result = null;
var parts = filename.split(".");
if (parts.length > 1) {
result = parts.pop()
}
return result
},
isPermittedFileType : function(filename) {
var result = true;
if (this.permitted_extensions.length > 0) {
result = this.permitted_extensions.indexOf(this
.getFileExtension(filename)) != -1
}
return result
},
isPermittedFile : function(browse_btn) {
var result = false;
var filename = browse_btn.getInputFile().dom.value;
if (this.isPermittedFileType(filename)) {
result = true
} else {
Ext.Msg
.alert(
this.i18n.error_msgbox_title,
String
.format(
this.i18n.err_file_type_not_permitted,
filename,
this.permitted_extensions
.join(this.i18n.permitted_extensions_join_str)));
result = false
}
return result
},
fireFileTestEvent : function(browse_btn) {
return this.fireEvent("filetest", this, browse_btn
.getInputFile().dom.value) !== false
},
addFileToUploadQueue : function(browse_btn) {
var input_file = browse_btn.detachInputFile();
input_file.appendTo(this.form);
input_file.setStyle("width", "100px");
input_file.dom.disabled = true;
var store = this.grid_panel.getStore();
store.add(new Ext.ux.UploadDialog.FileRecord( {
state :Ext.ux.UploadDialog.FileRecord.STATE_QUEUE,
filename :input_file.dom.value,
note :this.i18n.note_queued_to_upload,
input_element :input_file
}));
this.fsa.postEvent("file-added", input_file.dom.value)
},
fireFileAddEvent : function(filename) {
this.fireEvent("fileadd", this, filename)
},
updateProgressBar : function() {
if (this.is_uploading) {
var queued = this.getQueuedCount(true);
var value = 1 - queued / this.initial_queued_count;
this.progress_bar.updateProgress(value, String
.format(this.i18n.progress_uploading_text,
this.initial_queued_count - queued,
this.initial_queued_count))
} else {
this.progress_bar.updateProgress(0,
this.i18n.progress_waiting_text)
}
},
updateToolbar : function() {
var tb = this.grid_panel.getBottomToolbar();
if (this.is_uploading) {
tb.x_buttons.remove.disable();
tb.x_buttons.reset.disable();
tb.x_buttons.upload.enable();
if (!this.getAllowCloseOnUpload()) {
tb.x_buttons.close.disable()
}
Ext
.fly(tb.x_buttons.indicator.getEl())
.replaceClass(
"ext-ux-uploaddialog-indicator-stoped",
"ext-ux-uploaddialog-indicator-processing");
tb.x_buttons.upload
.setIconClass("ext-ux-uploaddialog-uploadstopbtn");
tb.x_buttons.upload
.setText(this.i18n.upload_btn_stop_text);
/*
tb.x_buttons.upload.getEl().child(
tb.x_buttons.upload.buttonSelector).dom[tb.x_buttons.upload.tooltipType] = this.i18n.upload_btn_stop_tip
*/
} else {
tb.x_buttons.remove.enable();
tb.x_buttons.reset.enable();
tb.x_buttons.close.enable();
Ext
.fly(tb.x_buttons.indicator.getEl())
.replaceClass(
"ext-ux-uploaddialog-indicator-processing",
"ext-ux-uploaddialog-indicator-stoped");
tb.x_buttons.upload
.setIconClass("ext-ux-uploaddialog-uploadstartbtn");
tb.x_buttons.upload
.setText(this.i18n.upload_btn_start_text);
/*
tb.x_buttons.upload.getEl().child(
tb.x_buttons.upload.buttonSelector).dom[tb.x_buttons.upload.tooltipType] = this.i18n.upload_btn_start_tip;
*/
if (this.getQueuedCount() > 0) {
tb.x_buttons.upload.enable()
} else {
tb.x_buttons.upload.disable()
}
if (this.grid_panel.getSelectionModel()
.hasSelection()) {
tb.x_buttons.remove.enable()
} else {
tb.x_buttons.remove.disable()
}
if (this.grid_panel.getStore().getCount() > 0) {
tb.x_buttons.reset.enable()
} else {
tb.x_buttons.reset.disable()
}
}
},
saveInitialQueuedCount : function() {
this.initial_queued_count = this.getQueuedCount()
},
incInitialQueuedCount : function() {
this.initial_queued_count++
},
setUploadingFlag : function() {
this.is_uploading = true
},
resetUploadingFlag : function() {
this.is_uploading = false
},
prepareNextUploadTask : function() {
var store = this.grid_panel.getStore();
var record = null;
store
.each( function(r) {
if (!record
&& r.get("state") == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) {
record = r
} else {
r.get("input_element").dom.disabled = true
}
});
record.get("input_element").dom.disabled = false;
record
.set(
"state",
Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING);
record.set("note", this.i18n.note_processing);
record.commit();
this.fsa.postEvent("file-upload-start", record)
},
fireUploadStartEvent : function() {
this.fireEvent("uploadstart", this)
},
removeFiles : function(file_records) {
var store = this.grid_panel.getStore();
for ( var i = 0, len = file_records.length; i < len; i++) {
var r = file_records[i];
r.get("input_element").remove();
store.remove(r)
}
},
fireFileRemoveEvent : function(file_records) {
for ( var i = 0, len = file_records.length; i < len; i++) {
this.fireEvent("fileremove", this, file_records[i]
.get("filename"))
}
},
resetQueue : function() {
var store = this.grid_panel.getStore();
store.each( function(r) {
r.get("input_element").remove()
});
store.removeAll()
},
fireResetQueueEvent : function() {
this.fireEvent("resetqueue", this)
},
uploadFile : function(record) {
Ext.Ajax.request( {
url :this.url,
params :this.base_params || this.baseParams
|| this.params,
method :"POST",
form :this.form,
isUpload :true,
success :this.onAjaxSuccess,
failure :this.onAjaxFailure,
scope :this,
record :record
})
},
fireFileUploadStartEvent : function(record) {
this.fireEvent("fileuploadstart", this, record
.get("filename"))
},
updateRecordState : function(data) {
if ("success" in data.response && data.response.success) {
data.record
.set(
"state",
Ext.ux.UploadDialog.FileRecord.STATE_FINISHED);
data.record.set("note", data.response.message
|| data.response.error
|| this.i18n.note_upload_success)
} else {
data.record
.set(
"state",
Ext.ux.UploadDialog.FileRecord.STATE_FAILED);
data.record.set("note", data.response.message
|| data.response.error
|| this.i18n.note_upload_error)
}
data.record.commit()
},
fireUploadSuccessEvent : function(data) {
this.fireEvent("uploadsuccess", this, data.record
.get("filename"), data.response)
},
fireUploadErrorEvent : function(data) {
this.fireEvent("uploaderror", this, data.record
.get("filename"), data.response)
},
fireUploadFailedEvent : function(data) {
this.fireEvent("uploadfailed", this, data.record
.get("filename"))
},
fireUploadCompleteEvent : function() {
this.fireEvent("uploadcomplete", this)
},
findUploadFrame : function() {
this.upload_frame = Ext.getBody().child(
"iframe.x-hidden:last")
},
resetUploadFrame : function() {
this.upload_frame = null
},
removeUploadFrame : function() {
if (this.upload_frame) {
this.upload_frame.removeAllListeners();
this.upload_frame.dom.src = "about:blank";
this.upload_frame.remove()
}
this.upload_frame = null
},
abortUpload : function() {
this.removeUploadFrame();
var store = this.grid_panel.getStore();
var record = null;
store
.each( function(r) {
if (r.get("state") == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) {
record = r;
return false
}
});
record.set("state",
Ext.ux.UploadDialog.FileRecord.STATE_FAILED);
record.set("note", this.i18n.note_aborted);
record.commit()
},
fireUploadStopEvent : function() {
this.fireEvent("uploadstop", this)
},
repostHide : function() {
this.fsa.postEvent("hide")
},
flushEventQueue : function() {
this.fsa.flushEventQueue()
},
onWindowRender : function() {
this.fsa.postEvent("window-render")
},
onWindowBeforeHide : function() {
return this.isUploading() ? this
.getAllowCloseOnUpload() : true
},
onWindowHide : function() {
this.fsa.postEvent("hide")
},
onWindowDestroy : function() {
this.fsa.postEvent("destroy")
},
onGridRender : function() {
this.fsa.postEvent("grid-render")
},
onGridSelectionChange : function() {
this.fsa.postEvent("grid-selection-change")
},
onAddButtonFileSelected : function(btn) {
this.fsa.postEvent("file-selected", btn)
},
onUploadButtonClick : function() {
if (this.is_uploading) {
this.fsa.postEvent("stop-upload")
} else {
this.fsa.postEvent("start-upload")
}
},
onRemoveButtonClick : function() {
var selections = this.grid_panel.getSelectionModel()
.getSelections();
this.fsa.postEvent("remove-files", selections)
},
onResetButtonClick : function() {
this.fsa.postEvent("reset-queue")
},
onCloseButtonClick : function() {
this[this.closeAction].call(this)
},
onAjaxSuccess : function(response, options) {
var json_response = {
success :false,
error :this.i18n.note_upload_error
};
try {
var rt = response.responseText;
var filter = rt
.match(/^<[^>]+>((?:.|\n)*)<\/[^>]+>$/);
if (filter) {
rt = filter[1]
}
json_response = Ext.util.JSON.decode(rt)
} catch (e) {
}
var data = {
record :options.record,
response :json_response
};
if ("success" in json_response && json_response.success) {
this.fsa.postEvent("file-upload-success", data)
} else {
this.fsa.postEvent("file-upload-error", data)
}
},
onAjaxFailure : function(response, options) {
var data = {
record :options.record,
response : {
success :false,
error :this.i18n.note_upload_failed
}
};
this.fsa.postEvent("file-upload-failed", data)
},
startUpload : function() {
this.fsa.postEvent("start-upload")
},
stopUpload : function() {
this.fsa.postEvent("stop-upload")
},
getUrl : function() {
return this.url
},
setUrl : function(url) {
this.url = url
},
getBaseParams : function() {
return this.base_params
},
setBaseParams : function(params) {
this.base_params = params
},
getUploadAutostart : function() {
return this.upload_autostart
},
setUploadAutostart : function(value) {
this.upload_autostart = value
},
getAllowCloseOnUpload : function() {
return this.allow_close_on_upload
},
setAllowCloseOnUpload : function(value) {
this.allow_close_on_upload
},
getResetOnHide : function() {
return this.reset_on_hide
},
setResetOnHide : function(value) {
this.reset_on_hide = value
},
getPermittedExtensions : function() {
return this.permitted_extensions
},
setPermittedExtensions : function(value) {
this.permitted_extensions = value
},
isUploading : function() {
return this.is_uploading
},
isNotEmptyQueue : function() {
return this.grid_panel.getStore().getCount() > 0
},
getQueuedCount : function(count_processing) {
var count = 0;
var store = this.grid_panel.getStore();
store
.each( function(r) {
if (r.get("state") == Ext.ux.UploadDialog.FileRecord.STATE_QUEUE) {
count++
}
if (count_processing
&& r.get("state") == Ext.ux.UploadDialog.FileRecord.STATE_PROCESSING) {
count++
}
});
return count
},
hasUnuploadedFiles : function() {
return this.getQueuedCount() > 0
}
});
var p = Ext.ux.UploadDialog.Dialog.prototype;
p.i18n = {
title :"File upload dialog",
state_col_title :"State",
state_col_width :70,
filename_col_title :"Filename",
filename_col_width :230,
note_col_title :"Note",
note_col_width :150,
add_btn_text :"Add",
add_btn_tip :"Add file into upload queue.",
remove_btn_text :"Remove",
remove_btn_tip :"Remove file from upload queue.",
reset_btn_text :"Reset",
reset_btn_tip :"Reset queue.",
upload_btn_start_text :"Upload",
upload_btn_stop_text :"Abort",
upload_btn_start_tip :"Upload queued files to the server.",
upload_btn_stop_tip :"Stop upload.",
close_btn_text :"Close",
close_btn_tip :"Close the dialog.",
progress_waiting_text :"Waiting...",
progress_uploading_text :"Uploading: {0} of {1} files complete.",
error_msgbox_title :"Error",
permitted_extensions_join_str :",",
err_file_type_not_permitted :"Selected file extension isn't permitted.<br/>Please select files with following extensions: {1}",
note_queued_to_upload :"Queued for upload.",
note_processing :"Uploading...",
note_upload_failed :"Server is unavailable or internal server error occured.",
note_upload_success :"OK.",
note_upload_error :"Upload error.",
note_aborted :"Aborted by user."
};