Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Side by Side Diff: Source/devtools/front_end/components/EventListenersTreeOutline.js

Issue 1144953005: [DevTools] Extracted EventListenersTreeOutline (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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 }
OLDNEW
« no previous file with comments | « Source/devtools/devtools.gypi ('k') | Source/devtools/front_end/components/eventListenersTreeOutline.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698