diff options
author | Joshua Peek <josh@joshpeek.com> | 2010-01-30 19:20:49 -0600 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2010-01-30 19:20:49 -0600 |
commit | 7d9ed8eec1c899dac10d582ced07149fe5c58c4f (patch) | |
tree | f1e854aa326739f59229b146b22f768c538870cd /railties | |
parent | db49c706b62e7ea2ab93f05399dbfddf5087ee0c (diff) | |
download | rails-7d9ed8eec1c899dac10d582ced07149fe5c58c4f.tar.gz rails-7d9ed8eec1c899dac10d582ced07149fe5c58c4f.tar.bz2 rails-7d9ed8eec1c899dac10d582ced07149fe5c58c4f.zip |
Include prototype ujs adapter with new apps
Diffstat (limited to 'railties')
-rw-r--r-- | railties/Rakefile | 4 | ||||
-rw-r--r-- | railties/lib/generators/rails/app/templates/public/javascripts/rails.js | 77 |
2 files changed, 81 insertions, 0 deletions
diff --git a/railties/Rakefile b/railties/Rakefile index eff59f1f40..b8f5e81b85 100644 --- a/railties/Rakefile +++ b/railties/Rakefile @@ -64,6 +64,10 @@ task :generate_guides do ruby "guides/rails_guides.rb" end +task :update_prototype_ujs do + system "curl http://github.com/rails/prototype-ujs/raw/master/src/rails.js > lib/generators/rails/app/templates/public/javascripts/rails.js" +end + # Generate documentation ------------------------------------------------------------------ Rake::RDocTask.new { |rdoc| 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; + }); + } + }); +}); |