Skip to content

Instantly share code, notes, and snippets.

@A1rPun
Last active August 29, 2015 14:05
Show Gist options
  • Save A1rPun/6dcdf29755a0b594aa65 to your computer and use it in GitHub Desktop.
Save A1rPun/6dcdf29755a0b594aa65 to your computer and use it in GitHub Desktop.
;var _ = (function () {
function lo() { }
lo.prototype = {
//XMLHttpRequest wrapper
ajax: function() {
var a = arguments,
requestData,
opts = { method: 'GET', data: null, url: '', async: true, done: null, fail: null, always: null };
if (_.type(a[0]) === 'string') {
opts.url = a[0];
opts.done = a[1];
opts.fail = a[2];
} else if (_.type(a[0]) === 'object') {
opts = _.extend(opts, a[0]);
}
var request = new XMLHttpRequest();
request.open(opts.method, opts.url, opts.async);
request.onload = function() {
var fn = request.status >= 200 && request.status < 400 ? 'done' : 'fail';
opts[fn] && opts[fn](request.responseText, request);
opts.always && opts.always(request.responseText, request);
};
if (opts.headers) {
for (var header in opts.headers) {
var value = opts.headers[header];
request.setRequestHeader(header, value);
}
}
if(opts.data){
var list = [];
for (var key in opts.data) {
list.push(key + '=' + opts.data[key]);
}
requestData = list.join('&');
}
if (opts.fail) {
request.onerror = opts.fail;
}
request.send(requestData);
},
//Copy objects to a new object
extend: function() {
var o = {},
a = arguments;
for (var i = 0, j = a.length; i < j; i++) {
var n = a[i];
for (var prop in n) {
if (n.hasOwnProperty(prop)) {
if (_.type(n[prop]) === 'object') {
o[prop] = _.extend(o[prop], n[prop]);
} else {
o[prop] = n[prop];
}
}
}
}
return o;
},
//Formats the passed value to
//Currently supported: Date, String, Number
format: function() {
var a = arguments;
if (!a.length) return;
var value = a[0];
switch (this.type(value)) {
case 'string':
return value.replace(/{(\d+)}/g, function (match, number) {
return typeof a[number] != 'undefined' ? a[number] : match;
});
case 'date':
var format = a[1] || 'yyyy-MM-dd';
var o = {
"M+": value.getMonth() + 1, //month
"d+": value.getDate(), //day
"h+": value.getHours(), //hour
"m+": value.getMinutes(), //minute
"s+": value.getSeconds(), //second
"q+": Math.floor((value.getMonth() + 3) / 3), //quarter
"S": value.getMilliseconds() //millisecond
};
//Format Year
if (/(y+)/.test(format))
format = format.replace(RegExp.$1, (value.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o)
if (new RegExp("(" + k + ")").test(format))
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
return format;
case 'number':
var decimals = a[1] || 2;
return +(+value).toFixed(decimals);
default:
throw new Error('Type not supported by _.format');
}
},
type: function(obj) {
return ({}).toString.call(obj).match(/\s([a-zA-Z]+)/)[1].toLowerCase();
}
};
return new lo();
}());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment