#

API Docs for: 3.10.3
Show: Inherited Protected Private Deprecated

# 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;