Well, for those which this might interest, I extracted some code from Rico 1.2 (that seems to be absent in the new release -- 2.0), and created a new Ajax object using Prototype code base. I thought it might interest someone. I didn''t open any ticket on this matter, simply because I don''t have time to provide unit testing for it (although there''s no known bugs for the moment...) NOTE : as this code is extracted from Rico 1.2, and adapted, it is under the Rico 1.2 license (see here for license : http://www.openrico.org/downloads) -yanick --------------------------------------------------------------------- Ajax.XMLUpdater = Class.create(); Object.extend(Ajax.XMLUpdater, { _elementCache: {}, _objectCache: {}, registerElement: function(anId,anElement) { if ( !anElement ) { anElement = $(anId); if ( !anElement ) throw Exception("Ajax.XMLUpdater: element not found : " + anId ); } return Ajax.XMLUpdater._elementCache[anId] = anElement; }, registerObject: function(anId,anObject) { if ( typeof anObject.ajaxUpdate != ''function'' ) throw Exception("Ajax.XMLUpdater: object does not have an ajaxUpdate function : " + anId ); return Ajax.XMLUpdater._objectCache[anId] = anObject; }, getElementFromCache: function(anId) { var element = Ajax.XMLUpdater._elementCache[anId]; if ( element ) return element; else { element = $(anId); if ( element ) Ajax.XMLUpdater._elementCache[anId] = element; return element; } }, getObjectFromCache: function(anId) { return Ajax.XMLUpdater._objectCache[anId] || null; } } ); Object.extend(Object.extend(Ajax.XMLUpdater.prototype, Ajax.Request.prototype), { initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = this._onRequestComplete.bind(this); this.request(url); }, _onRequestComplete: function() { if ( this.success() ) { if ( this.transport.responseXML ) { var response this.transport.responseXML.getElementsByTagName("ajax-response"); if (response == null || response.length != 1) return; this._processResponse( response[0].childNodes ); } if (this.onComplete) setTimeout(this.onComplete.bind(this), 10); } }, _processResponse: function( xmlResponseElements ) { for ( var i = 0 ; i < xmlResponseElements.length ; i++ ) { var responseElement = xmlResponseElements[i]; // only process nodes of type element..... if ( responseElement.nodeType != 1 ) continue; var responseType = responseElement.getAttribute("type"); var responseId = responseElement.getAttribute("id"); if ( responseType == "object" ) this._processObjectUpdate( Ajax.XMLUpdater.getObjectFromCache(responseId), responseElement ); else if ( responseType == "element" ) this._processElementUpdate( Ajax.XMLUpdater.getElementFromCache(responseId), responseElement ); else alert(''Ajax.XMLUpdate: unrecognized response type : '' + responseType ); } }, _processElementUpdate: function(anElement, response) { if ( anElement ) { var insertMode = response.getAttribute("insertion"); var html = RicoUtil.getContentAsString(response); if ( insertMode ) new Insertion[insertMode](anElement, html); else Element.update(anElement, html); } }, _processObjectUpdate: function(anObject, response) { //alert( " Object Update " + anObject ); if ( anObject ) { anObject.ajaxUpdate(response); } }, }); -------------------------------------------------------- Usage : Ajax.XMLUpdater.registerObject( "objectId", objectWithAnAjaxUpdateFunction ); ... new Ajax.XMLUpdater( url, options ); Parameters are the same as the Ajax.Request object consctructor. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Spinoffs" group. To post to this group, send email to rubyonrails-spinoffs-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-spinoffs-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-spinoffs?hl=en -~----------~----~----~----~------~----~------~--~---