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