* Fork - LGPL
* <script type="text/javascript">
*/
-
+
+// as we use this in bootstrap.
+Roo.namespace('Roo.form');
/**
* @class Roo.form.Action
* Internal Class used to handle form actions
* @param {Roo.form.BasicForm} el The form element or its id
* @param {Object} config Configuration options
*/
+
// define the action interface
* Server Validation Failed
* @const
*/
- Roo.form.Action.SERVER_INVALID = 'server';
+Roo.form.Action.SERVER_INVALID = 'server';
/**
* Connect to Server Failed
* @const
// default connection failure
failure : function(response){
+
this.response = response;
this.failureType = Roo.form.Action.CONNECT_FAILURE;
this.form.afterAction(this, false);
Roo.extend(Roo.form.Action.Submit, Roo.form.Action, {
type : 'submit',
+ haveProgress : false,
+ uploadComplete : false,
+ // uploadProgress indicator.
uploadProgress : function()
{
- var dlg = this;
- if (!dlg.haveProgress) {
- Roo.MessageBox.progress("Uploading", "Uploading");
+ if (!this.form.progressUrl) {
+ return;
}
- if (dlg.uploadComplete) {
+
+ if (!this.haveProgress) {
+ Roo.MessageBox.progress("Uploading", "Uploading");
+ }
+ if (this.uploadComplete) {
Roo.MessageBox.hide();
return;
}
- dlg.haveProgress = true;
+
+ this.haveProgress = true;
var uid = this.form.findField('UPLOAD_IDENTIFIER').getValue();
- Pman.request({
- url : this.form.progressUrl,
- params: {
- id : uid
- },
- method: 'GET',
- success : function(data){
+
+ var c = new Roo.data.Connection();
+ c.request({
+ url : this.form.progressUrl,
+ params: {
+ id : uid
+ },
+ method: 'GET',
+ success : function(req){
//console.log(data);
- if (dlg.uploadComplete) {
+ var rdata = false;
+ var edata;
+ try {
+ rdata = Roo.decode(req.responseText)
+ } catch (e) {
+ Roo.log("Invalid data from server..");
+ Roo.log(edata);
+ return;
+ }
+ if (!rdata || !rdata.success) {
+ Roo.log(rdata);
+ Roo.MessageBox.alert(Roo.encode(rdata));
+ return;
+ }
+ var data = rdata.data;
+
+ if (this.uploadComplete) {
Roo.MessageBox.hide();
return;
- }
+ }
- if (data){
- Roo.MessageBox.updateProgress(data.bytes_uploaded/data.bytes_total,
+ if (data){
+ Roo.MessageBox.updateProgress(data.bytes_uploaded/data.bytes_total,
Math.floor((data.bytes_total - data.bytes_uploaded)/1000) + 'k remaining'
- );
- }
- dlg.uploadProgress.defer(2000,dlg);
- },
- failure: function(data) {
- // console.log('fail');
- // console.log(data);
- }
- })
+ );
+ }
+ this.uploadProgress.defer(2000,this);
+ },
+
+ failure: function(data) {
+ Roo.log('progress url failed ');
+ Roo.log(data);
+ },
+ scope : this
+ });
},
var method = this.getMethod();
var isPost = method == 'POST';
if(o.clientValidation === false || this.form.isValid()){
- if (this.form.progressUrl && this.form.findField( 'UPLOAD_IDENTIFIER')) {
- // use upload progress bar..
- this.findField('UPLOAD_IDENTIFIER').setValue(
+
+ if (this.form.progressUrl) {
+ this.form.findField('UPLOAD_IDENTIFIER').setValue(
(new Date() * 1) + '' + Math.random());
-
- }
-
+ }
Roo.Ajax.request(Roo.apply(this.createCallback(), {
url:this.getUrl(!isPost),
method: method,
params:isPost ? this.getParams() : null,
- isUpload: this.form.fileUpload
+ isUpload: this.form.fileUpload,
+ formData : this.form.formData
}));
+
+ this.uploadProgress();
}else if (o.clientValidation !== false){ // client validation failed
this.failureType = Roo.form.Action.CLIENT_INVALID;
}
},
- success : function(response){
+ success : function(response)
+ {
+ this.uploadComplete= true;
+ if (this.haveProgress) {
+ Roo.MessageBox.hide();
+ }
+
+
var result = this.processResponse(response);
if(result === true || result.success){
this.form.afterAction(this, true);
}
this.form.afterAction(this, false);
},
-
+ failure : function(response)
+ {
+ this.uploadComplete= true;
+ if (this.haveProgress) {
+ Roo.MessageBox.hide();
+ }
+
+ this.response = response;
+ this.failureType = Roo.form.Action.CONNECT_FAILURE;
+ this.form.afterAction(this, false);
+ },
+
handleResponse : function(response){
if(this.form.errorReader){
var rs = this.form.errorReader.read(response);
type : 'load',
run : function(){
+
Roo.Ajax.request(Roo.apply(
this.createCallback(), {
method:this.getMethod(),
},
success : function(response){
+
var result = this.processResponse(response);
if(result === true || !result.success || !result.data){
this.failureType = Roo.form.Action.LOAD_FAILURE;