OLD | NEW |
---|---|
(Empty) | |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 /** | |
6 * @constructor | |
7 * @param {!Element} element | |
8 * @param {string} objectGroup | |
9 */ | |
10 WebInspector.EventListenersTreeOutline = function(element, objectGroup) | |
pfeldman
2015/05/22 16:11:23
The name is unfortunate since this is not a tree o
kozy
2015/05/22 17:43:43
Renamed to EventListenersView
| |
11 { | |
12 this._element = element; | |
13 this._objectGroup = objectGroup; | |
14 this._treeOutline = new TreeOutline(true); | |
pfeldman
2015/05/22 16:11:23
Please use TreeOutlineInShadow
kozy
2015/05/22 17:43:43
Done.
| |
15 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator); | |
16 this._treeOutline.element.classList.add("event-listener-tree", "outline-disc losure", "monospace"); | |
pfeldman
2015/05/22 16:11:23
You would not need the outline-disclosure
kozy
2015/05/22 17:43:43
Removed.
| |
17 this._linkifier = new WebInspector.Linkifier(); | |
18 this._treeItemMap = new Map(); | |
pfeldman
2015/05/22 16:11:23
Annotate the type please.
kozy
2015/05/22 17:43:43
Done.
| |
19 this._isEmpty = true; | |
20 this._lastRuntimeAgents = new Set(); | |
pfeldman
2015/05/22 16:11:22
Ditto. Also, is this a leak?
kozy
2015/05/22 17:43:43
releaseObjectGroup logic is shifted to EventListen
| |
21 } | |
22 | |
23 WebInspector.EventListenersTreeOutline.prototype = { | |
24 /** | |
25 * @param {!WebInspector.DOMNode} node | |
26 * @param {?Array<!WebInspector.EventListener>} eventListeners | |
27 */ | |
28 _addNodeEventListeners: function(node, eventListeners) | |
29 { | |
30 if (!eventListeners) | |
31 return; | |
32 for (var eventListener of eventListeners) { | |
33 var treeItem = this._getTreeElementForType(eventListener.type()); | |
34 treeItem.addNodeEventListener(eventListener, node); | |
35 } | |
36 }, | |
37 | |
38 /** | |
39 * @param {string} type | |
40 * @return {!WebInspector.EventListenersTreeElement} | |
41 */ | |
42 _getTreeElementForType: function(type) | |
pfeldman
2015/05/22 16:11:23
no get prefixes in Blink, but in this case getOrCr
kozy
2015/05/22 17:43:43
Done.
| |
43 { | |
44 var treeItem = this._treeItemMap.get(type); | |
45 if (!treeItem) { | |
46 treeItem = new WebInspector.EventListenersTreeElement(type, this._li nkifier); | |
47 this._treeItemMap.set(type, treeItem); | |
48 this._treeOutline.appendChild(treeItem); | |
49 if (this._isEmpty) { | |
pfeldman
2015/05/22 16:11:23
You could get child count from root node instead,
kozy
2015/05/22 17:43:43
Done.
| |
50 this._isEmpty = false; | |
51 this._element.removeChildren(); | |
52 this._element.appendChild(this._treeOutline.element); | |
pfeldman
2015/05/22 16:11:22
No need to do this lazily, just remove the placeho
kozy
2015/05/22 17:43:43
Done.
| |
53 } | |
54 } | |
55 return treeItem; | |
56 }, | |
57 | |
58 /** | |
59 * @param {!WebInspector.DOMNode} node | |
60 * @return {!Promise} | |
61 */ | |
62 addNodeEventListeners: function(node) | |
63 { | |
64 return new Promise(addEventListeners.bind(this)); | |
65 /** | |
66 * @param {function(?)} fulfill | |
67 * @param {function(*)} reject | |
68 * @this {WebInspector.EventListenersTreeOutline} | |
69 */ | |
70 function addEventListeners(fulfill, reject) | |
71 { | |
72 /** | |
73 * @param {?Array<!WebInspector.EventListener>} listeners | |
74 * @this {WebInspector.EventListenersTreeOutline} | |
75 */ | |
76 function listenersCallback(listeners) | |
77 { | |
78 this._addNodeEventListeners(node, listeners); | |
79 fulfill(undefined); | |
80 } | |
81 /** | |
82 * @param {?WebInspector.RemoteObject} object | |
83 * @this {WebInspector.EventListenersTreeOutline} | |
84 */ | |
85 function objectCallback(object) | |
86 { | |
87 if (object) | |
88 object.getEventListeners(listenersCallback.bind(this)); | |
89 else | |
90 reject(undefined); | |
91 } | |
92 this._lastRuntimeAgents.add(node.target().runtimeAgent()); | |
93 node.resolveToObject(this._objectGroup, objectCallback.bind(this)); | |
pfeldman
2015/05/22 16:11:23
Reverse the order of functions and calls so that t
kozy
2015/05/22 17:43:43
Done.
| |
94 } | |
95 }, | |
96 | |
97 reset: function() | |
98 { | |
99 this._treeItemMap = new Map(); | |
100 this._element.removeChildren(); | |
101 this._treeOutline.removeChildren(); | |
102 this._linkifier.reset(); | |
103 this._isEmpty = true; | |
104 this._element.createChild("div", "info").textContent = WebInspector.UISt ring("No Event Listeners"); | |
105 for (var runtimeAgent of this._lastRuntimeAgents) | |
106 runtimeAgent.releaseObjectGroup(this._objectGroup); | |
107 this._lastRuntimeAgents.clear(); | |
108 } | |
109 } | |
110 | |
111 /** | |
112 * @constructor | |
113 * @extends {TreeElement} | |
114 * @param {string} type | |
115 * @param {!WebInspector.Linkifier} linkifier | |
116 */ | |
117 WebInspector.EventListenersTreeElement = function(type, linkifier) | |
pfeldman
2015/05/22 16:11:22
You don't seem to override anything, don't inherit
kozy
2015/05/22 17:43:43
I use this object in line 55: this._treeOutline.ap
| |
118 { | |
119 TreeElement.call(this, type); | |
120 this.toggleOnClick = true; | |
121 this.selectable = false; | |
122 this._linkifier = linkifier; | |
123 } | |
124 | |
125 /** | |
126 * @param {!TreeElement} element1 | |
127 * @param {!TreeElement} element2 | |
128 * @return {number} | |
129 */ | |
130 WebInspector.EventListenersTreeElement.comparator = function(element1, element2) { | |
131 if (element1.title === element2.title) | |
132 return 0; | |
133 return element1.title > element2.title ? 1 : -1; | |
134 } | |
135 | |
136 WebInspector.EventListenersTreeElement.prototype = { | |
137 /** | |
138 * @param {!WebInspector.EventListener} eventListener | |
139 * @param {!WebInspector.DOMNode} node | |
140 */ | |
141 addNodeEventListener: function(eventListener, node) | |
142 { | |
143 var treeElement = new WebInspector.NodeEventListenerBar(eventListener, n ode, this._linkifier); | |
144 this.appendChild(/** @type {!TreeElement} */ (treeElement)); | |
145 }, | |
146 | |
147 __proto__: TreeElement.prototype | |
148 } | |
149 | |
150 /** | |
151 * @constructor | |
152 * @extends {TreeElement} | |
153 * @param {!WebInspector.EventListener} eventListener | |
154 * @param {!WebInspector.Linkifier} linkifier | |
155 */ | |
156 WebInspector.EventListenerBar = function(eventListener, linkifier) | |
157 { | |
158 TreeElement.call(this, "", true); | |
159 this._eventListener = eventListener; | |
160 this.editable = false; | |
161 } | |
162 | |
163 WebInspector.EventListenerBar.prototype = { | |
164 onpopulate: function() | |
165 { | |
166 var properties = []; | |
167 var eventListener = this._eventListener; | |
168 var runtimeModel = eventListener.target().runtimeModel; | |
169 properties.push(runtimeModel.createRemotePropertyFromPrimitiveValue("use Capture", eventListener.useCapture())); | |
170 if (typeof eventListener.handler() !== "undefined") | |
171 properties.push(new WebInspector.RemoteObjectProperty("handler", eve ntListener.handler())); | |
172 WebInspector.ObjectPropertyTreeElement.populateWithProperties(this, prop erties, [], true, null); | |
173 }, | |
174 | |
175 __proto__: TreeElement.prototype | |
176 } | |
177 | |
178 /** | |
179 * @constructor | |
180 * @extends {WebInspector.EventListenerBar} | |
181 * @param {!WebInspector.EventListener} eventListener | |
182 * @param {!WebInspector.DOMNode} node | |
183 * @param {!WebInspector.Linkifier} linkifier | |
184 */ | |
185 WebInspector.NodeEventListenerBar = function(eventListener, node, linkifier) | |
186 { | |
187 WebInspector.EventListenerBar.call(this, eventListener, linkifier); | |
188 this._setNodeTitle(node, linkifier); | |
189 } | |
190 | |
191 WebInspector.NodeEventListenerBar.prototype = { | |
192 /** | |
193 * @param {!WebInspector.DOMNode} node | |
194 * @param {!WebInspector.Linkifier} linkifier | |
195 */ | |
196 _setNodeTitle: function(node, linkifier) | |
197 { | |
198 var title = this.listItemElement.createChild("span"); | |
199 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); | |
200 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceName())); | |
201 if (node.nodeType() === Node.DOCUMENT_NODE) { | |
202 title.textContent = "document"; | |
203 return; | |
204 } | |
205 if (this._eventListener.isSelected) { | |
206 title.textContent = WebInspector.DOMPresentationUtils.simpleSelector (node); | |
207 return; | |
208 } | |
209 title.appendChild(WebInspector.DOMPresentationUtils.linkifyNodeReference (node)); | |
210 }, | |
211 | |
212 __proto__: WebInspector.EventListenerBar.prototype | |
213 } | |
OLD | NEW |