includejs
Version:
IncludeJS Resource Builder Tool
115 lines (97 loc) • 3.96 kB
JavaScript
void
function() {
var _cache = {};
/**
* @augments
* 1. {String}, {Value},{Value} ... = Template: '%1,%2'
* 2. {String}, {Object} = Template: '#{key} #{key2}'
*/
String.format = function(str) {
if (typeof arguments[1] != 'object') {
for (var i = 1; i < arguments.length; i++) {
var regexp = (_cache[i] || (_cache[i] = new RegExp('%' + i, 'g')));
str = str.replace(regexp, arguments[i]);
}
return str;
}
var output = '',
lastIndex = 0,
obj = arguments[1];
while (1) {
var index = str.indexOf('#{', lastIndex);
if (index == -1) break;
output += str.substring(lastIndex, index);
var end = str.indexOf('}', index);
output += obj[str.substring(index + 2, end)];
lastIndex = ++end;
}
output += str.substring(lastIndex);
return output;
}
Object.defaults = function(obj, def) {
for (var key in def) if (obj[key] == null) obj[key] = def[key];
return obj;
}
Object.clear = function(obj, arg) {
if (arg instanceof Array) {
for (var i = 0, x, length = arg.length; x = arg[i], i < length; i++) if (x in obj) delete obj[x];
} else if (typeof arg === 'object') {
for (var key in arg) if (key in obj) delete obj[key];
}
return obj;
}
Object.extend = function(target, source) {
if (target == null) target = {};
if (source == null) return target;
for (var key in source) if (source[key] != null) target[key] = source[key];
return target;
}
Object.getProperty = function(o, chain) {
if (typeof o !== 'object' || chain == null) return o;
if (typeof chain === 'string') chain = chain.split('.');
if (chain.length === 1) return o[chain[0]];
return Object.getProperty(o[chain.shift()], chain);
}
Object.observe = function(obj, property, callback) {
if (obj.__observers == null) obj.__observers = {};
if (obj.__observers[property]) {
obj.__observers[property].push(callback);
return;
};
(obj.__observers[property] || (obj.__observers[property] = [])).push(callback);
var chain = property.split('.'),
parent = obj,
key = property;
if (chain.length > 1) {
key = chain.pop();
parent = Object.getProperty(obj, chain);
}
var value = parent[key];
Object.defineProperty(parent, key, {
get: function() {
return value;
},
set: function(x) {
value = x;
for (var i = 0, fn, length = obj.__observers[property].length; fn = obj.__observers[property][i], i < length; i++) {
fn(x);
}
}
})
}
Date.format = function(date, format) {
if (!format) format = "MM/dd/yyyy";
function pad(value) {
return value > 9 ? value : '0' + value;
}
format = format.replace("MM", pad(date.getMonth() + 1));
var _year = date.getFullYear();
if (format.indexOf("yyyy") > -1) format = format.replace("yyyy", _year);
else if (format.indexOf("yy") > -1) format = format.replace("yy", _year.toString().substr(2, 2));
format = format.replace("dd", pad(date.getDate()));
if (format.indexOf("HH") > -1) format = format.replace("HH", pad(date.getHours()));
if (format.indexOf("mm") > -1) format = format.replace("mm", pad(date.getMinutes()));
if (format.indexOf("ss") > -1) format = format.replace("ss", pad(date.getSeconds()));
return format;
}
}();