/** * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com) * * Dual licensed under the MIT and GPL licenses. * This basically means you can use this code however you want for * free, but don't claim to have written it yourself! * Donations always accepted: http://www.JavascriptToolbox.com/donate/ * * Please do not link to the .js files on javascripttoolbox.com from * your site. Copy the files locally to your server instead. * */ var Dumper = (function(){ // "Private" var maxIterations = 1000; var maxDepth = -1; // Max depth that Dumper will traverse in object var iterations = 0; var indent = 1; var indentText = " "; var newline = "\n"; var object = null; // Keeps track of the root object passed in var properties = null; // Holds properties of top-level object to traverse - others are ignored function args(a,index) { var myargs = new Array(); for (var i=index; i1 && typeof(arguments[1])=="number") { level = arguments[1]; indentLevel = arguments[2]; if (o == object) { return "[original object]"; } } else { iterations = 0; object = o; // If a list of properties are passed in if (arguments.length>1) { var list = arguments; var listIndex = 1; if (typeof(arguments[1])=="object") { list = arguments[1]; listIndex = 0; } for (var i=listIndex; imaxIterations) { return "[Max Iterations Reached]"; } // Just in case, so the script doesn't hang if (maxDepth != -1 && level > (maxDepth+1)) { return "..."; } // undefined if (typeof(o)=="undefined") { return "[undefined]"; } // NULL if (o==null) { return "[null]"; } // DOM Object if (o==window) { return "[window]"; } if (o==window.document) { return "[document]"; } // FUNCTION if (typeof(o)=="function") { return "[function]"; } // BOOLEAN if (typeof(o)=="boolean") { return (o)?"true":"false"; } // STRING if (typeof(o)=="string") { return "'" + o + "'"; } // NUMBER if (typeof(o)=="number") { return o; } if (typeof(o)=="object") { if (typeof(o.length)=="number" ) { // ARRAY if (maxDepth != -1 && level > maxDepth) { return "[ ... ]"; } ret = "["; for (var i=0; i0) { ret += "," + newline + pad(indentLevel); } else { ret += newline + pad(indentLevel); } ret += string(o[i],level+1,indentLevel-0+indent); } if (i > 0) { ret += newline + pad(indentLevel-indent); } ret += "]"; return ret; } else { // OBJECT if (maxDepth != -1 && level > maxDepth) { return "{ ... }"; } ret = "{"; var count = 0; for (i in o) { if (o==object && properties!=null && properties[i]!=1) { // do nothing with this node } else { if (typeof(o[i]) != "unknown") { var processAttribute = true; // Check if this is a DOM object, and if so, if we have to limit properties to look at if (o.ownerDocument|| o.tagName || (o.nodeType && o.nodeName)) { processAttribute = false; if (i=="tagName" || i=="nodeName" || i=="nodeType" || i=="id" || i=="className") { processAttribute = true; } } if (processAttribute) { if (count++>0) { ret += "," + newline + pad(indentLevel); } else { ret += newline + pad(indentLevel); } ret += "'" + i + "' => " + string(o[i],level+1,indentLevel-0+i.length+6+indent); } } } } if (count > 0) { ret += newline + pad(indentLevel-indent); } ret += "}"; return ret; } } }; string.popup = function(o) { var w = window.open("about:blank"); w.document.open(); w.document.writeln("
");
		w.document.writeln(string(o,args(arguments,1)));
		w.document.writeln("
"); w.document.close(); }; string.alert = function(o) { alert(string(o,args(arguments,1))); }; string.write = function(o) { var argumentsIndex = 1; var d = document; if (arguments.length>1 && arguments[1]==window.document) { d = arguments[1]; argumentsIndex = 2; } var temp = indentText; indentText = " "; d.write(string(o,args(arguments,argumentsIndex))); indentText = temp; }; string.setMaxIterations = function(i) { maxIterations = i; }; string.setMaxDepth = function(i) { maxDepth = i; }; string.$VERSION = 1.0; return string; })();