lmd
Version:
LMD: Lazy Module Declaration
99 lines (88 loc) • 2.29 kB
JavaScript
/**
* @name sandbox
*/
(function (sb) {
// Simple JSON stringify
function stringify(object) {
var properties = [];
for (var key in object) {
if (object.hasOwnProperty(key)) {
properties.push(quote(key) + ':' + getValue(object[key]));
}
}
return "{" + properties.join(",") + "}";
}
function getValue(value) {
if (typeof value === "string") {
return quote(value);
} else if (typeof value === "boolean") {
return "" + value;
} else if (value.join) {
if (value.length == 0) {
return "[]";
} else {
var flat = [];
for (var i = 0, len = value.length; i < len; i += 1) {
flat.push(getValue(value[i]));
}
return '[' + flat.join(",") + ']';
}
} else if (typeof value === "number") {
return value;
} else {
return stringify(value);
}
}
function pad(s) {
return '0000'.substr(s.length) + s;
}
function replacer(c) {
switch (c) {
case '\b': return '\\b';
case '\f': return '\\f';
case '\n': return '\\n';
case '\r': return '\\r';
case '\t': return '\\t';
case '"': return '\\"';
case '\\': return '\\\\';
default: return '\\u' + pad(c.charCodeAt(0).toString(16));
}
}
function quote(s) {
return '"' + s.replace(/[\u0000-\u001f"\\\u007f-\uffff]/g, replacer) + '"';
}
function indexOf(item) {
for (var i = this.length; i --> 0;) {
if (this[i] === item) {
return i;
}
}
return -1;
}
/**
* @event *:request-json requests JSON polifill with only stringify function!
*
* @param {Object|undefined} JSON default JSON value
*
* @retuns yes
*/
sb.on('*:request-json', function (JSON) {
if (typeof JSON === "object") {
return [JSON];
}
return [{stringify: stringify}];
});
/**
* @event *:request-indexof requests indexOf polifill
*
* @param {Function|undefined} arrayIndexOf default indexOf value
*
* @retuns yes
*/
sb.on('*:request-indexof', function (arrayIndexOf) {
if (typeof arrayIndexOf === "function") {
return [arrayIndexOf];
}
return [indexOf];
});
}(sandbox));