summaryrefslogtreecommitdiffstats
path: root/WebCore/page/inspector/Panel.js
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/inspector/Panel.js')
-rw-r--r--WebCore/page/inspector/Panel.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/WebCore/page/inspector/Panel.js b/WebCore/page/inspector/Panel.js
new file mode 100644
index 0000000..7631fa3
--- /dev/null
+++ b/WebCore/page/inspector/Panel.js
@@ -0,0 +1,180 @@
+/*
+ * 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.Panel = function(views)
+{
+ this._visible = false;
+
+ this.element = document.createElement("div");
+ this.element.className = "panel";
+
+ this.views = {};
+ this.viewButtons = [];
+
+ if (views) {
+ var selectViewFunction = function(event)
+ {
+ var clickedView = event.currentTarget.view;
+ clickedView.panel.currentView = clickedView;
+ };
+
+ for (var i = 0; i < views.length; ++i) {
+ var view = views[i];
+ view.panel = this;
+
+ view.buttonElement = document.createElement("button");
+ view.buttonElement.title = view.title;
+ view.buttonElement.addEventListener("click", selectViewFunction, false);
+ view.buttonElement.appendChild(document.createElement("img"));
+ view.buttonElement.view = view;
+
+ view.contentElement = document.createElement("div");
+ view.contentElement.className = "content " + view.name;
+
+ this.views[view.name] = view;
+ this.viewButtons.push(view.buttonElement);
+ this.element.appendChild(view.contentElement);
+ }
+ }
+}
+
+WebInspector.Panel.prototype = {
+ show: function()
+ {
+ this._visible = true;
+ if (!this.element.parentNode)
+ this.attach();
+ this.element.addStyleClass("selected");
+ this.updateToolbar();
+ if (this.currentView && this.currentView.show)
+ this.currentView.show();
+ },
+
+ hide: function()
+ {
+ if (this.currentView && this.currentView.hide)
+ this.currentView.hide();
+ document.getElementById("toolbarButtons").removeChildren();
+ this.element.removeStyleClass("selected");
+ this._visible = false;
+ },
+
+ updateToolbar: function()
+ {
+ var buttonContainer = document.getElementById("toolbarButtons");
+ buttonContainer.removeChildren();
+
+ var buttons = this.viewButtons;
+ if (buttons.length < 2)
+ return;
+
+ for (var i = 0; i < buttons.length; ++i) {
+ var button = buttons[i];
+
+ if (i === 0)
+ button.addStyleClass("first");
+ else if (i === (buttons.length - 1))
+ button.addStyleClass("last");
+
+ if (i) {
+ var divider = document.createElement("img");
+ divider.className = "split-button-divider";
+ buttonContainer.appendChild(divider);
+ }
+
+ button.addStyleClass("split-button");
+ button.addStyleClass("view-button-" + button.title.toLowerCase());
+
+ buttonContainer.appendChild(button);
+ }
+ },
+
+ attach: function()
+ {
+ document.getElementById("panels").appendChild(this.element);
+ },
+
+ detach: function()
+ {
+ if (WebInspector.currentPanel === this)
+ WebInspector.currentPanel = null;
+ if (this.element && this.element.parentNode)
+ this.element.parentNode.removeChild(this.element);
+ },
+
+ get currentView()
+ {
+ return this._currentView;
+ },
+
+ set currentView(x)
+ {
+ if (typeof x === "string" || x instanceof String)
+ x = this.views[x];
+
+ if (this._currentView === x)
+ return;
+
+ if (this !== x.panel) {
+ console.error("Set currentView to a view " + x.title + " whose panel is not this panel");
+ return;
+ }
+
+ if (this._currentView) {
+ this._currentView.buttonElement.removeStyleClass("selected");
+ this._currentView.contentElement.removeStyleClass("selected");
+ if (this._currentView.hide)
+ this._currentView.hide();
+ }
+
+ this._currentView = x;
+
+ if (x) {
+ x.buttonElement.addStyleClass("selected");
+ x.contentElement.addStyleClass("selected");
+ if (x.show)
+ x.show();
+ }
+ },
+
+ get visible()
+ {
+ return this._visible;
+ },
+
+ set visible(x)
+ {
+ if (this._visible === x)
+ return;
+
+ if (x)
+ this.show();
+ else
+ this.hide();
+ }
+}