/gi, "");
},
createEditField: function() {
var text;
if(this.options.loadTextURL) {
text = this.options.loadingText;
} else {
text = this.getText();
}
var obj = this;
if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
this.options.textarea = false;
var textField = document.createElement("input");
textField.obj = this;
textField.type = "text";
textField.name = this.options.paramName;
textField.value = text;
textField.style.backgroundColor = this.options.highlightcolor;
textField.className = 'editor_field';
var size = this.options.size || this.options.cols || 0;
if (size != 0) textField.size = size;
if (this.options.submitOnBlur)
textField.onblur = this.onSubmit.bind(this);
this.editField = textField;
} else {
this.options.textarea = true;
var textArea = document.createElement("textarea");
textArea.obj = this;
textArea.name = this.options.paramName;
textArea.value = this.convertHTMLLineBreaks(text);
textArea.rows = this.options.rows;
textArea.cols = this.options.cols || 40;
textArea.className = 'editor_field';
if (this.options.submitOnBlur)
textArea.onblur = this.onSubmit.bind(this);
this.editField = textArea;
}
if(this.options.loadTextURL) {
this.loadExternalText();
}
this.form.appendChild(this.editField);
},
getText: function() {
return this.element.innerHTML;
},
loadExternalText: function() {
Element.addClassName(this.form, this.options.loadingClassName);
this.editField.disabled = true;
new Ajax.Request(
this.options.loadTextURL,
Object.extend({
asynchronous: true,
onComplete: this.onLoadedExternalText.bind(this)
}, this.options.ajaxOptions)
);
},
onLoadedExternalText: function(transport) {
Element.removeClassName(this.form, this.options.loadingClassName);
this.editField.disabled = false;
this.editField.value = transport.responseText.stripTags();
Field.scrollFreeActivate(this.editField);
},
onclickCancel: function() {
this.onComplete();
this.leaveEditMode();
return false;
},
onFailure: function(transport) {
this.options.onFailure(transport);
if (this.oldInnerHTML) {
this.element.innerHTML = this.oldInnerHTML;
this.oldInnerHTML = null;
}
return false;
},
onSubmit: function() {
// onLoading resets these so we need to save them away for the Ajax call
var form = this.form;
var value = this.editField.value;
// do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
// which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
// to be displayed indefinitely
this.onLoading();
if (this.options.evalScripts) {
new Ajax.Request(
this.url, Object.extend({
parameters: this.options.callback(form, value),
onComplete: this.onComplete.bind(this),
onFailure: this.onFailure.bind(this),
asynchronous:true,
evalScripts:true
}, this.options.ajaxOptions));
} else {
new Ajax.Updater(
{ success: this.element,
// don't update on failure (this could be an option)
failure: null },
this.url, Object.extend({
parameters: this.options.callback(form, value),
onComplete: this.onComplete.bind(this),
onFailure: this.onFailure.bind(this)
}, this.options.ajaxOptions));
}
// stop the event to avoid a page refresh in Safari
if (arguments.length > 1) {
Event.stop(arguments[0]);
}
return false;
},
onLoading: function() {
this.saving = true;
this.removeForm();
this.leaveHover();
this.showSaving();
},
showSaving: function() {
this.oldInnerHTML = this.element.innerHTML;
this.element.innerHTML = this.options.savingText;
Element.addClassName(this.element, this.options.savingClassName);
this.element.style.backgroundColor = this.originalBackground;
Element.show(this.element);
},
removeForm: function() {
if(this.form) {
if (this.form.parentNode) Element.remove(this.form);
this.form = null;
}
},
enterHover: function() {
if (this.saving) return;
this.element.style.backgroundColor = this.options.highlightcolor;
if (this.effect) {
this.effect.cancel();
}
Element.addClassName(this.element, this.options.hoverClassName)
},
leaveHover: function() {
if (this.options.backgroundColor) {
this.element.style.backgroundColor = this.oldBackground;
}
Element.removeClassName(this.element, this.options.hoverClassName)
if (this.saving) return;
this.effect = new Effect.Highlight(this.element, {
startcolor: this.options.highlightcolor,
endcolor: this.options.highlightendcolor,
restorecolor: this.originalBackground
});
},
leaveEditMode: function() {
Element.removeClassName(this.element, this.options.savingClassName);
this.removeForm();
this.leaveHover();
this.element.style.backgroundColor = this.originalBackground;
Element.show(this.element);
if (this.options.externalControl) {
Element.show(this.options.externalControl);
}
this.editing = false;
this.saving = false;
this.oldInnerHTML = null;
this.onLeaveEditMode();
},
onComplete: function(transport) {
this.leaveEditMode();
this.options.onComplete.bind(this)(transport, this.element);
},
onEnterEditMode: function() {},
onLeaveEditMode: function() {},
dispose: function() {
if (this.oldInnerHTML) {
this.element.innerHTML = this.oldInnerHTML;
}
this.leaveEditMode();
Event.stopObserving(this.element, 'click', this.onclickListener);
Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
if (this.options.externalControl) {
Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
}
}
};
Ajax.InPlaceCollectionEditor = Class.create();
Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
createEditField: function() {
if (!this.cached_selectTag) {
var selectTag = document.createElement("select");
var collection = this.options.collection || [];
var optionTag;
collection.each(function(e,i) {
optionTag = document.createElement("option");
optionTag.value = (e instanceof Array) ? e[0] : e;
if((typeof this.options.value == 'undefined') &&
((e instanceof Array) ? this.element.innerHTML == e[1] : e == optionTag.value)) optionTag.selected = true;
if(this.options.value==optionTag.value) optionTag.selected = true;
optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
selectTag.appendChild(optionTag);
}.bind(this));
this.cached_selectTag = selectTag;
}
this.editField = this.cached_selectTag;
if(this.options.loadTextURL) this.loadExternalText();
this.form.appendChild(this.editField);
this.options.callback = function(form, value) {
return "value=" + encodeURIComponent(value);
}
}
});
// Delayed observer, like Form.Element.Observer,
// but waits for delay after last key input
// Ideal for live-search fields
Form.Element.DelayedObserver = Class.create();
Form.Element.DelayedObserver.prototype = {
initialize: function(element, delay, callback) {
this.delay = delay || 0.5;
this.element = $(element);
this.callback = callback;
this.timer = null;
this.lastValue = $F(this.element);
Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
},
delayedListener: function(event) {
if(this.lastValue == $F(this.element)) return;
if(this.timer) clearTimeout(this.timer);
this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
this.lastValue = $F(this.element);
},
onTimerEvent: function() {
this.timer = null;
this.callback(this.element, $F(this.element));
}
};
/*
Copyright (c) 2005 JSON.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The Software shall be used for Good, not Evil.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
*/
Array.prototype.______array = '______array';
Prado.JSON = {
org: 'http://www.JSON.org',
copyright: '(c)2005 JSON.org',
license: 'http://www.crockford.com/JSON/license.html',
stringify: function (arg) {
var c, i, l, s = '', v;
switch (typeof arg) {
case 'object':
if (arg) {
if (arg.______array == '______array') {
for (i = 0; i < arg.length; ++i) {
v = this.stringify(arg[i]);
if (s) {
s += ',';
}
s += v;
}
return '[' + s + ']';
} else if (typeof arg.toString != 'undefined') {
for (i in arg) {
v = arg[i];
if (typeof v != 'undefined' && typeof v != 'function') {
v = this.stringify(v);
if (s) {
s += ',';
}
s += this.stringify(i) + ':' + v;
}
}
return '{' + s + '}';
}
}
return 'null';
case 'number':
return isFinite(arg) ? String(arg) : 'null';
case 'string':
l = arg.length;
s = '"';
for (i = 0; i < l; i += 1) {
c = arg.charAt(i);
if (c >= ' ') {
if (c == '\\' || c == '"') {
s += '\\';
}
s += c;
} else {
switch (c) {
case '\b':
s += '\\b';
break;
case '\f':
s += '\\f';
break;
case '\n':
s += '\\n';
break;
case '\r':
s += '\\r';
break;
case '\t':
s += '\\t';
break;
default:
c = c.charCodeAt();
s += '\\u00' + Math.floor(c / 16).toString(16) +
(c % 16).toString(16);
}
}
}
return s + '"';
case 'boolean':
return String(arg);
default:
return 'null';
}
},
parse: function (text) {
var at = 0;
var ch = ' ';
function error(m) {
throw {
name: 'JSONError',
message: m,
at: at - 1,
text: text
};
}
function next() {
ch = text.charAt(at);
at += 1;
return ch;
}
function white() {
while (ch) {
if (ch <= ' ') {
next();
} else if (ch == '/') {
switch (next()) {
case '/':
while (next() && ch != '\n' && ch != '\r') {}
break;
case '*':
next();
for (;;) {
if (ch) {
if (ch == '*') {
if (next() == '/') {
next();
break;
}
} else {
next();
}
} else {
error("Unterminated comment");
}
}
break;
default:
error("Syntax error");
}
} else {
break;
}
}
}
function string() {
var i, s = '', t, u;
if (ch == '"') {
outer: while (next()) {
if (ch == '"') {
next();
return s;
} else if (ch == '\\') {
switch (next()) {
case 'b':
s += '\b';
break;
case 'f':
s += '\f';
break;
case 'n':
s += '\n';
break;
case 'r':
s += '\r';
break;
case 't':
s += '\t';
break;
case 'u':
u = 0;
for (i = 0; i < 4; i += 1) {
t = parseInt(next(), 16);
if (!isFinite(t)) {
break outer;
}
u = u * 16 + t;
}
s += String.fromCharCode(u);
break;
default:
s += ch;
}
} else {
s += ch;
}
}
}
error("Bad string");
}
function array() {
var a = [];
if (ch == '[') {
next();
white();
if (ch == ']') {
next();
return a;
}
while (ch) {
a.push(value());
white();
if (ch == ']') {
next();
return a;
} else if (ch != ',') {
break;
}
next();
white();
}
}
error("Bad array");
}
function object() {
var k, o = {};
if (ch == '{') {
next();
white();
if (ch == '}') {
next();
return o;
}
while (ch) {
k = string();
white();
if (ch != ':') {
break;
}
next();
o[k] = value();
white();
if (ch == '}') {
next();
return o;
} else if (ch != ',') {
break;
}
next();
white();
}
}
error("Bad object");
}
function number() {
var n = '', v;
if (ch == '-') {
n = '-';
next();
}
while (ch >= '0' && ch <= '9') {
n += ch;
next();
}
if (ch == '.') {
n += '.';
while (next() && ch >= '0' && ch <= '9') {
n += ch;
}
}
if (ch == 'e' || ch == 'E') {
n += 'e';
next();
if (ch == '-' || ch == '+') {
n += ch;
next();
}
while (ch >= '0' && ch <= '9') {
n += ch;
next();
}
}
v = +n;
if (!isFinite(v)) {
////error("Bad number");
} else {
return v;
}
}
function word() {
switch (ch) {
case 't':
if (next() == 'r' && next() == 'u' && next() == 'e') {
next();
return true;
}
break;
case 'f':
if (next() == 'a' && next() == 'l' && next() == 's' &&
next() == 'e') {
next();
return false;
}
break;
case 'n':
if (next() == 'u' && next() == 'l' && next() == 'l') {
next();
return null;
}
break;
}
error("Syntax error");
}
function value() {
white();
switch (ch) {
case '{':
return object();
case '[':
return array();
case '"':
return string();
case '-':
return number();
default:
return ch >= '0' && ch <= '9' ? number() : word();
}
}
return value();
}
};
Prado.AjaxRequest = Class.create();
Prado.AjaxRequest.prototype = Ajax.Request.prototype;
/**
* Override Prototype's response implementation.
*/
Object.extend(Prado.AjaxRequest.prototype,
{
/*initialize: function(request)
{
this.CallbackRequest = request;
this.transport = Ajax.getTransport();
this.setOptions(request.options);
this.request(request.url);
},*/
/**
* Customize the response, dispatch onXXX response code events, and
* tries to execute response actions (javascript statements).
*/
respondToReadyState : function(readyState)
{
var event = Ajax.Request.Events[readyState];
var transport = this.transport, json = this.getBodyDataPart(Prado.CallbackRequest.DATA_HEADER);
if (event == 'Complete')
{
var redirectUrl = this.getBodyContentPart(Prado.CallbackRequest.REDIRECT_HEADER);
if(redirectUrl)
document.location.href = redirectUrl;
if ((this.getHeader('Content-type') || '').match(/^text\/javascript/i))
{
try
{
json = eval('(' + transport.responseText + ')');
}catch (e)
{
if(typeof(json) == "string")
json = Prado.CallbackRequest.decode(result);
}
}
try
{
Prado.CallbackRequest.updatePageState(this,transport);
Ajax.Responders.dispatch('on' + transport.status, this, transport, json);
Prado.CallbackRequest.dispatchActions(transport,this.getBodyDataPart(Prado.CallbackRequest.ACTION_HEADER));
(this.options['on' + this.transport.status]
|| this.options['on' + (this.success() ? 'Success' : 'Failure')]
|| Prototype.emptyFunction)(this, json);
} catch (e) {
this.dispatchException(e);
}
}
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;
},
/**
* Gets header data assuming JSON encoding.
* @param string header name
* @return object header data as javascript structures.
*/
getHeaderData : function(name)
{
return this.getJsonData(this.getHeader(name));
},
getBodyContentPart : function(name)
{
if(typeof(this.transport.responseText)=="string")
return Prado.Element.extractContent(this.transport.responseText, name);
},
getJsonData : function(json)
{
try
{
return eval('(' + json + ')');
}
catch (e)
{
if(typeof(json) == "string")
return Prado.CallbackRequest.decode(json);
}
},
getBodyDataPart : function(name)
{
return this.getJsonData(this.getBodyContentPart(name));
}
});
/**
* Prado Callback client-side request handler.
*/
Prado.CallbackRequest = Class.create();
/**
* Static definitions.
*/
Object.extend(Prado.CallbackRequest,
{
/**
* 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',
/**
* List of form fields that will be collected during callback.
*/
PostDataLoaders : [],
/**
* Response data header name.
*/
DATA_HEADER : 'X-PRADO-DATA',
/**
* Response javascript execution statement header name.
*/
ACTION_HEADER : 'X-PRADO-ACTIONS',
/**
* Response errors/exceptions header name.
*/
ERROR_HEADER : 'X-PRADO-ERROR',
/**
* Page state header name.
*/
PAGESTATE_HEADER : 'X-PRADO-PAGESTATE',
REDIRECT_HEADER : 'X-PRADO-REDIRECT',
requestQueue : [],
//all request objects
requests : {},
getRequestById : function(id)
{
var requests = Prado.CallbackRequest.requests;
if(typeof(requests[id]) != "undefined")
return requests[id];
},
dispatch : function(id)
{
var requests = Prado.CallbackRequest.requests;
if(typeof(requests[id]) != "undefined")
requests[id].dispatch();
},
/**
* Add ids of inputs element to post in the request.
*/
addPostLoaders : function(ids)
{
var self = Prado.CallbackRequest;
self.PostDataLoaders = self.PostDataLoaders.concat(ids);
var list = [];
self.PostDataLoaders.each(function(id)
{
if(list.indexOf(id) < 0)
list.push(id);
});
self.PostDataLoaders = list;
},
/**
* Dispatch callback response actions.
*/
dispatchActions : function(transport,actions)
{
var self = Prado.CallbackRequest;
if(actions && actions.length > 0)
actions.each(self.__run.bind(self,transport));
},
/**
* Prase and evaluate a Callback clien-side action
*/
__run : function(transport, command)
{
var self = Prado.CallbackRequest;
self.transport = transport;
for(var method in command)
{
try
{
method.toFunction().apply(self,command[method]);
}
catch(e)
{
if(typeof(Logger) != "undefined")
self.Exception.onException(null,e);
}
}
},
/**
* Respond to Prado Callback request exceptions.
*/
Exception :
{
/**
* Server returns 500 exception. Just log it.
*/
"on500" : function(request, transport, data)
{
var e = request.getHeaderData(Prado.CallbackRequest.ERROR_HEADER);
Logger.error("Callback Server Error "+e.code, this.formatException(e));
},
/**
* Callback OnComplete event,logs reponse and data to console.
*/
'on200' : function(request, transport, data)
{
if(transport.status < 500)
{
var msg = 'HTTP '+transport.status+" with response : \n";
if(transport.responseText.trim().length >0)
{
var f = RegExp('()([\\s\\S\\w\\W]*)()',"m");
msg += transport.responseText.replace(f,'') + "\n";
}
if(typeof(data)!="undefined" && data != null)
msg += "Data : \n"+inspect(data)+"\n";
data = request.getBodyDataPart(Prado.CallbackRequest.ACTION_HEADER);
if(data && data.length > 0)
{
msg += "Actions : \n";
data.each(function(action)
{
msg += inspect(action)+"\n";
});
}
Logger.info(msg);
}
},
/**
* Uncaught exceptions during callback response.
*/
onException : function(request,e)
{
msg = "";
$H(e).each(function(item)
{
msg += item.key+": "+item.value+"\n";
})
Logger.error('Uncaught Callback Client Exception:', msg);
},
/**
* Formats the exception message for display in console.
*/
formatException : function(e)
{
var msg = e.type + " with message \""+e.message+"\"";
msg += " in "+e.file+"("+e.line+")\n";
msg += "Stack trace:\n";
var trace = e.trace;
for(var i = 0; i
* request = new Prado.CallbackRequest(UniqueID, callback);
* request.dispatch();
*
*/
Prado.CallbackRequest.prototype = Object.extend(Prado.AjaxRequest.prototype,
{
/**
* Prepare and inititate a callback request.
*/
initialize : function(id, options)
{
/**
* Callback URL, same url as the current page.
*/
this.url = this.getCallbackUrl();
this.transport = Ajax.getTransport();
// this.setOptions(request.options);
// this.request(request.url);
/**
* Current callback request.
*/
//this.request = null;
this.Enabled = true;
this.id = id;
if(typeof(id)=="string")
Prado.CallbackRequest.requests[id] = this;
this.setOptions(Object.extend(
{
RequestTimeOut : 30000, // 30 second timeout.
EnablePageStateUpdate : true,
HasPriority : true,
CausesValidation : true,
ValidationGroup : null,
PostInputs : true
}, options || {}));
this.ActiveControl = this.options;
},
/**
* Gets the url from the forms that contains the PRADO_PAGESTATE
* @return {String} callback url.
*/
getCallbackUrl : function()
{
return $('PRADO_PAGESTATE').form.action;
},
/**
* Sets the request parameter
* @param {Object} parameter value
*/
setCallbackParameter : function(value)
{
this.ActiveControl['CallbackParameter'] = value;
},
/**
* @return {Object} request paramater value.
*/
getCallbackParameter : function()
{
return this.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;
if(this.ActiveControl.HasPriority)
{
return Prado.CallbackRequest.enqueue(this);
//return Prado.CallbackRequest.dispatchPriorityRequest(this);
}
else
return Prado.CallbackRequest.dispatchNormalRequest(this);
},
abort : function()
{
return Prado.CallbackRequest.abortRequest(this.id);
},
/**
* Collects the form inputs, encode the parameters, and sets the callback
* target id. The resulting string is the request content body.
* @return string request body content containing post data.
*/
_getPostData : function()
{
var data = {};
var callback = Prado.CallbackRequest;
if(this.ActiveControl.PostInputs != false)
{
callback.PostDataLoaders.each(function(name)
{
$A(document.getElementsByName(name)).each(function(element)
{
//IE will try to get elements with ID == name as well.
if(element.type && element.name == name)
{
value = $F(element);
if(typeof(value) != "undefined" && value != null)
data[name] = value;
}
})
})
}
if(typeof(this.ActiveControl.CallbackParameter) != "undefined")
data[callback.FIELD_CALLBACK_PARAMETER] = callback.encode(this.ActiveControl.CallbackParameter);
var pageState = $F(callback.FIELD_CALLBACK_PAGESTATE);
if(typeof(pageState) != "undefined")
data[callback.FIELD_CALLBACK_PAGESTATE] = pageState;
data[callback.FIELD_CALLBACK_TARGET] = this.id;
if(this.ActiveControl.EventTarget)
data[callback.FIELD_POSTBACK_TARGET] = this.ActiveControl.EventTarget;
if(this.ActiveControl.EventParameter)
data[callback.FIELD_POSTBACK_PARAMETER] = this.ActiveControl.EventParameter;
return $H(data).toQueryString();
}
});
/**
* Create a new callback request using default settings.
* @param string callback handler unique ID.
* @param mixed parameter to pass to callback handler on the server side.
* @param function client side onSuccess event handler.
* @param object additional request options.
* @return boolean always false.
*/
Prado.Callback = function(UniqueID, parameter, onSuccess, options)
{
var callback =
{
'CallbackParameter' : parameter || '',
'onSuccess' : onSuccess || Prototype.emptyFunction
};
Object.extend(callback, options || {});
request = new Prado.CallbackRequest(UniqueID, callback);
request.dispatch();
return false;
}
/**
* Generic postback control.
*/
Prado.WebUI.CallbackControl = Class.extend(Prado.WebUI.PostBackControl,
{
onPostBack : function(event, options)
{
var request = new Prado.CallbackRequest(options.EventTarget, options);
request.dispatch();
Event.stop(event);
}
});
/**
* TActiveButton control.
*/
Prado.WebUI.TActiveButton = Class.extend(Prado.WebUI.CallbackControl);
/**
* TActiveLinkButton control.
*/
Prado.WebUI.TActiveLinkButton = Class.extend(Prado.WebUI.CallbackControl);
Prado.WebUI.TActiveImageButton = Class.extend(Prado.WebUI.TImageButton,
{
onPostBack : function(event, options)
{
this.addXYInput(event,options);
var request = new Prado.CallbackRequest(options.EventTarget, options);
request.dispatch();
Event.stop(event);
}
});
/**
* Active check box.
*/
Prado.WebUI.TActiveCheckBox = Class.extend(Prado.WebUI.CallbackControl,
{
onPostBack : function(event, options)
{
var request = new Prado.CallbackRequest(options.EventTarget, options);
if(request.dispatch()==false)
Event.stop(event);
}
});
/**
* TActiveRadioButton control.
*/
Prado.WebUI.TActiveRadioButton = Class.extend(Prado.WebUI.TActiveCheckBox);
Prado.WebUI.TActiveCheckBoxList = Base.extend(
{
constructor : function(options)
{
for(var i = 0; i