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

Side by Side Diff: Source/devtools/front_end/components/EventListenersView.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.EventListenersView = function(element, objectGroup)
11 {
12 this._element = element;
13 this._objectGroup = objectGroup;
14 this._treeOutline = new TreeOutlineInShadow("event-listener-tree");
15 this._treeOutline.registerRequiredCSS("components/objectValue.css");
16 this._treeOutline.registerRequiredCSS("components/eventListenersView.css");
17 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator);
18 this._treeOutline.element.classList.add("monospace");
19 this._element.appendChild(this._treeOutline.element)
20 this._emptyHolder = createElementWithClass("div", "info");
21 this._emptyHolder.textContent = WebInspector.UIString("No Event Listeners");
22 this._element.appendChild(this._emptyHolder);
23 this._linkifier = new WebInspector.Linkifier();
24 /** @type {!Map<string, !WebInspector.EventListenersTreeElement>} */
25 this._treeItemMap = new Map();
26 }
27
28 WebInspector.EventListenersView.prototype = {
29 /**
30 * @param {!WebInspector.DOMNode} node
31 * @param {?Array<!WebInspector.EventListener>} eventListeners
32 */
33 _addNodeEventListeners: function(node, eventListeners)
34 {
35 if (!eventListeners)
36 return;
37 for (var eventListener of eventListeners) {
38 var treeItem = this._getOrCreateTreeElementForType(eventListener.typ e());
39 treeItem.addNodeEventListener(eventListener, node);
40 }
41 },
42
43 /**
44 * @param {string} type
45 * @return {!WebInspector.EventListenersTreeElement}
46 */
47 _getOrCreateTreeElementForType: function(type)
48 {
49 var treeItem = this._treeItemMap.get(type);
50 if (!treeItem) {
51 treeItem = new WebInspector.EventListenersTreeElement(type, this._li nkifier);
52 this._treeItemMap.set(type, treeItem);
53 this._treeOutline.appendChild(treeItem);
54 this._emptyHolder.remove();
55 }
56 return treeItem;
57 },
58
59 /**
60 * @param {!WebInspector.DOMNode} node
61 * @return {!Promise}
62 */
63 addNodeEventListeners: function(node)
64 {
65 return new Promise(addEventListeners.bind(this));
66 /**
67 * @param {function(?)} fulfill
68 * @param {function(*)} reject
69 * @this {WebInspector.EventListenersView}
70 */
71 function addEventListeners(fulfill, reject)
72 {
73 node.resolveToObject(this._objectGroup, objectCallback.bind(this));
74 /**
75 * @param {?WebInspector.RemoteObject} object
76 * @this {WebInspector.EventListenersView}
77 */
78 function objectCallback(object)
79 {
80 if (object)
81 object.getEventListeners(listenersCallback.bind(this));
82 else
83 reject(undefined);
84 }
85 /**
86 * @param {?Array<!WebInspector.EventListener>} listeners
87 * @this {WebInspector.EventListenersView}
88 */
89 function listenersCallback(listeners)
90 {
91 this._addNodeEventListeners(node, listeners);
92 fulfill(undefined);
93 }
94 }
95 },
96
97 reset: function()
98 {
99 this._treeItemMap = new Map();
100 this._treeOutline.removeChildren();
101 this._element.appendChild(this._emptyHolder);
102 this._linkifier.reset();
103 }
104 }
105
106 /**
107 * @constructor
108 * @extends {TreeElement}
109 * @param {string} type
110 * @param {!WebInspector.Linkifier} linkifier
111 */
112 WebInspector.EventListenersTreeElement = function(type, linkifier)
113 {
114 TreeElement.call(this, type);
115 this.toggleOnClick = true;
116 this.selectable = false;
117 this._linkifier = linkifier;
118 }
119
120 /**
121 * @param {!TreeElement} element1
122 * @param {!TreeElement} element2
123 * @return {number}
124 */
125 WebInspector.EventListenersTreeElement.comparator = function(element1, element2) {
126 if (element1.title === element2.title)
127 return 0;
128 return element1.title > element2.title ? 1 : -1;
129 }
130
131 WebInspector.EventListenersTreeElement.prototype = {
132 /**
133 * @param {!WebInspector.EventListener} eventListener
134 * @param {!WebInspector.DOMNode} node
135 */
136 addNodeEventListener: function(eventListener, node)
137 {
138 var treeElement = new WebInspector.NodeEventListenerBar(eventListener, n ode, this._linkifier);
139 this.appendChild(/** @type {!TreeElement} */ (treeElement));
140 },
141
142 __proto__: TreeElement.prototype
143 }
144
145 /**
146 * @constructor
147 * @extends {TreeElement}
148 * @param {!WebInspector.EventListener} eventListener
149 * @param {!WebInspector.Linkifier} linkifier
150 */
151 WebInspector.EventListenerBar = function(eventListener, linkifier)
152 {
153 TreeElement.call(this, "", true);
154 this._eventListener = eventListener;
155 this.editable = false;
156 }
157
158 WebInspector.EventListenerBar.prototype = {
159 onpopulate: function()
160 {
161 var properties = [];
162 var eventListener = this._eventListener;
163 var runtimeModel = eventListener.target().runtimeModel;
164 properties.push(runtimeModel.createRemotePropertyFromPrimitiveValue("use Capture", eventListener.useCapture()));
165 if (typeof eventListener.handler() !== "undefined")
166 properties.push(new WebInspector.RemoteObjectProperty("handler", eve ntListener.handler()));
167 WebInspector.ObjectPropertyTreeElement.populateWithProperties(this, prop erties, [], true, null);
168 },
169
170 __proto__: TreeElement.prototype
171 }
172
173 /**
174 * @constructor
175 * @extends {WebInspector.EventListenerBar}
176 * @param {!WebInspector.EventListener} eventListener
177 * @param {!WebInspector.DOMNode} node
178 * @param {!WebInspector.Linkifier} linkifier
179 */
180 WebInspector.NodeEventListenerBar = function(eventListener, node, linkifier)
181 {
182 WebInspector.EventListenerBar.call(this, eventListener, linkifier);
183 this._setNodeTitle(node, linkifier);
184 }
185
186 WebInspector.NodeEventListenerBar.prototype = {
187 /**
188 * @param {!WebInspector.DOMNode} node
189 * @param {!WebInspector.Linkifier} linkifier
190 */
191 _setNodeTitle: function(node, linkifier)
192 {
193 var title = this.listItemElement.createChild("span");
194 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle");
195 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceName()));
196 if (node.nodeType() === Node.DOCUMENT_NODE) {
197 title.textContent = "document";
198 return;
199 }
200 if (this._eventListener.isSelected) {
201 title.textContent = WebInspector.DOMPresentationUtils.simpleSelector (node);
202 return;
203 }
204 title.appendChild(WebInspector.DOMPresentationUtils.linkifyNodeReference (node));
205 },
206
207 __proto__: WebInspector.EventListenerBar.prototype
208 }
OLDNEW
« no previous file with comments | « Source/devtools/devtools.gypi ('k') | Source/devtools/front_end/components/eventListenersView.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698