对于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." };