/** | |
* jquery.dump.js | |
* @author Torkild Dyvik Olsen | |
* @version 1.0 | |
* | |
* A simple debug function to gather information about an object. | |
* Returns a nested tree with information. | |
* | |
*/ | |
(function($) { | |
$.fn.dump = function() { | |
return $.dump(this); | |
} | |
$.dump = function(object) { | |
var recursion = function(obj, level) { | |
if(!level) level = 0; | |
var dump = '', p = ''; | |
for(i = 0; i < level; i++) p += "\t"; | |
t = type(obj); | |
switch(t) { | |
case "string": | |
return '"' + obj + '"'; | |
break; | |
case "number": | |
return obj.toString(); | |
break; | |
case "boolean": | |
return obj ? 'true' : 'false'; | |
case "date": | |
return "Date: " + obj.toLocaleString(); | |
case "array": | |
dump += 'Array ( \n'; | |
$.each(obj, function(k,v) { | |
dump += p +'\t' + k + ' => ' + recursion(v, level + 1) + '\n'; | |
}); | |
dump += p + ')'; | |
break; | |
case "object": | |
dump += 'Object { \n'; | |
$.each(obj, function(k,v) { | |
dump += p + '\t' + k + ': ' + recursion(v, level + 1) + '\n'; | |
}); | |
dump += p + '}'; | |
break; | |
case "jquery": | |
dump += 'jQuery Object { \n'; | |
$.each(obj, function(k,v) { | |
dump += p + '\t' + k + ' = ' + recursion(v, level + 1) + '\n'; | |
}); | |
dump += p + '}'; | |
break; | |
case "regexp": | |
return "RegExp: " + obj.toString(); | |
case "error": | |
return obj.toString(); | |
case "document": | |
case "domelement": | |
dump += 'DOMElement [ \n' | |
+ p + '\tnodeName: ' + obj.nodeName + '\n' | |
+ p + '\tnodeValue: ' + obj.nodeValue + '\n' | |
+ p + '\tinnerHTML: [ \n'; | |
$.each(obj.childNodes, function(k,v) { | |
if(k < 1) var r = 0; | |
if(type(v) == "string") { | |
if(v.textContent.match(/[^\s]/)) { | |
dump += p + '\t\t' + (k - (r||0)) + ' = String: ' + trim(v.textContent) + '\n'; | |
} else { | |
r--; | |
} | |
} else { | |
dump += p + '\t\t' + (k - (r||0)) + ' = ' + recursion(v, level + 2) + '\n'; | |
} | |
}); | |
dump += p + '\t]\n' | |
+ p + ']'; | |
break; | |
case "function": | |
var match = obj.toString().match(/^(.*)\(([^\)]*)\)/im); | |
match[1] = trim(match[1].replace(new RegExp("[\\s]+", "g"), " ")); | |
match[2] = trim(match[2].replace(new RegExp("[\\s]+", "g"), " ")); | |
return match[1] + "(" + match[2] + ")"; | |
case "window": | |
default: | |
dump += 'N/A: ' + t; | |
break; | |
} | |
return dump; | |
} | |
var type = function(obj) { | |
var type = typeof(obj); | |
if(type != "object") { | |
return type; | |
} | |
switch(obj) { | |
case null: | |
return 'null'; | |
case window: | |
return 'window'; | |
case document: | |
return 'document'; | |
case window.event: | |
return 'event'; | |
default: | |
break; | |
} | |
if(obj.jquery) { | |
return 'jquery'; | |
} | |
switch(obj.constructor) { | |
case Array: | |
return 'array'; | |
case Boolean: | |
return 'boolean'; | |
case Date: | |
return 'date'; | |
case Object: | |
return 'object'; | |
case RegExp: | |
return 'regexp'; | |
case ReferenceError: | |
case Error: | |
return 'error'; | |
case null: | |
default: | |
break; | |
} | |
switch(obj.nodeType) { | |
case 1: | |
return 'domelement'; | |
case 3: | |
return 'string'; | |
case null: | |
default: | |
break; | |
} | |
return 'Unknown'; | |
} | |
return recursion(object); | |
} | |
function trim(str) { | |
return ltrim(rtrim(str)); | |
} | |
function ltrim(str) { | |
return str.replace(new RegExp("^[\\s]+", "g"), ""); | |
} | |
function rtrim(str) { | |
return str.replace(new RegExp("[\\s]+$", "g"), ""); | |
} | |
})(jQuery); |