Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist
View README.txt
1
This is a collection of JS to help get jQuery integrated into a Rails project, specifically intended to be used with the jQuery.form plugin.
View README.txt
1
<%= javascript_tag("var AUTH_TOKEN = #{form_authenticity_token.inspect};").untaint if protect_against_forgery? %>
View README.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
// jQuery initializations
// TODO: Convert all $j back to $ when fully moved over to jQuery.
// TODO: Move all of this in to application.js when Prototype is no longer a factor.
// jQuery(document).ajaxSend(function (event, request, settings) {
// if (typeof(AUTH_TOKEN) == "undefined") return;
// settings.data = settings.data || "";
// settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIcomponent(AUTH_TOKEN);
// });
//
// // add javascript request type
// jQuery.ajaxSetup({
// 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")},
// });
 
jQuery.ajaxSetup({ 'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")} })
 
function _ajax_request(url, data, callback, type, method) {
if (jQuery.isFunction(data)) {
callback = data;
data = {};
}
return jQuery.ajax({
type: method,
url: url,
data: data,
success: callback,
dataType: type
});
}
 
jQuery.extend({
put: function(url, data, callback, type) {
return _ajax_request(url, data, callback, type, 'PUT');
},
delete_: function(url, data, callback, type) {
return _ajax_request(url, data, callback, type, 'DELETE');
}
});
 
/*
Submit a form with Ajax
Use the class ajaxForm in your form declaration
<% form_for @comment,:html => {:class => "ajaxForm"} do |f| -%>
*/
jQuery.fn.submitWithAjax = function() {
this.unbind('submit', false);
this.submit(function() {
$j.post(this.action, $j(this).serialize(), null, "script");
return false;
})
 
return this;
};
 
/*
Retreive a page with get
Use the class get in your link declaration
<%= link_to 'My link', my_path(),:class => "get" %>
*/
jQuery.fn.getWithAjax = function() {
this.unbind('click', false);
this.click(function() {
$j.get($j(this).attr("href"), $j(this).serialize(), null, "script");
return false;
})
return this;
};
 
/*
Post data via html
Use the class post in your link declaration
<%= link_to 'My link', my_new_path(),:class => "post" %>
*/
jQuery.fn.postWithAjax = function() {
this.unbind('click', false);
this.click(function() {
$j.post($j(this).attr("href"), $j(this).serialize(), null, "script");
return false;
})
return this;
};
 
/*
Update/Put data via html
Use the class put in your link declaration
<%= link_to 'My link', my_update_path(data),:class => "put",:method => :put %>
*/
jQuery.fn.putWithAjax = function() {
this.unbind('click', false);
this.click(function() {
$j.put($j(this).attr("href"), $j(this).serialize(), null, "script");
return false;
})
return this;
};
 
/*
Delete data
Use the class delete in your link declaration
<%= link_to 'My link', my_destroy_path(data),:class => "delete",:method => :delete %>
*/
jQuery.fn.deleteWithAjax = function() {
this.removeAttr('onclick');
this.unbind('click', false);
this.click(function() {
$j.delete_($j(this).attr("href"), $j(this).serialize(), null, "script");
return false;
})
return this;
};
 
/*
Ajaxify all the links on the page.
This function is called when the page is loaded. You'll probaly need to call it again when you write render new datas that need to be ajaxyfied.'
*/
function ajaxLinks(){
$j('.ajaxForm').submitWithAjax();
$j('a.get').getWithAjax();
$j('a.post').postWithAjax();
$j('a.put').putWithAjax();
$j('a.delete').deleteWithAjax();
}
 
$j(document).ready(function() {
// All non-GET requests will add the authenticity token
$j(document).ajaxSend(function(event, request, settings) {
if (typeof(window.AUTH_TOKEN) == "undefined") return;
// IE6 fix for http://dev.jquery.com/ticket/3155
if (settings.type == 'GET' || settings.type == 'get') return;
 
settings.data = settings.data || "";
settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(window.AUTH_TOKEN);
});
 
ajaxLinks();
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.