aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib
diff options
context:
space:
mode:
authorStephen St. Martin <kuprishuz@gmail.com>2010-01-25 20:49:53 -0500
committerStefan Penner <stefan.penner@gmail.com>2010-01-27 12:44:34 -0600
commited094132306061ea98168fb6424fa86a4f49e33b (patch)
tree001daed1b8538a0dd44027fefb7ae6336de5efd9 /railties/lib
parent44542bd7daf03057fe502f21f3eb2a5c09ffea57 (diff)
downloadrails-ed094132306061ea98168fb6424fa86a4f49e33b.tar.gz
rails-ed094132306061ea98168fb6424fa86a4f49e33b.tar.bz2
rails-ed094132306061ea98168fb6424fa86a4f49e33b.zip
refractor handler code for remote_form_tag to also handle link_to_remote, fix a bug preventing :method from being used, also add missing :position, :confirm is still not functional yet
Diffstat (limited to 'railties/lib')
-rw-r--r--railties/lib/generators/rails/app/templates/public/javascripts/jquery.compat.js3
-rw-r--r--railties/lib/generators/rails/app/templates/public/javascripts/jquery.driver.js74
2 files changed, 53 insertions, 24 deletions
diff --git a/railties/lib/generators/rails/app/templates/public/javascripts/jquery.compat.js b/railties/lib/generators/rails/app/templates/public/javascripts/jquery.compat.js
index 38dcfad761..6f5427fbce 100644
--- a/railties/lib/generators/rails/app/templates/public/javascripts/jquery.compat.js
+++ b/railties/lib/generators/rails/app/templates/public/javascripts/jquery.compat.js
@@ -2,13 +2,12 @@ jQuery(function ($) {
function evalAttribute(element, attribute) {
var el = $(element);
var attr = el.attr('data-' + attribute);
-
if(attr) {
eval(attr);
}
}
- $('form[data-remote="true"]')
+ $('form[data-remote="true"],a[data-remote="true"],input[data-remote="true"]')
.live('before', function (e) {
evalAttribute(this, 'onbefore');
})
diff --git a/railties/lib/generators/rails/app/templates/public/javascripts/jquery.driver.js b/railties/lib/generators/rails/app/templates/public/javascripts/jquery.driver.js
index 7df5f44c2c..032162b664 100644
--- a/railties/lib/generators/rails/app/templates/public/javascripts/jquery.driver.js
+++ b/railties/lib/generators/rails/app/templates/public/javascripts/jquery.driver.js
@@ -1,48 +1,78 @@
jQuery(function ($) {
- $('form[data-remote="true"]').live('submit', function (e) {
- var form = $(this),
+
+ function handleRemote (e) {
+ var el = $(this),
data = [],
- condition = form.attr('data-condition') ? eval(form.attr('data-condition')) : true;
+ condition = el.attr('data-condition') ? eval(el.attr('data-condition')) : true,
+ method = el.attr('method') || el.attr('data-method') || 'POST',
+ url = el.attr('action') || el.attr('data-url') || '#',
+ async = el.attr('data-remote-type') === 'synchronous' ? false : true,
+ update = el.attr('data-update-success'),
+ position = el.attr('data-update-position');
+ console.log(e);
- if (form.attr('data-submit')) {
- data = $('#' + form.attr('data-submit')).serializeArray();
- } else if (form.attr('data-with')) {
- data = form.attr('data-with');
- } else {
- data = form.serializeArray();
+ if (el.attr('data-submit')) {
+ data = $('#' + el.attr('data-submit')).serializeArray();
+ } else if (el.attr('data-with')) {
+ data = el.attr('data-with');
+ } else if(e.target.tagName.toUpperCase() == 'FORM') {
+ data = el.serializeArray();
}
if(condition) {
- form.trigger('before');
+ el.trigger('before');
$.ajax({
- async: form.attr('data-remote-type') === 'synchronous' ? false : true,
- url: form.attr('action'),
- method: form.attr('method'),
+ async: async,
+ url: url,
data: data,
+ type: method.toUpperCase(),
beforeSend: function (xhr) {
- form.trigger('after', xhr);
- form.trigger('loading', xhr);
+ el.trigger('after', xhr);
+ el.trigger('loading', xhr);
},
success: function (data, status, xhr) {
- var update = form.attr('data-update-success');
- form.trigger('success', [data, status, xhr]);
+ el.trigger('success', [data, status, xhr]);
if (update) {
- $(update + ', #' + update).html(data);
+ var element = update.charAt(0) == '#' ? update : '#' + update;
+ if(position) {
+ switch(el.attr('data-update-position')) {
+ case "before":
+ $(element).before(data);
+ break;
+ case "after":
+ $(element).after(data);
+ break;
+ case "top":
+ $(element).prepend(data);
+ break;
+ case "bottom":
+ $(element).append(data);
+ break;
+ default:
+ $(element).append(data);
+ break;
+ }
+ } else {
+ $(element).html(data);
+ }
}
},
complete: function (xhr) {
- form.trigger('complete', xhr);
- form.trigger('loaded', xhr);
+ el.trigger('complete', xhr);
+ el.trigger('loaded', xhr);
},
error: function (xhr, status, error) {
- form.trigger('failure', [xhr, status, error]);
+ el.trigger('failure', [xhr, status, error]);
}
});
}
e.preventDefault();
- });
+ }
+
+ $('form[data-remote="true"]').live('submit', handleRemote);
+ $('a[data-remote="true"],input[data-remote="true"]').live('click', handleRemote);
});