pyrsmk-rip
Version:
REST in peace
108 lines (95 loc) • 2.03 kB
JavaScript
var request_attribute_name = '_METHOD',
var RIP = {
/*
Set the REST request attribute name
Parameters
String name
*/
setRequestAttributeName: function(name) {
request_attribute_name = name;
},
/*
Map a custom request
Parameters
String method
String url
Object data
*/
map: function(method, url, data) {
// Prepare
var form,
build = function(value, name) {
var inputs = '',
i, j, n;
if(value.pop) {
for(i=0, j=value.length; i<j; ++i) {
if(name) {
n = name+'['+i+']';
}
else {
n = i;
}
inputs += build(value[i], n);
}
}
else if(typeof value == 'object') {
for(i in value) {
if(name) {
n = name + '[' + i + ']';
}
else {
n = i;
}
inputs += build(value[i], n);
}
}
else if(typeof value == 'boolean') {
inputs += '<input type="hidden" name="' + name + '" value="' + (value ? 'on' : '') + '">';
}
else if(typeof value == 'string') {
inputs += '<input type="hidden" name="' + name + '" value="' + value.replace(/"/g, '"') + '">';
}
return inputs;
};
// Format
data = data || {};
// Define method
data[request_attribute_name] = method;
// Create form
form = document.createElement('form');
document.getElementsByTagName('body')[0].appendChild(form);
form.setAttribute('action', url);
form.setAttribute('method', 'post');
// Create inputs
form.innerHTML = build(data);
// Submit!
form.submit();
},
/*
POST request
Parameters
String url
Object data
*/
POST: function(url, data) {
this.map('POST', url, data);
},
/*
PUT request
Parameters
String url
Object data
*/
PUT: function(url, data) {
this.map('PUT', url, data);
},
/*
DELETE request
Parameters
String url
Object data
*/
DELETE: function(url, data) {
this.map('DELETE', url, data);
}
};