cute
Version:
Minifier-friendly JavaScript built for speed and power.
82 lines (78 loc) • 2.15 kB
JavaScript
Cute.xhr = function () {
return window.XMLHttpRequest ? new XMLHttpRequest()
: window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP')
: 0
}
var jsonReplacements = {
'"': '\\"',
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'\\': '\\\\',
'\u0000': '\\u0000',
'\u0001': '\\u0001',
'\u0002': '\\u0002',
'\u0003': '\\u0003',
'\u0004': '\\u0004',
'\u0005': '\\u0005',
'\u0006': '\\u0006',
'\u0007': '\\u0007',
'\u000b': '\\u000b',
'\u000e': '\\u000e',
'\u000f': '\\u000f',
'\u0010': '\\u0010',
'\u0011': '\\u0011',
'\u0012': '\\u0012',
'\u0013': '\\u0013',
'\u0014': '\\u0014',
'\u0015': '\\u0015',
'\u0016': '\\u0016',
'\u0017': '\\u0017',
'\u0018': '\\u0018',
'\u0019': '\\u0019',
'\u001a': '\\u001a',
'\u001b': '\\u001b',
'\u001c': '\\u001c',
'\u001d': '\\u001d',
'\u001e': '\\u001e',
'\u001f': '\\u001f'
}
var jsonQuote = '"'
Cute.stringify = function (data, _stack) {
if (Cute.isDate(data)) {
data = jsonQuote + Cute.stamp(data) + jsonQuote
} else if (data && Cute.isFunction(data.toJSON)) {
data = Cute.string(data.toJSON())
} else if (Cute.isString(data)) {
data = jsonQuote + data.replace(/["\u0000-\u001f\b\t\n\f\r\\]/g, function (c) {
return jsonReplacements[c]
}) + jsonQuote
} else if (Cute.isFunction(data) || Cute.isUndefined(data)) {
return _stack ? 'null' : undefined
} else if (data && Cute.isObject(data) && !(data instanceof Boolean) && !(data instanceof Number)) {
_stack = _stack || []
var isCircular
Cute.each(_stack, function (item) {
if (item === data) {
isCircular = 1
}
})
if (isCircular) {
return '"[Circular ' + (_stack.length) + ']"'
}
_stack.push(data)
var isArray = Cute.isArray(data)
var parts = []
Cute.each(data, function (value, key) {
value = Cute.stringify(value, _stack)
parts.push(isArray ? value : Cute.stringify(key) + ':' + value)
})
_stack.pop()
data = (isArray ? '[' : '{') + parts.join(',') + (isArray ? ']' : '}')
} else {
data = Cute.string(data)
}
return data
}