From 7d9ed8eec1c899dac10d582ced07149fe5c58c4f Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sat, 30 Jan 2010 19:20:49 -0600 Subject: Include prototype ujs adapter with new apps --- .../app/templates/public/javascripts/rails.js | 77 ++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 railties/lib/generators/rails/app/templates/public/javascripts/rails.js (limited to 'railties/lib/generators/rails/app/templates') diff --git a/railties/lib/generators/rails/app/templates/public/javascripts/rails.js b/railties/lib/generators/rails/app/templates/public/javascripts/rails.js new file mode 100644 index 0000000000..2a0a05d25f --- /dev/null +++ b/railties/lib/generators/rails/app/templates/public/javascripts/rails.js @@ -0,0 +1,77 @@ +document.observe("dom:loaded", function() { + function handleRemote(element) { + var method, url, params; + + if (element.tagName.toLowerCase() == 'form') { + method = element.readAttribute('method') || 'post'; + url = element.readAttribute('action'); + params = element.serialize(true); + } else { + method = element.readAttribute('data-method') || 'get'; + // TODO: data-url support is going away, just use href + url = element.readAttribute('data-url') || element.readAttribute('href'); + params = {}; + } + + var event = element.fire("ajax:before"); + if (event.stopped) return false; + + new Ajax.Request(url, { + method: method, + parameters: params, + asynchronous: true, + evalScripts: true, + + onLoading: function(request) { element.fire("ajax:loading", {request: request}); }, + onLoaded: function(request) { element.fire("ajax:loaded", {request: request}); }, + onInteractive: function(request) { element.fire("ajax:interactive", {request: request}); }, + onComplete: function(request) { element.fire("ajax:complete", {request: request}); }, + onSuccess: function(request) { element.fire("ajax:success", {request: request}); }, + onFailure: function(request) { element.fire("ajax:failure", {request: request}); } + }); + + element.fire("ajax:after"); + } + + $(document.body).observe("click", function(event) { + var element = event.findElement("a[data-remote=true]"); + if (element) { + handleRemote(element); + event.stop(); + } + }); + + $(document.body).observe("ajax:before", function(event) { + var message = event.element().readAttribute('data-confirm'); + if (message && !confirm(message)) event.stop(); + }); + + // TODO: I don't think submit bubbles in IE + $(document.body).observe("submit", function(event) { + var inputs = event.element().select("input[type=submit][data-disable-with]"); + inputs.each(function(input) { + input.disabled = true; + input.writeAttribute('data-original-value', input.value); + input.value = input.readAttribute('data-disable-with'); + }); + + var element = event.findElement("form[data-remote=true]"); + if (element) { + handleRemote(element); + event.stop(); + } + }); + + $(document.body).observe("ajax:complete", function(event) { + var element = event.element(); + + if (element.tagName.toLowerCase() == 'form') { + var inputs = element.select("input[type=submit][disabled=true][data-disable-with]"); + inputs.each(function(input) { + input.value = input.readAttribute('data-original-value'); + input.writeAttribute('data-original-value', null); + input.disabled = false; + }); + } + }); +}); -- cgit v1.2.3