|
|
| Source Type: | Fully formatted code - Best for understanding and editing |
| Source File: | datadumper.js (Right-click and "save as") |
| File size: | 4k |
PLEASE
SUPPORT THIS SITE! Rather than charging money for this site, I rely on
donations from users to help support the site and offset development time. If you find this code useful or if it helped on your project, please consider donating. Any amount is appreciated! Thanks!
/**
* Copyright (c)2005-2007 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; i<a.length; i++) {
myargs[myargs.length] = a[i];
}
return myargs;
};
function pad(len) {
var ret = "";
for (var i=0; i<len; i++) {
ret += indentText;
}
return ret;
};
function string(o) {
var level = 1;
var indentLevel = indent;
var ret = "";
if (arguments.length>1 && 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; i<list.length; i++) {
if (properties == null) { properties = new Object(); }
properties[list[i]]=1;
}
}
}
if (iterations++>maxIterations) { 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; i<o.length;i++) {
if (i>0) {
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("<HTML><BODY><PRE>");
w.document.writeln(string(o,args(arguments,1)));
w.document.writeln("</PRE></BODY></HTML>");
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;
})();