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

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

Issue 1268353005: [DevTools] Support JQuery event listeners (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 5 years, 3 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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 4
5 /** 5 /**
6 * @typedef {Array<{object: !WebInspector.RemoteObject, eventListeners: ?Array<!W ebInspector.EventListener>, frameworkEventListeners: ?{eventListeners: ?Array<!W ebInspector.EventListener>, internalHandlers: ?WebInspector.RemoteArray}, isInte rnal: ?Array<boolean>}>}
7 */
8 WebInspector.EventListenersResult;
9
10 /**
6 * @constructor 11 * @constructor
7 * @param {!Element} element 12 * @param {!Element} element
8 */ 13 */
9 WebInspector.EventListenersView = function(element) 14 WebInspector.EventListenersView = function(element)
10 { 15 {
11 this._element = element; 16 this._element = element;
12 this._treeOutline = new TreeOutlineInShadow("event-listener-tree"); 17 this._treeOutline = new TreeOutlineInShadow("event-listener-tree");
13 this._treeOutline.registerRequiredCSS("components/objectValue.css"); 18 this._treeOutline.registerRequiredCSS("components/objectValue.css");
14 this._treeOutline.registerRequiredCSS("components/eventListenersView.css"); 19 this._treeOutline.registerRequiredCSS("components/eventListenersView.css");
15 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator); 20 this._treeOutline.setComparator(WebInspector.EventListenersTreeElement.compa rator);
16 this._treeOutline.element.classList.add("monospace"); 21 this._treeOutline.element.classList.add("monospace");
17 this._element.appendChild(this._treeOutline.element) 22 this._element.appendChild(this._treeOutline.element)
18 this._emptyHolder = createElementWithClass("div", "info"); 23 this._emptyHolder = createElementWithClass("div", "info");
19 this._emptyHolder.textContent = WebInspector.UIString("No Event Listeners"); 24 this._emptyHolder.textContent = WebInspector.UIString("No Event Listeners");
20 this._linkifier = new WebInspector.Linkifier(); 25 this._linkifier = new WebInspector.Linkifier();
21 /** @type {!Map<string, !WebInspector.EventListenersTreeElement>} */ 26 /** @type {!Map<string, !WebInspector.EventListenersTreeElement>} */
22 this._treeItemMap = new Map(); 27 this._treeItemMap = new Map();
23 } 28 }
24 29
25 WebInspector.EventListenersView.prototype = { 30 WebInspector.EventListenersView.prototype = {
26 /** 31 /**
27 * @param {!Array<!WebInspector.RemoteObject>} objects 32 * @param {!Array<!WebInspector.RemoteObject>} objects
28 * @return {!Promise<undefined>} 33 * @return {!Promise<undefined>}
29 */ 34 */
30 addObjects: function(objects) 35 addObjects: function(objects)
31 { 36 {
32 var promises = []; 37 var promises = [];
33 for (var i = 0; i < objects.length; ++i) 38 var results = [];
34 promises.push(objects[i].eventListeners()); 39 for (var i = 0; i < objects.length; ++i) {
35 return Promise.all(promises).then(listenersCallback.bind(this)); 40 var result = {object: objects[i]};
pfeldman 2015/09/03 18:56:35 Why are you creating these one-time objects? Is th
36 /** 41 results.push(result);
37 * @param {!Array<?Array<!WebInspector.EventListener>>} listeners 42 // Fill result object with eventListeners and frameworkEventListener s.
43 promises.push(objects[i].eventListeners().then(storeResultTo.bind(nu ll, result, "eventListeners")));
pfeldman 2015/09/03 18:56:35 Please delete this utility function and do not use
44 promises.push(WebInspector.EventListener.frameworkEventListeners(obj ects[i])
45 .then(storeResultTo.bind(null, result, "fr ameworkEventListeners")));
46 }
47 return Promise.all(promises).then(listenersCallback.bind(this, results)) ;
48 /**
49 * @param {!WebInspector.EventListenersResult} results
38 * @this {WebInspector.EventListenersView} 50 * @this {WebInspector.EventListenersView}
39 */ 51 */
40 function listenersCallback(listeners) 52 function listenersCallback(results)
pfeldman 2015/09/03 18:56:35 Please do not append "Callback" to the end of ever
41 { 53 {
42 this.reset(); 54 this.reset();
43 for (var i = 0; i < listeners.length; ++i) 55
44 this._addObjectEventListeners(objects[i], listeners[i]); 56 // set isInternal flag for framework internal event listeners
57 var promises = [];
58 for (var result of results) {
59 var frameworkInternalHandlers = result.frameworkEventListeners.i nternalHandlers;
60 if (frameworkInternalHandlers) {
61 var listenersHandler = result.eventListeners.map(handlerArgu ment);
62 promises.push(frameworkInternalHandlers.object().callFunctio nJSONPromise(internalFlags, listenersHandler)
pfeldman 2015/09/03 18:56:35 Why is there asynchrony even after you have event
63 .then(setIsI nternal.bind(null, result.eventListeners)));
64 }
65 }
66
67 /**
68 * @param {!WebInspector.EventListener} listener
69 * @return {!RuntimeAgent.CallArgument}
70 */
71 function handlerArgument(listener)
72 {
73 return WebInspector.RemoteObject.toCallArgument(listener.handler ());
pfeldman 2015/09/03 18:56:35 Why do we have to do this again?
74 }
75
76 /**
77 * @suppressReceiverCheck
78 * @return {!Array<boolean>}
79 * @this {Array<*>}
80 */
81 function internalFlags()
82 {
83 var isInternal = [];
84 var internalHandlersSet = new Set(this);
85 for (var handler of arguments)
86 isInternal.push(internalHandlersSet.has(handler));
87 return isInternal;
88 }
89
90 /**
91 * @param {!Array<!WebInspector.EventListener>} eventListeners
92 * @param {!Array<boolean>} isInternal
93 */
94 function setIsInternal(eventListeners, isInternal)
95 {
96 for (var i = 0; i < eventListeners.length; ++i) {
97 if (isInternal[i])
98 eventListeners[i].setListenerType("frameworkInternal");
99 }
100 }
101
102 return Promise.all(promises).then(addResults.bind(this, results));
103 }
104
105 /**
106 * @param {!WebInspector.EventListenersResult} results
107 * @this {WebInspector.EventListenersView}
108 */
109 function addResults(results)
110 {
111 for (var result of results) {
112 this._addObjectEventListeners(result.object, result.eventListene rs);
113 this._addObjectEventListeners(result.object, result.frameworkEve ntListeners.eventListeners);
114 }
45 this.addEmptyHolderIfNeeded(); 115 this.addEmptyHolderIfNeeded();
46 this._eventListenersArrivedForTest(); 116 this._eventListenersArrivedForTest();
117 }
118 },
119
120 /**
121 * @param {boolean} showFramework
122 */
123 showFrameworkListeners: function(showFramework)
124 {
125 var eventTypes = this._treeOutline.rootElement().children();
126 for (var eventType of eventTypes) {
127 for (var listenerElement of eventType.children()) {
128 var listenerType = listenerElement.eventListener().listenerType( );
129 var hidden = false;
130 if (listenerType === "frameworkUser" && !showFramework)
131 hidden = true;
132 if (listenerType === "frameworkInternal" && showFramework)
133 hidden = true;
134 listenerElement.hidden = hidden;
135 }
47 } 136 }
48 }, 137 },
49 138
50 /** 139 /**
51 * @param {!WebInspector.RemoteObject} object 140 * @param {!WebInspector.RemoteObject} object
52 * @param {?Array<!WebInspector.EventListener>} eventListeners 141 * @param {?Array<!WebInspector.EventListener>} eventListeners
53 */ 142 */
54 _addObjectEventListeners: function(object, eventListeners) 143 _addObjectEventListeners: function(object, eventListeners)
55 { 144 {
56 if (!eventListeners) 145 if (!eventListeners)
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 * @param {!WebInspector.Linkifier} linkifier 256 * @param {!WebInspector.Linkifier} linkifier
168 */ 257 */
169 _setTitle: function(object, linkifier) 258 _setTitle: function(object, linkifier)
170 { 259 {
171 var title = this.listItemElement.createChild("span"); 260 var title = this.listItemElement.createChild("span");
172 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); 261 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle");
173 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); 262 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL()));
174 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); 263 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false));
175 }, 264 },
176 265
266 /**
267 * @return {!WebInspector.EventListener}
268 */
269 eventListener: function()
270 {
271 return this._eventListener;
272 },
273
177 __proto__: TreeElement.prototype 274 __proto__: TreeElement.prototype
178 } 275 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698