src/cm/media/js/lib/yui/yui3.0.0/build/dump/dump.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
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.0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
build: 1549
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") {
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 (o.nodeType && o.tagName) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
            return o.tagName + '#' + o.id;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
        } else if (o.document && o.navigator) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
            return 'window';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
        } else if (o.location && o.body) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
            return 'document';
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
        } else if (type == "function") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
            return FUN;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
        // dig into child objects the depth specifed. Default 3
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
        d = (L.isNumber(d)) ? d : 3;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
        // arrays [1, 2, 3]
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
        if (type == "array") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
            s.push("[");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
            for (i=0,len=o.length;i<len;i=i+1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
                if (L.isObject(o[i])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
                    s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
                } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
                    s.push(o[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
                }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
                s.push(COMMA);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
            if (s.length > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
                s.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
            }
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
        // regexp /foo/
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
        } else if (type == "regexp") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
            s.push(o.toString());
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
        // objects {k1 => v1, k2 => v2}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
            s.push("{");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
            for (i in o) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
                if (o.hasOwnProperty(i)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
                    try {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
                        s.push(i + ARROW);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
                        if (L.isObject(o[i])) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
                            s.push((d > 0) ? L.dump(o[i], d-1) : OBJ);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
                        } else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
                            s.push(o[i]);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
                        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
                        s.push(COMMA);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
                    } catch(e) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
                        s.push('Error: ' + e.message);
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
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
            if (s.length > 1) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
                s.pop();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
            }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
            s.push("}");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
        }
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
        return s.join("");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
    };
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
    Y.dump = dump;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
    L.dump = dump;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
}, '3.0.0' );