src/cm/media/js/lib/yui/yui_3.0.0b1/build/dump/dump.js
author raph
Mon, 23 Nov 2009 15:14:29 +0100
changeset 0 40c8f766c9b8
permissions -rw-r--r--
import from internal svn r 4007
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
/*
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
Copyright (c) 2009, Yahoo! Inc. All rights reserved.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
Code licensed under the BSD License:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
http://developer.yahoo.net/yui/license.txt
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
version: 3.0.0b1
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1163
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
*/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
YUI.add('dump', function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
/**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
 * Returns a simple string representation of the object or array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
 * Other types of objects will be returned unprocessed.  Arrays
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
 * are expected to be indexed.  Use object notation for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
 * associative arrays.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
 * If included, the dump method is added to the YUI instance.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
 *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
 * @module dump
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
 */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
    var L=Y.Lang, OBJ='{...}', FUN='f(){...}', COMMA=', ', ARROW=' => ',
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
     * The following methods are added to the YUI instance
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
     * @class YUI~dump
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
    /**
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
     * Returns a simple string representation of the object or array.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
     * Other types of objects will be returned unprocessed.  Arrays
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
     * are expected to be indexed.  Use object notation for
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
     * associative arrays.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
     * @TODO dumping a window is causing an unhandled exception in
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
     * FireFox.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
     * This method is in the 'dump' module, which is not bundled with
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
     * the core YUI object
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
     *
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
     * @method dump
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
     * @param o {object} The object to dump
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
     * @param d {int} How deep to recurse child objects, default 3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
     * @return {string} the dump result
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
     */
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
    dump = function(o, d) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
        var i, len, s = [], type = L.type(o);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
        // Cast non-objects to string
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
        // Skip dates because the std toString is what we want
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
        // Skip HTMLElement-like objects because trying to dump 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
        // an element will cause an unhandled exception in FF 2.x
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
        if (!L.isObject(o)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
            return o + "";
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
        } else if (type == "date" || ("nodeType" in o && "tagName" in o)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
            return o;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
        } else if (type == "function") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
            return FUN;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        // dig into child objects the depth specifed. Default 3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
        d = (L.isNumber(d)) ? d : 3;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
        // arrays [1, 2, 3]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        if (type == "array") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
            s.push("[");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
            for (i=0,len=o.length;i<len;i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
                if (L.isObject(o[i])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
                    s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
                    s.push(o[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
                s.push(COMMA);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
            if (s.length > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
                s.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
            s.push("]");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
        // regexp /foo/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
        } else if (type == "regexp") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
            s.push(o.toString());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
        // objects {k1 => v1, k2 => v2}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
            s.push("{");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
            for (i in o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
                if (o.hasOwnProperty(i)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
                    s.push(i + ARROW);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
                    if (L.isObject(o[i])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
                        s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
                    } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
                        s.push(o[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                    }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
                    s.push(COMMA);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
            if (s.length > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                s.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
            s.push("}");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
        return s.join("");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
    Y.dump = dump;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
    L.dump = dump;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
}, '3.0.0b1' );