• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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        node.resolveToObject(WebInspector.PropertiesSidebarPane._objectGroupName, nodeResolved.bind(this));
52
53        /**
54         * @this {WebInspector.PropertiesSidebarPane}
55         */
56        function nodeResolved(object)
57        {
58            if (!object)
59                return;
60
61            /**
62             * @suppressReceiverCheck
63             * @this {*}
64             */
65            function protoList()
66            {
67                var proto = this;
68                var result = {};
69                var counter = 1;
70                while (proto) {
71                    result[counter++] = proto;
72                    proto = proto.__proto__;
73                }
74                return result;
75            }
76            object.callFunction(protoList, undefined, nodePrototypesReady.bind(this));
77            object.release();
78        }
79
80        /**
81         * @this {WebInspector.PropertiesSidebarPane}
82         */
83        function nodePrototypesReady(object, wasThrown)
84        {
85            if (!object || wasThrown)
86                return;
87            object.getOwnProperties(fillSection.bind(this));
88        }
89
90        /**
91         * @this {WebInspector.PropertiesSidebarPane}
92         */
93        function fillSection(prototypes)
94        {
95            if (!prototypes)
96                return;
97
98            var body = this.bodyElement;
99            body.removeChildren();
100            this.sections = [];
101
102            // Get array of prototype user-friendly names.
103            for (var i = 0; i < prototypes.length; ++i) {
104                if (!parseInt(prototypes[i].name, 10))
105                    continue;
106
107                var prototype = prototypes[i].value;
108                var title = prototype.description;
109                if (title.match(/Prototype$/))
110                    title = title.replace(/Prototype$/, "");
111                var section = new WebInspector.ObjectPropertiesSection(prototype, title);
112                this.sections.push(section);
113                body.appendChild(section.element);
114            }
115        }
116    },
117
118    __proto__: WebInspector.SidebarPane.prototype
119}
120