1 /* 2 * Copyright (C) 2008 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 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 WebInspector.SidebarSectionTreeElement = function(title, representedObject, hasChildren) 27 { 28 TreeElement.call(this, title.escapeHTML(), representedObject || {}, hasChildren); 29 } 30 31 WebInspector.SidebarSectionTreeElement.prototype = { 32 selectable: false, 33 34 get smallChildren() 35 { 36 return this._smallChildren; 37 }, 38 39 set smallChildren(x) 40 { 41 if (this._smallChildren === x) 42 return; 43 44 this._smallChildren = x; 45 46 if (this._smallChildren) 47 this._childrenListNode.addStyleClass("small"); 48 else 49 this._childrenListNode.removeStyleClass("small"); 50 }, 51 52 onattach: function() 53 { 54 this._listItemNode.addStyleClass("sidebar-tree-section"); 55 }, 56 57 onreveal: function() 58 { 59 if (this.listItemElement) 60 this.listItemElement.scrollIntoViewIfNeeded(false); 61 } 62 } 63 64 WebInspector.SidebarSectionTreeElement.prototype.__proto__ = TreeElement.prototype; 65 66 WebInspector.SidebarTreeElement = function(className, title, subtitle, representedObject, hasChildren) 67 { 68 TreeElement.call(this, "", representedObject || {}, hasChildren); 69 70 if (hasChildren) { 71 this.disclosureButton = document.createElement("button"); 72 this.disclosureButton.className = "disclosure-button"; 73 } 74 75 if (!this.iconElement) { 76 this.iconElement = document.createElement("img"); 77 this.iconElement.className = "icon"; 78 } 79 80 this.statusElement = document.createElement("div"); 81 this.statusElement.className = "status"; 82 83 this.titlesElement = document.createElement("div"); 84 this.titlesElement.className = "titles"; 85 86 this.titleElement = document.createElement("span"); 87 this.titleElement.className = "title"; 88 this.titlesElement.appendChild(this.titleElement); 89 90 this.subtitleElement = document.createElement("span"); 91 this.subtitleElement.className = "subtitle"; 92 this.titlesElement.appendChild(this.subtitleElement); 93 94 this.className = className; 95 this.mainTitle = title; 96 this.subtitle = subtitle; 97 } 98 99 WebInspector.SidebarTreeElement.prototype = { 100 get small() 101 { 102 return this._small; 103 }, 104 105 set small(x) 106 { 107 this._small = x; 108 109 if (this._listItemNode) { 110 if (this._small) 111 this._listItemNode.addStyleClass("small"); 112 else 113 this._listItemNode.removeStyleClass("small"); 114 } 115 }, 116 117 get mainTitle() 118 { 119 return this._mainTitle; 120 }, 121 122 set mainTitle(x) 123 { 124 this._mainTitle = x; 125 this.refreshTitles(); 126 }, 127 128 get subtitle() 129 { 130 return this._subtitle; 131 }, 132 133 set subtitle(x) 134 { 135 this._subtitle = x; 136 this.refreshTitles(); 137 }, 138 139 get bubbleText() 140 { 141 return this._bubbleText; 142 }, 143 144 set bubbleText(x) 145 { 146 if (!this.bubbleElement) { 147 this.bubbleElement = document.createElement("div"); 148 this.bubbleElement.className = "bubble"; 149 this.statusElement.appendChild(this.bubbleElement); 150 } 151 152 this._bubbleText = x; 153 this.bubbleElement.textContent = x; 154 }, 155 156 refreshTitles: function() 157 { 158 var mainTitle = this.mainTitle; 159 if (this.titleElement.textContent !== mainTitle) 160 this.titleElement.textContent = mainTitle; 161 162 var subtitle = this.subtitle; 163 if (subtitle) { 164 if (this.subtitleElement.textContent !== subtitle) 165 this.subtitleElement.textContent = subtitle; 166 this.titlesElement.removeStyleClass("no-subtitle"); 167 } else { 168 this.subtitleElement.textContent = ""; 169 this.titlesElement.addStyleClass("no-subtitle"); 170 } 171 }, 172 173 isEventWithinDisclosureTriangle: function(event) 174 { 175 return event.target === this.disclosureButton; 176 }, 177 178 onattach: function() 179 { 180 this._listItemNode.addStyleClass("sidebar-tree-item"); 181 182 if (this.className) 183 this._listItemNode.addStyleClass(this.className); 184 185 if (this.small) 186 this._listItemNode.addStyleClass("small"); 187 188 if (this.hasChildren && this.disclosureButton) 189 this._listItemNode.appendChild(this.disclosureButton); 190 191 this._listItemNode.appendChild(this.iconElement); 192 this._listItemNode.appendChild(this.statusElement); 193 this._listItemNode.appendChild(this.titlesElement); 194 }, 195 196 onreveal: function() 197 { 198 if (this._listItemNode) 199 this._listItemNode.scrollIntoViewIfNeeded(false); 200 } 201 } 202 203 WebInspector.SidebarTreeElement.prototype.__proto__ = TreeElement.prototype; 204