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

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]};
36 /** 41 results.push(result);
37 * @param {!Array<?Array<!WebInspector.EventListener>>} listeners 42 promises.push(objects[i].eventListeners().then(storeResultTo.bind(nu ll, result, "eventListeners")));
pfeldman 2015/09/02 02:58:52 This is still hard to parse/understand. Can we be
kozy 2015/09/02 17:34:13 I've added comment.
43 promises.push(WebInspector.frameworkEventListeners(objects[i], WebIn spector._frameworkEventListenersGetter)
pfeldman 2015/09/02 02:58:52 WebInspector._frameworkEventListenersGetter should
kozy 2015/09/02 17:34:13 Done.
44 .then(storeResultTo.bind(null, result, "fr ameworkEventListeners")));
45 }
46 return Promise.all(promises).then(listenersCallback.bind(this, results)) ;
47 /**
48 * @param {!WebInspector.EventListenersResult} results
38 * @this {WebInspector.EventListenersView} 49 * @this {WebInspector.EventListenersView}
39 */ 50 */
40 function listenersCallback(listeners) 51 function listenersCallback(results)
41 { 52 {
42 this.reset(); 53 this.reset();
43 for (var i = 0; i < listeners.length; ++i) 54
44 this._addObjectEventListeners(objects[i], listeners[i]); 55 // set isInternal flag for framework internal event listeners
56 var promises = [];
57 for (var result of results) {
58 var frameworkInternalHandlers = result.frameworkEventListeners.i nternalHandlers;
59 if (frameworkInternalHandlers) {
60 var listenersHandler = result.eventListeners.map(handlerArgu ment);
61 promises.push(frameworkInternalHandlers.object().callFunctio nJSONPromise(internalFlags, listenersHandler)
62 .then(setIsI nternal.bind(null, result.eventListeners)));
63 }
64 }
65
66 /**
67 * @param {!WebInspector.EventListener} listener
68 * @return {!RuntimeAgent.CallArgument}
69 */
70 function handlerArgument(listener)
71 {
72 return WebInspector.RemoteObject.toCallArgument(listener.handler ());
73 }
74
75 /**
76 * @suppressReceiverCheck
77 * @return {!Array<boolean>}
78 * @this {Array<*>}
79 */
80 function internalFlags()
81 {
82 var isInternal = [];
83 var internalHandlersSet = new Set(this);
84 for (var handler of arguments)
85 isInternal.push(internalHandlersSet.has(handler));
86 return isInternal;
87 }
88
89 /**
90 * @param {!Array<!WebInspector.EventListener>} eventListeners
91 * @param {!Array<boolean>} isInternal
92 */
93 function setIsInternal(eventListeners, isInternal)
94 {
95 for (var i = 0; i < eventListeners.length; ++i) {
96 if (isInternal[i])
97 eventListeners[i].setListenerType("frameworkInternal");
98 }
99 }
100
101 return Promise.all(promises).then(addResults.bind(this, results));
102 }
103
104 /**
105 * @param {!WebInspector.EventListenersResult} results
106 * @this {WebInspector.EventListenersView}
107 */
108 function addResults(results)
109 {
110 for (var result of results) {
111 this._addObjectEventListeners(result.object, result.eventListene rs);
112 this._addObjectEventListeners(result.object, result.frameworkEve ntListeners.eventListeners);
113 }
45 this.addEmptyHolderIfNeeded(); 114 this.addEmptyHolderIfNeeded();
46 this._eventListenersArrivedForTest(); 115 this._eventListenersArrivedForTest();
116 }
117 },
118
119 /**
120 * @param {boolean} showFramework
121 */
122 showFrameworkListeners: function(showFramework)
123 {
124 var eventTypes = this._treeOutline.rootElement().children();
125 for (var eventType of eventTypes) {
126 for (var listenerElement of eventType.children()) {
127 var listenerType = listenerElement.eventListener().listenerType( );
128 var hidden = false;
129 if (listenerType === "frameworkUser" && !showFramework)
130 hidden = true;
131 if (listenerType === "frameworkInternal" && showFramework)
132 hidden = true;
133 listenerElement.hidden = hidden;
134 }
47 } 135 }
48 }, 136 },
49 137
50 /** 138 /**
51 * @param {!WebInspector.RemoteObject} object 139 * @param {!WebInspector.RemoteObject} object
52 * @param {?Array<!WebInspector.EventListener>} eventListeners 140 * @param {?Array<!WebInspector.EventListener>} eventListeners
53 */ 141 */
54 _addObjectEventListeners: function(object, eventListeners) 142 _addObjectEventListeners: function(object, eventListeners)
55 { 143 {
56 if (!eventListeners) 144 if (!eventListeners)
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 * @param {!WebInspector.Linkifier} linkifier 255 * @param {!WebInspector.Linkifier} linkifier
168 */ 256 */
169 _setTitle: function(object, linkifier) 257 _setTitle: function(object, linkifier)
170 { 258 {
171 var title = this.listItemElement.createChild("span"); 259 var title = this.listItemElement.createChild("span");
172 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); 260 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle");
173 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); 261 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL()));
174 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); 262 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false));
175 }, 263 },
176 264
265 /**
266 * @return {!WebInspector.EventListener}
267 */
268 eventListener: function()
269 {
270 return this._eventListener;
271 },
272
177 __proto__: TreeElement.prototype 273 __proto__: TreeElement.prototype
178 } 274 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698