master
1(function($) {
2 Backbone._sync = Backbone.sync;
3
4 Backbone.sync = function(method, model, options) {
5 if (!options.noCSRF) {
6 var beforeSend = options.beforeSend;
7
8 // Set X-CSRF-Token HTTP header
9 options.beforeSend = function(xhr) {
10 var token = $('meta[name="csrf-token"]').attr('content');
11 if (token) xhr.setRequestHeader('X-CSRF-Token', token);
12 if (beforeSend) return beforeSend.apply(this, arguments);
13 };
14 }
15
16 // Serialize data, optionally using paramRoot
17 if (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {
18 options.contentType = 'application/json';
19 data = JSON.stringify(options.attrs || model.toJSON(options));
20 if (model.paramRoot) {
21 data = {};
22 data[model.paramRoot] = model.toJSON(options);
23 } else {
24 data = model.toJSON();
25 }
26 options.data = JSON.stringify(data);
27 }
28
29 return Backbone._sync(method, model, options);
30 };
31
32})(jQuery);