1/*
2 * Copyright (C) 2007 Apple Inc.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 *
8 * 1.  Redistributions of source code must retain the above copyright
9 *     notice, this list of conditions and the following disclaimer.
10 * 2.  Redistributions in binary form must reproduce the above copyright
11 *     notice, this list of conditions and the following disclaimer in the
12 *     documentation and/or other materials provided with the distribution.
13 * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
14 *     its contributors may be used to endorse or promote products derived
15 *     from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/**
30 * @constructor
31 * @extends {WebInspector.SidebarPane}
32 */
33WebInspector.PropertiesSidebarPane = function()
34{
35    WebInspector.SidebarPane.call(this, WebInspector.UIString("Properties"));
36}
37
38WebInspector.PropertiesSidebarPane._objectGroupName = "properties-sidebar-pane";
39
40WebInspector.PropertiesSidebarPane.prototype = {
41    update: function(node)
42    {
43        var body = this.bodyElement;
44
45        if (!node) {
46            body.removeChildren();
47            this.sections = [];
48            return;
49        }
50
51        WebInspector.RemoteObject.resolveNode(node, WebInspector.PropertiesSidebarPane._objectGroupName, nodeResolved.bind(this));
52
53        function nodeResolved(object)
54        {
55            if (!object)
56                return;
57            function protoList()
58            {
59                var proto = this;
60                var result = {};
61                var counter = 1;
62                while (proto) {
63                    result[counter++] = proto;
64                    proto = proto.__proto__;
65                }
66                return result;
67            }
68            object.callFunction(protoList, undefined, nodePrototypesReady.bind(this));
69            object.release();
70        }
71
72        function nodePrototypesReady(object)
73        {
74            if (!object)
75                return;
76            object.getOwnProperties(fillSection.bind(this));
77        }
78
79        function fillSection(prototypes)
80        {
81            if (!prototypes)
82                return;
83
84            var body = this.bodyElement;
85            body.removeChildren();
86            this.sections = [];
87
88            // Get array of prototype user-friendly names.
89            for (var i = 0; i < prototypes.length; ++i) {
90                if (!parseInt(prototypes[i].name, 10))
91                    continue;
92
93                var prototype = prototypes[i].value;
94                var title = prototype.description;
95                if (title.match(/Prototype$/))
96                    title = title.replace(/Prototype$/, "");
97                var section = new WebInspector.ObjectPropertiesSection(prototype, title);
98                this.sections.push(section);
99                body.appendChild(section.element);
100            }
101        }
102    },
103
104    __proto__: WebInspector.SidebarPane.prototype
105}
106