~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/static/javascript/yui/build/dump/dump.js

  • Committer: Martin Albisetti
  • Date: 2008-10-20 21:18:06 UTC
  • mfrom: (229.1.3 add-yui-3)
  • Revision ID: martin.albisetti@canonical.com-20081020211806-rzs0ya40gz9wcpoz
Added yui library to the tree. Welcome to the future. (Paul Hummer)

Show diffs side-by-side

added added

removed removed

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