NOBUG: Fixed file access permissions
[moodle.git] / lib / yuilib / 3.13.0 / dump / dump-debug.js
blobe32bc26a05764f46ef9622d98a26f7d8debec38d
1 /*
2 YUI 3.13.0 (build 508226d)
3 Copyright 2013 Yahoo! Inc. All rights reserved.
4 Licensed under the BSD License.
5 http://yuilibrary.com/license/
6 */
8 YUI.add('dump', function (Y, NAME) {
10 /**
11  * Returns a simple string representation of the object or array.
12  * Other types of objects will be returned unprocessed.  Arrays
13  * are expected to be indexed.  Use object notation for
14  * associative arrays.
15  *
16  * If included, the dump method is added to the YUI instance.
17  *
18  * @module dump
19  */
21     var L = Y.Lang,
22         OBJ = '{...}',
23         FUN = 'f(){...}',
24         COMMA = ', ',
25         ARROW = ' => ',
27     /**
28      * Returns a simple string representation of the object or array.
29      * Other types of objects will be returned unprocessed.  Arrays
30      * are expected to be indexed.
31      *
32      * @method dump
33      * @param {Object} o The object to dump.
34      * @param {Number} d How deep to recurse child objects, default 3.
35      * @return {String} the dump result.
36      * @for YUI
37      */
38     dump = function(o, d) {
39         var i, len, s = [], type = L.type(o);
41         // Cast non-objects to string
42         // Skip dates because the std toString is what we want
43         // Skip HTMLElement-like objects because trying to dump
44         // an element will cause an unhandled exception in FF 2.x
45         if (!L.isObject(o)) {
46             return o + '';
47         } else if (type == 'date') {
48             return o;
49         } else if (o.nodeType && o.tagName) {
50             return o.tagName + '#' + o.id;
51         } else if (o.document && o.navigator) {
52             return 'window';
53         } else if (o.location && o.body) {
54             return 'document';
55         } else if (type == 'function') {
56             return FUN;
57         }
59         // dig into child objects the depth specifed. Default 3
60         d = (L.isNumber(d)) ? d : 3;
62         // arrays [1, 2, 3]
63         if (type == 'array') {
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         // regexp /foo/
78         } else if (type == 'regexp') {
79             s.push(o.toString());
80         // objects {k1 => v1, k2 => v2}
81         } else {
82             s.push('{');
83             for (i in o) {
84                 if (o.hasOwnProperty(i)) {
85                     try {
86                         s.push(i + ARROW);
87                         if (L.isObject(o[i])) {
88                             s.push((d > 0) ? L.dump(o[i], d - 1) : OBJ);
89                         } else {
90                             s.push(o[i]);
91                         }
92                         s.push(COMMA);
93                     } catch (e) {
94                         s.push('Error: ' + e.message);
95                     }
96                 }
97             }
98             if (s.length > 1) {
99                 s.pop();
100             }
101             s.push('}');
102         }
104         return s.join('');
105     };
107     Y.dump = dump;
108     L.dump = dump;
112 }, '3.13.0', {"requires": ["yui-base"]});