/** * 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 0) this.updateChoices(result); } }); /** * Time Triggered Callback class. */ Prado.WebUI.TTimeTriggeredCallback = Base.extend( { count : 0, timeout : 0, constructor : function(options) { this.options = Object.extend( { Interval : 1, DecayRate : 0 }, options || {}) this.onComplete = this.options.onComplete; Prado.WebUI.TTimeTriggeredCallback.register(this); }, startTimer : function() { this.options.onComplete = this.onRequestComplete.bind(this); this.timer = setTimeout(this.onTimerEvent.bind(this), 200); }, stopTimer : function() { (this.onComplete || Prototype.emptyFunction).apply(this, arguments); this.options.onComplete = undefined; clearTimeout(this.timer); this.timer = undefined; this.count = 0; }, onTimerEvent : function() { this.options.params = this.timeout/1000; var request = new Prado.CallbackRequest(this.options.EventTarget, this.options); request.dispatch(); }, onRequestComplete : function() { (this.onComplete || Prototype.emptyFunction).apply(this, arguments); this.timer = setTimeout(this.onTimerEvent.bind(this), this.getNewTimeout()) }, getNewTimeout : function() { switch(this.options.DecayType) { case 'Exponential': t = (Math.exp(this.options.DecayRate*this.count*this.options.Interval))-1; break; case 'Linear': t = this.options.DecayRate*this.count*this.options.Interval; break; case 'Quadratic': t = this.options.DecayRate*this.count*this.count*this.options.Interval; break; case 'Cubic': t = this.options.DecayRate*this.count*this.count*this.count*this.options.Interval; break; default : t = 0; } this.timeout = (t + this.options.Interval)*1000; this.count++; return parseInt(this.timeout); } }, //class methods { timers : {}, register : function(timer) { Prado.WebUI.TTimeTriggeredCallback.timers[timer.options.ID] = timer; }, start : function(id) { Prado.WebUI.TTimeTriggeredCallback.timers[id].startTimer(); }, stop : function(id) { Prado.WebUI.TTimeTriggeredCallback.timers[id].stopTimer(); } }); Prado.WebUI.ActiveListControl = Base.extend( { constructor : function(options) { this.element = $(options.ID); this.options = options; Event.observe(this.element, "change", this.doCallback.bind(this)); }, doCallback : function(event) { var request = new Prado.CallbackRequest(this.options.EventTarget, this.options); request.dispatch(); Event.stop(event); } }); Prado.WebUI.TActiveDropDownList = Prado.WebUI.ActiveListControl; Prado.WebUI.TActiveListBox = Prado.WebUI.ActiveListControl; /** * Observe event of a particular control to trigger a callback request. */ Prado.WebUI.TEventTriggeredCallback = Base.extend( { constructor : function(options) { this.options = options; var element = $(options['ControlID']); if(element) Event.observe(element, this.getEventName(element), this.doCallback.bind(this)); }, getEventName : function(element) { var name = this.options.EventName; if(typeof(name) == "undefined" && element.type) { switch (element.type.toLowerCase()) { case 'password': case 'text': case 'textarea': case 'select-one': case 'select-multiple': return 'change'; } } return typeof(name) == "undefined" || name == "undefined" ? 'click' : name; }, doCallback : function(event) { var request = new Prado.CallbackRequest(this.options.EventTarget, this.options); request.dispatch(); if(this.options.StopEvent == true) Event.stop(event); } }); /** * Observe changes to a property of a particular control to trigger a callback. */ Prado.WebUI.TValueTriggeredCallback = Base.extend( { count : 1, observing : true, constructor : function(options) { this.options = options; this.options.PropertyName = this.options.PropertyName || 'value'; var element = $(options['ControlID']); this.value = element ? element[this.options.PropertyName] : undefined; Prado.WebUI.TValueTriggeredCallback.register(this); this.startObserving(); }, stopObserving : function() { clearTimeout(this.timer); this.observing = false; }, startObserving : function() { this.timer = setTimeout(this.checkChanges.bind(this), this.options.Interval*1000); }, checkChanges : function() { var element = $(this.options.ControlID); if(element) { var value = element[this.options.PropertyName]; if(this.value != value) { this.doCallback(this.value, value); this.value = value; this.count=1; } else this.count = this.count + this.options.Decay; if(this.observing) this.time = setTimeout(this.checkChanges.bind(this), parseInt(this.options.Interval*1000*this.count)); } }, doCallback : function(oldValue, newValue) { var request = new Prado.CallbackRequest(this.options.EventTarget, this.options); var param = {'OldValue' : oldValue, 'NewValue' : newValue}; request.setCallbackParameter(param); request.dispatch(); } }, //class methods { timers : {}, register : function(timer) { Prado.WebUI.TValueTriggeredCallback.timers[timer.options.ID] = timer; }, stop : function(id) { Prado.WebUI.TValueTriggeredCallback.timers[id].stopObserving(); } });