UNPKG

lmd

Version:

LMD: Lazy Module Declaration

99 lines (88 loc) 2.29 kB
/** * @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));