| OLD | NEW |
| 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | |
| 5 /** | 4 /** |
| 6 * @constructor | 5 * @unrestricted |
| 7 * @param {!WebInspector.ElementsTreeOutline} treeOutline | |
| 8 */ | 6 */ |
| 9 WebInspector.ElementsTreeElementHighlighter = function(treeOutline) | 7 WebInspector.ElementsTreeElementHighlighter = class { |
| 10 { | 8 /** |
| 9 * @param {!WebInspector.ElementsTreeOutline} treeOutline |
| 10 */ |
| 11 constructor(treeOutline) { |
| 11 this._throttler = new WebInspector.Throttler(100); | 12 this._throttler = new WebInspector.Throttler(100); |
| 12 this._treeOutline = treeOutline; | 13 this._treeOutline = treeOutline; |
| 13 this._treeOutline.addEventListener(TreeOutline.Events.ElementExpanded, this.
_clearState, this); | 14 this._treeOutline.addEventListener(TreeOutline.Events.ElementExpanded, this.
_clearState, this); |
| 14 this._treeOutline.addEventListener(TreeOutline.Events.ElementCollapsed, this
._clearState, this); | 15 this._treeOutline.addEventListener(TreeOutline.Events.ElementCollapsed, this
._clearState, this); |
| 15 this._treeOutline.addEventListener(WebInspector.ElementsTreeOutline.Events.S
electedNodeChanged, this._clearState, this); | 16 this._treeOutline.addEventListener( |
| 16 WebInspector.targetManager.addModelListener(WebInspector.DOMModel, WebInspec
tor.DOMModel.Events.NodeHighlightedInOverlay, this._highlightNode, this); | 17 WebInspector.ElementsTreeOutline.Events.SelectedNodeChanged, this._clear
State, this); |
| 17 this._treeOutline.domModel().addEventListener(WebInspector.DOMModel.Events.I
nspectModeWillBeToggled, this._clearState, this); | 18 WebInspector.targetManager.addModelListener( |
| 18 }; | 19 WebInspector.DOMModel, WebInspector.DOMModel.Events.NodeHighlightedInOve
rlay, this._highlightNode, this); |
| 20 this._treeOutline.domModel().addEventListener( |
| 21 WebInspector.DOMModel.Events.InspectModeWillBeToggled, this._clearState,
this); |
| 22 } |
| 19 | 23 |
| 20 WebInspector.ElementsTreeElementHighlighter.prototype = { | 24 /** |
| 21 /** | 25 * @param {!WebInspector.Event} event |
| 22 * @param {!WebInspector.Event} event | 26 */ |
| 23 */ | 27 _highlightNode(event) { |
| 24 _highlightNode: function(event) | 28 if (!WebInspector.moduleSetting('highlightNodeOnHoverInOverlay').get()) |
| 25 { | 29 return; |
| 26 if (!WebInspector.moduleSetting("highlightNodeOnHoverInOverlay").get()) | |
| 27 return; | |
| 28 | 30 |
| 29 var domNode = /** @type {!WebInspector.DOMNode} */ (event.data); | 31 var domNode = /** @type {!WebInspector.DOMNode} */ (event.data); |
| 30 | 32 |
| 31 this._throttler.schedule(callback.bind(this)); | 33 this._throttler.schedule(callback.bind(this)); |
| 32 this._pendingHighlightNode = this._treeOutline.domModel() === domNode.do
mModel() ? domNode : null; | 34 this._pendingHighlightNode = this._treeOutline.domModel() === domNode.domMod
el() ? domNode : null; |
| 33 | |
| 34 /** | |
| 35 * @this {WebInspector.ElementsTreeElementHighlighter} | |
| 36 */ | |
| 37 function callback() | |
| 38 { | |
| 39 this._highlightNodeInternal(this._pendingHighlightNode); | |
| 40 delete this._pendingHighlightNode; | |
| 41 return Promise.resolve(); | |
| 42 } | |
| 43 }, | |
| 44 | 35 |
| 45 /** | 36 /** |
| 46 * @param {?WebInspector.DOMNode} node | 37 * @this {WebInspector.ElementsTreeElementHighlighter} |
| 47 */ | 38 */ |
| 48 _highlightNodeInternal: function(node) | 39 function callback() { |
| 49 { | 40 this._highlightNodeInternal(this._pendingHighlightNode); |
| 50 this._isModifyingTreeOutline = true; | 41 delete this._pendingHighlightNode; |
| 51 var treeElement = null; | 42 return Promise.resolve(); |
| 43 } |
| 44 } |
| 52 | 45 |
| 53 if (this._currentHighlightedElement) { | 46 /** |
| 54 var currentTreeElement = this._currentHighlightedElement; | 47 * @param {?WebInspector.DOMNode} node |
| 55 while (currentTreeElement !== this._alreadyExpandedParentElement) { | 48 */ |
| 56 if (currentTreeElement.expanded) | 49 _highlightNodeInternal(node) { |
| 57 currentTreeElement.collapse(); | 50 this._isModifyingTreeOutline = true; |
| 51 var treeElement = null; |
| 58 | 52 |
| 59 currentTreeElement = currentTreeElement.parent; | 53 if (this._currentHighlightedElement) { |
| 60 } | 54 var currentTreeElement = this._currentHighlightedElement; |
| 61 } | 55 while (currentTreeElement !== this._alreadyExpandedParentElement) { |
| 56 if (currentTreeElement.expanded) |
| 57 currentTreeElement.collapse(); |
| 62 | 58 |
| 63 delete this._currentHighlightedElement; | 59 currentTreeElement = currentTreeElement.parent; |
| 64 delete this._alreadyExpandedParentElement; | 60 } |
| 65 if (node) { | |
| 66 var deepestExpandedParent = node; | |
| 67 var treeElementSymbol = this._treeOutline.treeElementSymbol(); | |
| 68 while (deepestExpandedParent && (!deepestExpandedParent[treeElementS
ymbol] || !deepestExpandedParent[treeElementSymbol].expanded)) | |
| 69 deepestExpandedParent = deepestExpandedParent.parentNode; | |
| 70 | |
| 71 this._alreadyExpandedParentElement = deepestExpandedParent ? deepest
ExpandedParent[treeElementSymbol] : this._treeOutline.rootElement(); | |
| 72 treeElement = this._treeOutline.createTreeElementFor(node); | |
| 73 } | |
| 74 | |
| 75 this._currentHighlightedElement = treeElement; | |
| 76 this._treeOutline.setHoverEffect(treeElement); | |
| 77 if (treeElement) | |
| 78 treeElement.reveal(true); | |
| 79 | |
| 80 this._isModifyingTreeOutline = false; | |
| 81 }, | |
| 82 | |
| 83 _clearState: function() | |
| 84 { | |
| 85 if (this._isModifyingTreeOutline) | |
| 86 return; | |
| 87 | |
| 88 delete this._currentHighlightedElement; | |
| 89 delete this._alreadyExpandedParentElement; | |
| 90 delete this._pendingHighlightNode; | |
| 91 } | 61 } |
| 92 | 62 |
| 63 delete this._currentHighlightedElement; |
| 64 delete this._alreadyExpandedParentElement; |
| 65 if (node) { |
| 66 var deepestExpandedParent = node; |
| 67 var treeElementSymbol = this._treeOutline.treeElementSymbol(); |
| 68 while (deepestExpandedParent && |
| 69 (!deepestExpandedParent[treeElementSymbol] || !deepestExpandedParen
t[treeElementSymbol].expanded)) |
| 70 deepestExpandedParent = deepestExpandedParent.parentNode; |
| 71 |
| 72 this._alreadyExpandedParentElement = |
| 73 deepestExpandedParent ? deepestExpandedParent[treeElementSymbol] : thi
s._treeOutline.rootElement(); |
| 74 treeElement = this._treeOutline.createTreeElementFor(node); |
| 75 } |
| 76 |
| 77 this._currentHighlightedElement = treeElement; |
| 78 this._treeOutline.setHoverEffect(treeElement); |
| 79 if (treeElement) |
| 80 treeElement.reveal(true); |
| 81 |
| 82 this._isModifyingTreeOutline = false; |
| 83 } |
| 84 |
| 85 _clearState() { |
| 86 if (this._isModifyingTreeOutline) |
| 87 return; |
| 88 |
| 89 delete this._currentHighlightedElement; |
| 90 delete this._alreadyExpandedParentElement; |
| 91 delete this._pendingHighlightNode; |
| 92 } |
| 93 }; | 93 }; |
| OLD | NEW |