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 |