summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorFabio Bas <ctrlaltca@gmail.com>2013-10-21 22:49:05 +0200
committerFabio Bas <ctrlaltca@gmail.com>2013-11-26 11:42:46 +0100
commitdd49f04ffd14333bdc6d0fed9faed7f67bb0441f (patch)
treee1cbb667cc6b63624406db2061da671f74edbcb4 /framework
parentee428a220f62732e14185c76f7a31d9b6ff68710 (diff)
Ajax: clientside events and options
Diffstat (limited to 'framework')
-rw-r--r--framework/Web/Javascripts/source/prado/activecontrols/ajax3.js349
-rw-r--r--framework/Web/Javascripts/source/prado/prado.js33
2 files changed, 185 insertions, 197 deletions
diff --git a/framework/Web/Javascripts/source/prado/activecontrols/ajax3.js b/framework/Web/Javascripts/source/prado/activecontrols/ajax3.js
index 18f01cf6..37941fd4 100644
--- a/framework/Web/Javascripts/source/prado/activecontrols/ajax3.js
+++ b/framework/Web/Javascripts/source/prado/activecontrols/ajax3.js
@@ -1,6 +1,18 @@
Prado.CallbackRequestManager =
{
/**
+ * Callback request target POST field name.
+ */
+ FIELD_CALLBACK_TARGET : 'PRADO_CALLBACK_TARGET',
+ /**
+ * Callback request parameter POST field name.
+ */
+ FIELD_CALLBACK_PARAMETER : 'PRADO_CALLBACK_PARAMETER',
+ /**
+ * Callback request page state field name,
+ */
+ FIELD_CALLBACK_PAGESTATE : 'PRADO_PAGESTATE',
+ /**
* Response redirect header name.
*/
REDIRECT_HEADER : 'X-PRADO-REDIRECT',
@@ -48,19 +60,21 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
this.options = {
RequestTimeOut : 30000, // 30 second timeout.
EnablePageStateUpdate : true,
- HasPriority : true,
CausesValidation : true,
ValidationGroup : null,
PostInputs : true,
type: "POST",
- iscallback: true,
-
- context: this,
- success: this.onSuccess,
+ context: this,
+ success: this.successHandler,
+ error: this.errorHandler,
+ complete: this.completeHandler,
};
jQuery.extend(this.options, options || {});
+
+ if(this.options.onUninitialized)
+ this.options.onUninitialized(this,null);
},
getForm: function()
@@ -68,14 +82,127 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
return jQuery('#PRADO_PAGESTATE').get(0).form;
},
+ /**
+ * Gets the url from the forms that contains the PRADO_PAGESTATE
+ * @return {String} callback url.
+ */
+ getCallbackUrl : function()
+ {
+ return jQuery('#PRADO_PAGESTATE').get(0).form.action;
+ },
+
+ /**
+ * Sets the request parameter
+ * @param {Object} parameter value
+ */
+ setCallbackParameter : function(value)
+ {
+ this.options['CallbackParameter'] = value;
+ },
+
+ /**
+ * @return {Object} request paramater value.
+ */
+ getCallbackParameter : function()
+ {
+ return JSON.stringify(this.options['CallbackParameter']);
+ },
+
+ /**
+ * Sets the callback request timeout.
+ * @param {integer} timeout in milliseconds
+ */
+ setRequestTimeOut : function(timeout)
+ {
+ this.options['RequestTimeOut'] = timeout;
+ },
+
+ /**
+ * @return {integer} request timeout in milliseconds
+ */
+ getRequestTimeOut : function()
+ {
+ return this.options['RequestTimeOut'];
+ },
+
+ /**
+ * Set true to enable validation on callback dispatch.
+ * @param {boolean} true to validate
+ */
+ setCausesValidation : function(validate)
+ {
+ this.options['CausesValidation'] = validate;
+ },
+
+ /**
+ * @return {boolean} validate on request dispatch
+ */
+ getCausesValidation : function()
+ {
+ return this.options['CausesValidation'];
+ },
+
+ /**
+ * Sets the validation group to validate during request dispatch.
+ * @param {string} validation group name
+ */
+ setValidationGroup : function(group)
+ {
+ this.options['ValidationGroup'] = group;
+ },
+
+ /**
+ * @return {string} validation group name.
+ */
+ getValidationGroup : function()
+ {
+ return this.options['ValidationGroup'];
+ },
+
dispatch: function()
{
+ //Logger.info("dispatching request");
+ //trigger tinyMCE to save data.
+ if(typeof tinyMCE != "undefined")
+ tinyMCE.triggerSave();
+
+ if(this.options['CausesValidation'] && typeof(Prado.Validation) != "undefined")
+ {
+ if(!Prado.Validation.validate(this.getForm(), this.options['ValidationGroup'], this))
+ return false;
+ }
+
+ if(this.options.onPreDispatch)
+ this.options.onPreDispatch(this,null);
+
+ // jQuery don't have all these states.. simulate them to avoid breaking old scripts
+ if (this.options.onLoading)
+ this.options.onLoading(this,null);
+ if (this.options.onLoaded)
+ this.options.onLoaded(this,null);
+ if (this.options.onInteractive)
+ this.options.onInteractive(this,null);
+
+ // go!
this.options.data = this.getParameters();
- this.options.url = this.getForm().action;
+ this.options.url = this.getCallbackUrl();
jQuery.ajax(this.options);
},
+ getParameters : function()
+ {
+ var form = this.getForm();
+ var data = {};
+
+ if(typeof(this.options.CallbackParameter) != "undefined")
+ data[Prado.CallbackRequestManager.FIELD_CALLBACK_PARAMETER] = this.getCallbackParameter();
+ if(this.options.EventTarget)
+ data[Prado.CallbackRequestManager.FIELD_CALLBACK_TARGET] = this.options.EventTarget;
+
+ return jQuery(form).serialize() + '&' + jQuery.param(data);
+ },
+
/**
* Extract content from a text by its boundary id.
* Boundaries have this form:
@@ -107,19 +234,44 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
return null;*/
},
- onSuccess: function(data)
+ errorHandler: function(request, textStatus, errorThrown)
+ {
+//null) are "timeout", "error", "abort", and "parsererror"
+ if (this.options.onFailure)
+ this.options.onFailure(this,null);
+ },
+
+ completeHandler: function(request, textStatus)
+ {
+//"success", "notmodified", "error", "timeout", "abort", or "parsererror"
+ if (this.options.onComplete)
+ this.options.onComplete(this,null);
+
+ },
+
+ exceptionHandler: function(e)
+ {
+ if (this.options.onException)
+ this.options.onException(this,null);
+
+ },
+
+ successHandler: function(data, textStatus, request)
{
+ if (this.options.onSuccess)
+ this.options.onSuccess(this,null);
+
this.data = data;
var redirectUrl = this.extractContent(Prado.CallbackRequestManager.REDIRECT_HEADER);
if (redirectUrl)
- document.location.href = redirectUrl;
+ document.location.href = redirectUrl;
/*
if ((this.getHeader('Content-type') || '').match(/^text\/javascript/i))
{
- try
+ try
{
- json = eval('(' + transport.responseText + ')');
- }
+ json = eval('(' + transport.responseText + ')');
+ }
catch (e)
{
if(typeof(json) == "string")
@@ -134,8 +286,8 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
var obj = this;
this.loadAssets(this, data, function()
{
- // try
- // {
+ try
+ {
//Ajax.Responders.dispatch('on' + transport.status, obj, transport, json);
obj.dispatchActions(obj, data);
/*
@@ -147,21 +299,17 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
Prototype.emptyFunction
) (obj, json);
*/
- /*
}
catch (e)
{
- obj.dispatchException(e);
+ obj.exceptionHandler(e);
}
- */
}
);
- }
- catch (e)
- {
- this.dispatchException(e);
- }
+ } catch (e) {
+ this.exceptionHandler(e);
+ }
},
/**
@@ -170,9 +318,8 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
*/
updatePageState : function(request, datain)
{
- //var self = Prado.CallbackRequest;
- var pagestate = $("#"+Prado.RequestManager.FIELD_CALLBACK_PAGESTATE);
- var enabled = request.options.EnablePageStateUpdate && request.options.HasPriority;
+ var pagestate = $("#"+Prado.CallbackRequestManager.FIELD_CALLBACK_PAGESTATE);
+ var enabled = request.options.EnablePageStateUpdate;
var aborted = false; //typeof(self.currentRequest) == 'undefined' || self.currentRequest == null;
if(enabled && !aborted && pagestate)
{
@@ -214,7 +361,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
var data = this.extractContent(Prado.CallbackRequestManager.HIDDENFIELDLIST_HEADER);
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid hidden field list:"+data);
else
@@ -223,7 +370,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
}
},
- /*
+ /*
* Checks which assets are used by the response and ensures they're loaded
*/
loadAssets : function(request, datain, callback)
@@ -264,7 +411,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
this.ScriptLoadFinishedCallback = callback;
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid script list:"+data);
else
@@ -310,7 +457,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
var data = this.extractContent(Prado.CallbackRequestManager.STYLESHEET_HEADER);
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid stylesheet list:"+data);
else
@@ -325,7 +472,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
var data = this.extractContent(Prado.CallbackRequestManager.STYLESHEETLIST_HEADER);
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid stylesheet list:"+data);
else
@@ -342,7 +489,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
this.StyleSheetLoadFinishedCallback = callback;
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid stylesheet list:"+data);
else
@@ -391,7 +538,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
var data = this.extractContent(Prado.CallbackRequestManager.ACTION_HEADER);
if (typeof(data) == "string" && data.length > 0)
{
- json = jQuery.parseJSON(data);
+ json = jQuery.parseJSON(data);
if(typeof(json) != "object")
Logger.warn("Invalid action:"+data);
else
@@ -414,7 +561,7 @@ Prado.CallbackRequest = jQuery.klass(Prado.PostBack, {
catch(e)
{
if(typeof(Logger) != "undefined")
- this.Exception.onException(null,e);
+ this.Exception.exceptionHandler(null,e);
else
debugger;
}
@@ -445,13 +592,6 @@ Prado.CallbackRequest.addPostLoaders = function(ids)
// }
-// try {
-// (this.options['on' + event] || Prototype.emptyFunction)(this, json);
-// Ajax.Responders.dispatch('on' + event, this, transport, json);
-// } catch (e) {
-// this.dispatchException(e);
-// }
-
// /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
// if (event == 'Complete')
// this.transport.onreadystatechange = Prototype.emptyFunction;
@@ -799,135 +939,6 @@ Prado.CallbackRequest.addPostLoaders = function(ids)
// //this.options.parameters = this.options.parameters.toQueryParams();
// }
// },
-
-// /**
-// * Gets the url from the forms that contains the PRADO_PAGESTATE
-// * @return {String} callback url.
-// */
-// getCallbackUrl : function()
-// {
-// return jQuery('#PRADO_PAGESTATE').get(0).form.action;
-// },
-
-// /**
-// * Sets the request parameter
-// * @param {Object} parameter value
-// */
-// setCallbackParameter : function(value)
-// {
-// var requestId = this.id+"__"+this.randomId;
-// this.ActiveControl['CallbackParameter'] = value;
-// Prado.CallbackRequestManager.requests[requestId].ActiveControl['CallbackParameter'] = value;
-// },
-
-// /**
-// * @return {Object} request paramater value.
-// */
-// getCallbackParameter : function()
-// {
-// return Prado.CallbackRequestManager.requests[this.id+"__"+this.randomId].ActiveControl['CallbackParameter'];
-// },
-
-// /**
-// * Sets the callback request timeout.
-// * @param {integer} timeout in milliseconds
-// */
-// setRequestTimeOut : function(timeout)
-// {
-// this.ActiveControl['RequestTimeOut'] = timeout;
-// },
-
-// /**
-// * @return {integer} request timeout in milliseconds
-// */
-// getRequestTimeOut : function()
-// {
-// return this.ActiveControl['RequestTimeOut'];
-// },
-
-// /**
-// * Set true to enable validation on callback dispatch.
-// * @param {boolean} true to validate
-// */
-// setCausesValidation : function(validate)
-// {
-// this.ActiveControl['CausesValidation'] = validate;
-// },
-
-// /**
-// * @return {boolean} validate on request dispatch
-// */
-// getCausesValidation : function()
-// {
-// return this.ActiveControl['CausesValidation'];
-// },
-
-// /**
-// * Sets the validation group to validate during request dispatch.
-// * @param {string} validation group name
-// */
-// setValidationGroup : function(group)
-// {
-// this.ActiveControl['ValidationGroup'] = group;
-// },
-
-// /**
-// * @return {string} validation group name.
-// */
-// getValidationGroup : function()
-// {
-// return this.ActiveControl['ValidationGroup'];
-// },
-
-// /**
-// * Dispatch the callback request.
-// */
-// dispatch : function()
-// {
-// //Logger.info("dispatching request");
-// //trigger tinyMCE to save data.
-// if(typeof tinyMCE != "undefined")
-// tinyMCE.triggerSave();
-
-// if(this.ActiveControl.CausesValidation && typeof(Prado.Validation) != "undefined")
-// {
-// var form = this.ActiveControl.Form || Prado.Validation.getForm();
-// if(Prado.Validation.validate(form,this.ActiveControl.ValidationGroup,this) == false)
-// return false;
-// }
-
-// if(this.ActiveControl.onPreDispatch)
-// this.ActiveControl.onPreDispatch(this,null);
-
-// if(!this.Enabled)
-// return;
-
-// // Opera don't have onLoading/onLoaded state, so, simulate them just
-// // before sending the request.
-// /*
-// if (Prototype.Browser.Opera)
-// {
-// if (this.ActiveControl.onLoading)
-// {
-// this.ActiveControl.onLoading(this,null);
-// Ajax.Responders.dispatch('onLoading',this, this.transport,null);
-// }
-// if (this.ActiveControl.onLoaded)
-// {
-// this.ActiveControl.onLoaded(this,null);
-// Ajax.Responders.dispatch('onLoaded',this, this.transport,null);
-// }
-// }
-// */
-// var result;
-// if(this.ActiveControl.HasPriority)
-// {
-// return Prado.CallbackRequestManager.enqueue(this);
-// //return Prado.CallbackRequest.dispatchPriorityRequest(this);
-// }
-// else
-// return Prado.CallbackRequestManager.dispatchNormalRequest(this);
-// },
// abort : function()
// {
@@ -1110,7 +1121,7 @@ if (typeof(Prado.AssetManagerClass)=="undefined") {
/**
* Load a new asset dynamically into the page.
- * Please not thet loading is asynchronous and therefore you can't assume that
+ * Please not thet loading is asynchronous and therefore you can't assume that
* the asset is loaded and ready when returning from this function.
* @param string url of the asset to load
* @param callback will be called when the asset has loaded (or failed to load)
diff --git a/framework/Web/Javascripts/source/prado/prado.js b/framework/Web/Javascripts/source/prado/prado.js
index d2ff9cb0..14f13858 100644
--- a/framework/Web/Javascripts/source/prado/prado.js
+++ b/framework/Web/Javascripts/source/prado/prado.js
@@ -19,19 +19,6 @@ var Prado =
Prado.RequestManager =
{
- /**
- * Callback request target POST field name.
- */
- FIELD_CALLBACK_TARGET : 'PRADO_CALLBACK_TARGET',
- /**
- * Callback request parameter POST field name.
- */
- FIELD_CALLBACK_PARAMETER : 'PRADO_CALLBACK_PARAMETER',
- /**
- * Callback request page state field name,
- */
- FIELD_CALLBACK_PAGESTATE : 'PRADO_PAGESTATE',
-
FIELD_POSTBACK_TARGET : 'PRADO_POSTBACK_TARGET',
FIELD_POSTBACK_PARAMETER : 'PRADO_POSTBACK_PARAMETER',
@@ -52,9 +39,7 @@ Prado.RequestManager =
*/
Prado.PostBack = jQuery.klass(
{
- options : {
- iscallback: false
- },
+ options : {},
initialize: function(options, event)
{
@@ -72,18 +57,10 @@ Prado.PostBack = jQuery.klass(
var form = this.getForm();
var data = {};
- if(this.options.iscallback)
- {
- if(typeof(this.options.CallbackParameter) != "undefined")
- data[Prado.CallbackRequestManager.FIELD_CALLBACK_PARAMETER] = this.getCallbackParameter();
- if(this.options.EventTarget)
- data[Prado.RequestManager.FIELD_CALLBACK_TARGET] = this.options.EventTarget;
- } else {
- if(this.options.EventTarget)
- data[Prado.RequestManager.FIELD_POSTBACK_TARGET] = this.options.EventTarget;
- if(this.options.EventParameter)
- data[Prado.RequestManager.FIELD_POSTBACK_PARAMETER] = this.options.EventParameter;
- }
+ if(this.options.EventTarget)
+ data[Prado.RequestManager.FIELD_POSTBACK_TARGET] = this.options.EventTarget;
+ if(this.options.EventParameter)
+ data[Prado.RequestManager.FIELD_POSTBACK_PARAMETER] = this.options.EventParameter;
return jQuery(form).serialize() + '&' + jQuery.param(data);
},