summaryrefslogtreecommitdiffstats
path: root/WebCore/page/inspector/PropertiesSidebarPane.js
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/inspector/PropertiesSidebarPane.js')
-rw-r--r--WebCore/page/inspector/PropertiesSidebarPane.js139
1 files changed, 139 insertions, 0 deletions
diff --git a/WebCore/page/inspector/PropertiesSidebarPane.js b/WebCore/page/inspector/PropertiesSidebarPane.js
new file mode 100644
index 0000000..0266d53
--- /dev/null
+++ b/WebCore/page/inspector/PropertiesSidebarPane.js
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2007 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.PropertiesSidebarPane = function()
+{
+ WebInspector.SidebarPane.call(this, WebInspector.UIString("Properties"));
+}
+
+WebInspector.PropertiesSidebarPane.prototype = {
+ update: function(object)
+ {
+ var body = this.bodyElement;
+
+ body.removeChildren();
+
+ this.sections = [];
+
+ if (!object)
+ return;
+
+ for (var prototype = object; prototype; prototype = prototype.__proto__) {
+ var section = new WebInspector.ObjectPropertiesSection(prototype);
+ this.sections.push(section);
+ body.appendChild(section.element);
+ }
+ }
+}
+
+WebInspector.PropertiesSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;
+
+WebInspector.ObjectPropertiesSection = function(object)
+{
+ var title = Object.describe(object);
+ var subtitle;
+ if (title.match(/Prototype$/)) {
+ title = title.replace(/Prototype$/, "");
+ subtitle = WebInspector.UIString("Prototype");
+ }
+
+ this.object = object;
+
+ WebInspector.PropertiesSection.call(this, title, subtitle);
+}
+
+WebInspector.ObjectPropertiesSection.prototype = {
+ onpopulate: function()
+ {
+ var properties = Object.sortedProperties(this.object);
+ for (var i = 0; i < properties.length; ++i) {
+ var propertyName = properties[i];
+ if (!this.object.hasOwnProperty(propertyName) || propertyName === "__treeElementIdentifier")
+ continue;
+ this.propertiesTreeOutline.appendChild(new WebInspector.ObjectPropertyTreeElement(this.object, propertyName));
+ }
+ }
+}
+
+WebInspector.ObjectPropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype;
+
+WebInspector.ObjectPropertyTreeElement = function(parentObject, propertyName)
+{
+ this.parentObject = parentObject;
+ this.propertyName = propertyName;
+
+ var childObject = this.safePropertyValue(parentObject, propertyName);
+ var isGetter = parentObject.__lookupGetter__(propertyName);
+
+ var title = "<span class=\"name\">" + propertyName.escapeHTML() + "</span>: ";
+ if (!isGetter)
+ title += "<span class=\"value\">" + Object.describe(childObject, true).escapeHTML() + "</span>";
+ else
+ // FIXME: this should show something like "getter" once we can change localization (bug 16734).
+ title += "<span class=\"value dimmed\">&mdash;</span>";
+
+ var hasSubProperties = false;
+ var type = typeof childObject;
+ if (childObject && (type === "object" || type === "function")) {
+ for (subPropertyName in childObject) {
+ if (subPropertyName === "__treeElementIdentifier")
+ continue;
+ hasSubProperties = true;
+ break;
+ }
+ }
+
+ TreeElement.call(this, title, null, hasSubProperties);
+}
+
+WebInspector.ObjectPropertyTreeElement.prototype = {
+ safePropertyValue: function(object, propertyName)
+ {
+ var getter = object.__lookupGetter__(propertyName);
+ if (getter)
+ return;
+ return object[propertyName];
+ },
+
+ onpopulate: function()
+ {
+ if (this.children.length)
+ return;
+
+ var childObject = this.safePropertyValue(this.parentObject, this.propertyName);
+ var properties = Object.sortedProperties(childObject);
+ for (var i = 0; i < properties.length; ++i) {
+ var propertyName = properties[i];
+ if (propertyName === "__treeElementIdentifier")
+ continue;
+ this.appendChild(new WebInspector.ObjectPropertyTreeElement(childObject, propertyName));
+ }
+ }
+}
+
+WebInspector.ObjectPropertyTreeElement.prototype.__proto__ = TreeElement.prototype;