File: dump/js/dump.js
- /**
- * Returns a simple string representation of the object or array.
- * Other types of objects will be returned unprocessed. Arrays
- * are expected to be indexed. Use object notation for
- * associative arrays.
- *
- * If included, the dump method is added to the YUI instance.
- *
- * @module dump
- */
-
- var L = Y.Lang,
- OBJ = '{...}',
- FUN = 'f(){...}',
- COMMA = ', ',
- ARROW = ' => ',
-
- /**
- * Returns a simple string representation of the object or array.
- * Other types of objects will be returned unprocessed. Arrays
- * are expected to be indexed.
- *
- * @method dump
- * @param {Object} o The object to dump.
- * @param {Number} d How deep to recurse child objects, default 3.
- * @return {String} the dump result.
- * @for YUI
- */
- dump = function(o, d) {
- var i, len, s = [], type = L.type(o);
-
- // Cast non-objects to string
- // Skip dates because the std toString is what we want
- // Skip HTMLElement-like objects because trying to dump
- // an element will cause an unhandled exception in FF 2.x
- if (!L.isObject(o)) {
- return o + '';
- } else if (type == 'date') {
- return o;
- } else if (o.nodeType && o.tagName) {
- return o.tagName + '#' + o.id;
- } else if (o.document && o.navigator) {
- return 'window';
- } else if (o.location && o.body) {
- return 'document';
- } else if (type == 'function') {
- return FUN;
- }
-
- // dig into child objects the depth specifed. Default 3
- d = (L.isNumber(d)) ? d : 3;
-
- // arrays [1, 2, 3]
- if (type == 'array') {
- s.push('[');
- for (i = 0, len = o.length; i < len; i = i + 1) {
- if (L.isObject(o[i])) {
- s.push((d > 0) ? L.dump(o[i], d - 1) : OBJ);
- } else {
- s.push(o[i]);
- }
- s.push(COMMA);
- }
- if (s.length > 1) {
- s.pop();
- }
- s.push(']');
- // regexp /foo/
- } else if (type == 'regexp') {
- s.push(o.toString());
- // objects {k1 => v1, k2 => v2}
- } else {
- s.push('{');
- for (i in o) {
- if (o.hasOwnProperty(i)) {
- try {
- s.push(i + ARROW);
- if (L.isObject(o[i])) {
- s.push((d > 0) ? L.dump(o[i], d - 1) : OBJ);
- } else {
- s.push(o[i]);
- }
- s.push(COMMA);
- } catch (e) {
- s.push('Error: ' + e.message);
- }
- }
- }
- if (s.length > 1) {
- s.pop();
- }
- s.push('}');
- }
-
- return s.join('');
- };
-
- Y.dump = dump;
- L.dump = dump;
-
-
-