(function($, undefined) { var form_ext; $.form_ext = form_ext = { ajax: function(options) { return $.ajax(options); }, handleRemote: function(element) { var method = element.attr('method'); var url = element.attr('action'); var data = element.serializeArray(); var options = { type: method || 'GET', data: data, dataType: 'text json', success: function(data, status, xhr) { element.trigger("ajax:success", [data, status, xhr]); }, complete: function(xhr, status) { element.trigger("ajax:complete", [xhr, status]); }, error: function(xhr, status, error) { element.trigger("ajax:error", [xhr, status, error]); } } if(url) { options.url = url; } return form_ext.ajax(options) }, CSRFProtection: function(xhr) { var token = $.cookie('csrftoken'); if (token) xhr.setRequestHeader('X-CSRFToken', token); } } $.ajaxPrefilter(function(options, originalOptions, xhr){ if ( !options.crossDomain ) { form_ext.CSRFProtection(xhr); }}); $(document).delegate('form', 'submit', function(e) { var form = $(this), remote = form.data("remote") !== undefined; if(remote) { form_ext.handleRemote(form); return false; } }); })(jQuery);