18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Apple Inc.  All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     its contributors may be used to endorse or promote products derived
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     from this software without specific prior written permission.
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.SidebarPane = function(title)
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.element = document.createElement("div");
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.element.className = "pane";
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.titleElement = document.createElement("div");
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.titleElement.className = "title";
36d0825bca7fe65beaee391d30da42e937db621564Steve Block    this.titleElement.tabIndex = 0;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.titleElement.addEventListener("click", this.toggleExpanded.bind(this), false);
38d0825bca7fe65beaee391d30da42e937db621564Steve Block    this.titleElement.addEventListener("keydown", this._onTitleKeyDown.bind(this), false);
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.bodyElement = document.createElement("div");
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.bodyElement.className = "body";
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.element.appendChild(this.titleElement);
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.element.appendChild(this.bodyElement);
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.title = title;
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.growbarVisible = false;
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    this.expanded = false;
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.SidebarPane.prototype = {
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    get title()
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return this._title;
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    set title(x)
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (this._title === x)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return;
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this._title = x;
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this.titleElement.textContent = x;
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    get growbarVisible()
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return this._growbarVisible;
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    set growbarVisible(x)
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (this._growbarVisible === x)
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return;
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this._growbarVisible = x;
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (x && !this._growbarElement) {
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this._growbarElement = document.createElement("div");
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this._growbarElement.className = "growbar";
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this.element.appendChild(this._growbarElement);
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        } else if (!x && this._growbarElement) {
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (this._growbarElement.parentNode)
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                this._growbarElement.parentNode(this._growbarElement);
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            delete this._growbarElement;
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    get expanded()
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        return this._expanded;
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    set expanded(x)
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (x)
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this.expand();
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        else
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this.collapse();
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    expand: function()
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (this._expanded)
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return;
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this._expanded = true;
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this.element.addStyleClass("expanded");
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (this.onexpand)
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this.onexpand(this);
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    collapse: function()
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (!this._expanded)
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            return;
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this._expanded = false;
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this.element.removeStyleClass("expanded");
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (this.oncollapse)
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            this.oncollapse(this);
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    },
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    toggleExpanded: function()
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    {
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        this.expanded = !this.expanded;
124d0825bca7fe65beaee391d30da42e937db621564Steve Block    },
125d0825bca7fe65beaee391d30da42e937db621564Steve Block
126d0825bca7fe65beaee391d30da42e937db621564Steve Block    _onTitleKeyDown: function(event)
127d0825bca7fe65beaee391d30da42e937db621564Steve Block    {
1286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        if (isEnterKey(event) || event.keyCode === WebInspector.KeyboardShortcut.Keys.Space.code)
129d0825bca7fe65beaee391d30da42e937db621564Steve Block            this.toggleExpanded();
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectWebInspector.SidebarPane.prototype.__proto__ = WebInspector.Object.prototype;
134