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 29WebInspector.SidebarPane = function(title) 30{ 31 this.element = document.createElement("div"); 32 this.element.className = "pane"; 33 34 this.titleElement = document.createElement("div"); 35 this.titleElement.className = "title"; 36 this.titleElement.tabIndex = 0; 37 this.titleElement.addEventListener("click", this.toggleExpanded.bind(this), false); 38 this.titleElement.addEventListener("keydown", this._onTitleKeyDown.bind(this), false); 39 40 this.bodyElement = document.createElement("div"); 41 this.bodyElement.className = "body"; 42 43 this.element.appendChild(this.titleElement); 44 this.element.appendChild(this.bodyElement); 45 46 this.title = title; 47 this.growbarVisible = false; 48 this.expanded = false; 49} 50 51WebInspector.SidebarPane.prototype = { 52 get title() 53 { 54 return this._title; 55 }, 56 57 set title(x) 58 { 59 if (this._title === x) 60 return; 61 this._title = x; 62 this.titleElement.textContent = x; 63 }, 64 65 get growbarVisible() 66 { 67 return this._growbarVisible; 68 }, 69 70 set growbarVisible(x) 71 { 72 if (this._growbarVisible === x) 73 return; 74 75 this._growbarVisible = x; 76 77 if (x && !this._growbarElement) { 78 this._growbarElement = document.createElement("div"); 79 this._growbarElement.className = "growbar"; 80 this.element.appendChild(this._growbarElement); 81 } else if (!x && this._growbarElement) { 82 if (this._growbarElement.parentNode) 83 this._growbarElement.parentNode(this._growbarElement); 84 delete this._growbarElement; 85 } 86 }, 87 88 get expanded() 89 { 90 return this._expanded; 91 }, 92 93 set expanded(x) 94 { 95 if (x) 96 this.expand(); 97 else 98 this.collapse(); 99 }, 100 101 expand: function() 102 { 103 if (this._expanded) 104 return; 105 this._expanded = true; 106 this.element.addStyleClass("expanded"); 107 if (this.onexpand) 108 this.onexpand(this); 109 }, 110 111 collapse: function() 112 { 113 if (!this._expanded) 114 return; 115 this._expanded = false; 116 this.element.removeStyleClass("expanded"); 117 if (this.oncollapse) 118 this.oncollapse(this); 119 }, 120 121 toggleExpanded: function() 122 { 123 this.expanded = !this.expanded; 124 }, 125 126 _onTitleKeyDown: function(event) 127 { 128 if (isEnterKey(event) || event.keyCode === WebInspector.KeyboardShortcut.KeyCodes.Space) 129 this.toggleExpanded(); 130 } 131} 132 133WebInspector.SidebarPane.prototype.__proto__ = WebInspector.Object.prototype; 134