1e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/* 2e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 4e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * met: 7e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 8e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * in the documentation and/or other materials provided with the 13e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * distribution. 14e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * this software without specific prior written permission. 17e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * 18e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 30e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 31e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/** 32e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @constructor 33e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @extends {WebInspector.Object} 34a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.LayerTreeModel} model 35a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!TreeOutline} treeOutline 36e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 37e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTree = function(model, treeOutline) 38e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 39e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) WebInspector.Object.call(this); 40e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._model = model; 41e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._treeOutline = treeOutline; 42e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._treeOutline.childrenListElement.addEventListener("mousemove", this._onMouseMove.bind(this), false); 43e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._treeOutline.childrenListElement.addEventListener("mouseout", this._onMouseMove.bind(this), false); 44c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) this._treeOutline.childrenListElement.addEventListener("contextmenu", this._onContextMenu.bind(this), true); 45e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._model.addEventListener(WebInspector.LayerTreeModel.Events.LayerTreeChanged, this._update.bind(this)); 46e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._lastHoveredNode = null; 47e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 48e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 49e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/** 50e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @enum {string} 51e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 52e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTree.Events = { 53e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) LayerHovered: "LayerHovered", 54e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) LayerSelected: "LayerSelected" 55e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 56e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 57e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTree.prototype = { 58e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 59a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Layer} layer 60e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 61e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) selectLayer: function(layer) 62e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 63e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.hoverLayer(null); 64e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var node = layer && this._treeOutline.getCachedTreeElement(layer); 65e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (node) 66e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) node.revealAndSelect(true); 67c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) else if (this._treeOutline.selectedTreeElement) 68c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) this._treeOutline.selectedTreeElement.deselect(); 69e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 70e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 71e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 72a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?WebInspector.Layer} layer 73e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 74e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) hoverLayer: function(layer) 75e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 76e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var node = layer && this._treeOutline.getCachedTreeElement(layer); 77e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (node === this._lastHoveredNode) 78e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return; 79e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (this._lastHoveredNode) 80e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._lastHoveredNode.setHovered(false); 81e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (node) 82e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) node.setHovered(true); 83e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._lastHoveredNode = node; 84e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 85e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 86e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) _update: function() 87e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 88e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var seenLayers = {}; 89e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 90e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 91a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Layer} layer 92e08f70592b3fc0d5e68b9b914c9196e813720070Torne (Richard Coles) * @this {WebInspector.LayerTree} 93e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 94e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) function updateLayer(layer) 95e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 96e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var id = layer.id(); 97e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (seenLayers[id]) 98e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) console.assert(false, "Duplicate layer id: " + id); 99e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) seenLayers[id] = true; 100e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var node = this._treeOutline.getCachedTreeElement(layer); 1018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) var parent = layer === this._model.contentRoot() ? this._treeOutline : this._treeOutline.getCachedTreeElement(layer.parent()); 102e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (!parent) 103e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) console.assert(false, "Parent is not in the tree"); 104e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (!node) { 105e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) node = new WebInspector.LayerTreeElement(this, layer); 106e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) parent.appendChild(node); 107e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } else { 108e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var oldParentId = node.parent.representedObject && node.parent.representedObject.id(); 109e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (oldParentId !== layer.parentId()) { 110e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) (node.parent || this._treeOutline).removeChild(node); 111e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) parent.appendChild(node); 112e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 113e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) node._update(); 114e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 115e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 116f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (this._model.contentRoot()) 117f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) this._model.forEachLayer(updateLayer.bind(this), this._model.contentRoot()); 1189bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) // Cleanup layers that don't exist anymore from tree. 119a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) for (var node = /** @type {!TreeElement|!TreeOutline|null} */(this._treeOutline.children[0]); node && !node.root;) { 1209bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (seenLayers[node.representedObject.id()]) { 1219bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) node = node.traverseNextTreeElement(false); 1229bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } else { 1239bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) var nextNode = node.nextSibling || node.parent; 1249bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) node.parent.removeChild(node); 1259bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (node === this._lastHoveredNode) 1269bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) this._lastHoveredNode = null; 1279bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) node = nextNode; 128e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 129e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) } 130e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 131e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 132e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 133a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?Event} event 134e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 135e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) _onMouseMove: function(event) 136e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 137e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var node = this._treeOutline.treeElementFromPoint(event.pageX, event.pageY); 138e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (node === this._lastHoveredNode) 139e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return; 140e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.LayerTree.Events.LayerHovered, node && node.representedObject); 141e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 142e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 143e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 144a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.LayerTreeElement} node 145e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 146e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) _selectedNodeChanged: function(node) 147e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var layer = /** @type {!WebInspector.Layer} */ (node.representedObject); 149e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.dispatchEventToListeners(WebInspector.LayerTree.Events.LayerSelected, layer); 150e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 151e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 152c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) /** 153a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {?Event} event 154c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) */ 155c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) _onContextMenu: function(event) 156c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) { 157c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) var node = this._treeOutline.treeElementFromPoint(event.pageX, event.pageY); 158c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!node || !node.representedObject) 159c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var layer = /** @type {!WebInspector.Layer} */ (node.representedObject); 161c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!layer) 162c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 163c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) var nodeId = layer.nodeId(); 164c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!nodeId) 165c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 166c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) var domNode = WebInspector.domAgent.nodeForId(nodeId); 167c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!domNode) 168c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 169c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) var contextMenu = new WebInspector.ContextMenu(event); 170c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) contextMenu.appendApplicableItems(domNode); 171c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) contextMenu.show(); 172c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) }, 173c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 174e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) __proto__: WebInspector.Object.prototype 175e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 176e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 177e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)/** 178e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @constructor 179a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.LayerTree} tree 180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Layer} layer 181e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @extends {TreeElement} 182e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 183e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTreeElement = function(tree, layer) 184e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 185e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) TreeElement.call(this, "", layer); 186e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._layerTree = tree; 187e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._update(); 188e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 189e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 190e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)WebInspector.LayerTreeElement.prototype = { 191e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) onattach: function() 192e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 193e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var selection = document.createElement("div"); 194e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) selection.className = "selection"; 195e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.listItemElement.insertBefore(selection, this.listItemElement.firstChild); 196e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 197e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 198e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) _update: function() 199e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 200a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) var layer = /** @type {!WebInspector.Layer} */ (this.representedObject); 201e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var nodeId = layer.nodeIdForSelfOrAncestor(); 20251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) var node = nodeId ? WebInspector.domAgent.nodeForId(nodeId) : null; 203e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var title = document.createDocumentFragment(); 204e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) title.createChild("div", "selection"); 20551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) title.appendChild(document.createTextNode(node ? WebInspector.DOMPresentationUtils.appropriateSelectorFor(node, false) : "#" + layer.id())); 206e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) var details = title.createChild("span", "dimmed"); 207e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) details.textContent = WebInspector.UIString(" (%d × %d)", layer.width(), layer.height()); 208e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.title = title; 209e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 210e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 211a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) /** 212a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @override 213a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) */ 214e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) onselect: function() 215e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 216e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this._layerTree._selectedNodeChanged(this); 217a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) return false; 218e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 219e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 220e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) /** 221e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) * @param {boolean} hovered 222e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) */ 223e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) setHovered: function(hovered) 224e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) { 225e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) this.listItemElement.enableStyleClass("hovered", hovered); 226e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) }, 227e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 228e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) __proto__: TreeElement.prototype 229e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 230