109 lines
3.3 KiB
JavaScript
109 lines
3.3 KiB
JavaScript
|
(function($) {
|
||
|
|
||
|
function print_array(obj, opts) {
|
||
|
var result = [];
|
||
|
for (var i = 0; i < Math.min(opts.max_array, obj.length); i++)
|
||
|
result.push($.print(obj[i], $.extend({}, opts, { max_array: 3, max_string: 40 })));
|
||
|
|
||
|
if (obj.length > opts.max_array)
|
||
|
result.push((obj.length - opts.max_array) + ' more...');
|
||
|
if (result.length == 0) return "[]"
|
||
|
return "[ " + result.join(", ") + " ]";
|
||
|
}
|
||
|
|
||
|
function print_element(obj) {
|
||
|
if (obj.nodeType == 1) {
|
||
|
var result = [];
|
||
|
var properties = [ 'className', 'id' ];
|
||
|
var extra = {
|
||
|
'input': ['type', 'name', 'value'],
|
||
|
'a': ['href', 'target'],
|
||
|
'form': ['method', 'action'],
|
||
|
'script': ['src'],
|
||
|
'link': ['href'],
|
||
|
'img': ['src']
|
||
|
};
|
||
|
|
||
|
$.each(properties.concat(extra[obj.tagName.toLowerCase()] || []), function(){
|
||
|
if (obj[this])
|
||
|
result.push(' ' + this.replace('className', 'class') + "=" + $.print(obj[this]))
|
||
|
});
|
||
|
return "<" + obj.tagName.toLowerCase()
|
||
|
+ result.join('') + ">";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function print_object(obj, opts) {
|
||
|
var seen = opts.seen || [ obj ];
|
||
|
|
||
|
var result = [], key, value;
|
||
|
for (var k in obj) {
|
||
|
if (obj.hasOwnProperty(k) && $.inArray(obj[k], seen) < 0) {
|
||
|
seen.push(obj[k]);
|
||
|
value = $.print(obj[k], $.extend({}, opts, { max_array: 6, max_string: 40, seen: seen }));
|
||
|
} else
|
||
|
value = "...";
|
||
|
result.push(k + ": " + value);
|
||
|
}
|
||
|
if (result.length == 0) return "{}";
|
||
|
return "{ " + result.join(", ") + " }";
|
||
|
}
|
||
|
|
||
|
function print_string(value, opts) {
|
||
|
var character_substitutions = {
|
||
|
'\b': '\\b',
|
||
|
'\t': '\\t',
|
||
|
'\n': '\\n',
|
||
|
'\f': '\\f',
|
||
|
'\r': '\\r',
|
||
|
'"' : '\\"',
|
||
|
'\\': '\\\\'
|
||
|
};
|
||
|
var r = /["\\\x00-\x1f\x7f-\x9f]/g;
|
||
|
|
||
|
var str = r.test(value)
|
||
|
? value.replace(r, function (a) {
|
||
|
var c = character_substitutions[a];
|
||
|
if (c) return c;
|
||
|
c = a.charCodeAt();
|
||
|
return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
|
||
|
})
|
||
|
: value ;
|
||
|
if (str.length > opts.max_string)
|
||
|
return str.slice(0, opts.max_string + 1) + '..."';
|
||
|
else
|
||
|
return str;
|
||
|
}
|
||
|
|
||
|
$.print = function(obj, options) {
|
||
|
var opts = $.extend({}, { max_array: 10, max_string: 100 }, options);
|
||
|
|
||
|
if (typeof obj == 'undefined')
|
||
|
return "undefined";
|
||
|
else if (typeof obj == 'boolean')
|
||
|
return obj.toString();
|
||
|
else if (typeof obj == 'number')
|
||
|
return obj.toString();
|
||
|
else if (!obj)
|
||
|
return "null";
|
||
|
else if (typeof obj == 'string')
|
||
|
return print_string(obj, opts);
|
||
|
else if (obj instanceof RegExp)
|
||
|
return obj.toString();
|
||
|
else if (obj instanceof Array || obj.callee || obj.item)
|
||
|
return print_array(obj, opts);
|
||
|
else if (typeof obj == 'function' || obj instanceof Function)
|
||
|
return obj.toString().match(/^([^)]*\))/)[1];
|
||
|
else if (obj.nodeType)
|
||
|
return print_element(obj);
|
||
|
else if (obj instanceof jQuery)
|
||
|
return "$(" + $.print(obj.get()) + ")";
|
||
|
else if (obj instanceof Error)
|
||
|
return print_object(obj, $.extend({}, options, { max_string: 200 }));
|
||
|
else if (obj instanceof Object)
|
||
|
return print_object(obj, opts);
|
||
|
else
|
||
|
return obj.toString().replace(/\n\s*/g, '');
|
||
|
}
|
||
|
|
||
|
})(jQuery);
|