rest_in_place = function(element, url, objectName, attributeName){ var e = element; function clickFunction(){ var oldValue = e.innerHTML.replace(/^\s*|\s*$/g,''); function submitFunction(){ var value = Form.Element.getValue(e.select('input')[0]); e.innerHTML = "saving..."; new Ajax.Request(url,{ method: 'put', parameters: objectName+'['+attributeName+']='+encodeURIComponent(value)+(window.rails_authenticity_token ? "&authenticity_token="+encodeURIComponent(window.rails_authenticity_token) : ''), onSuccess: function(transport){ new Ajax.Request(url, { method: 'get', requestHeaders: { "Accept" : "application/javascript"}, onSuccess : function(xhr){ var data = xhr.responseText.evalJSON(); e.innerHTML = data[objectName][attributeName]; Event.observe(e,'click', clickFunction); } }); } }); return false; } e.innerHTML = '
'; Form.Element.select(e.select('input')[0]); Event.stopObserving(e, 'click', clickFunction); Event.observe(e.select('input')[0], 'blur', function(){ e.innerHTML = oldValue; Event.observe(e, 'click', clickFunction); }); Event.observe(e.select('form')[0], 'submit', submitFunction); } Event.observe(e,'click', clickFunction); }; Event.observe(window, 'load',function() { $$(".rest_in_place").each(function(e){ var url; var obj; var attrib; Element.ancestors(e).each(function(a){ url = url || Element.readAttribute(a, 'url'); obj = obj || Element.readAttribute(a, 'object'); attrib = attrib || Element.readAttribute(a, 'attribute'); }); Element.ancestors(e).each(function(a){ if (res = a.id.match(/^(\w+)_(\d+)$/i)) { obj = obj || res[1]; } }); url = Element.readAttribute(e, 'url') || url || document.location.pathname; obj = Element.readAttribute(e, 'object') || obj; attrib = Element.readAttribute(e, 'attribute') || attrib; rest_in_place(e, url, obj, attrib); }); });