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

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 {
37 this.reset();
32 var promises = []; 38 var promises = [];
33 for (var i = 0; i < objects.length; ++i) 39 for (var object of objects)
34 promises.push(objects[i].eventListeners()); 40 promises.push(this._addObject(object));
35 return Promise.all(promises).then(listenersCallback.bind(this)); 41 return Promise.all(promises).then(this.addEmptyHolderIfNeeded.bind(this) ).then(this._eventListenersArrivedForTest.bind(this));
42 },
43
44 /**
45 * @param {!WebInspector.RemoteObject} object
46 * @return {!Promise<undefined>}
47 */
48 _addObject: function(object)
49 {
50 /** @type {?Array<!WebInspector.EventListener>} */
51 var eventListeners = null;
52 /** @type {?WebInspector.FrameworkEventListenersObject}*/
53 var frameworkEventListenersObject = null;
54
55 var promises = [];
56 promises.push(object.eventListeners().then(storeEventListeners));
57 promises.push(WebInspector.EventListener.frameworkEventListeners(object) .then(storeFrameworkEventListenersObject));
58 return Promise.all(promises).then(markInternalEventListeners).then(addEv entListeners.bind(this));
59
36 /** 60 /**
37 * @param {!Array<?Array<!WebInspector.EventListener>>} listeners 61 * @param {?Array<!WebInspector.EventListener>} result
62 */
63 function storeEventListeners(result)
64 {
65 eventListeners = result;
66 }
67
68 /**
69 * @param {?WebInspector.FrameworkEventListenersObject} result
70 */
71 function storeFrameworkEventListenersObject(result)
72 {
73 frameworkEventListenersObject = result;
74 }
75
76 /**
77 * @return {!Promise<undefined>}
78 */
79 function markInternalEventListeners()
80 {
81 if (!eventListeners || !frameworkEventListenersObject.internalHandle rs)
82 return Promise.resolve(undefined);
83 return frameworkEventListenersObject.internalHandlers.object().callF unctionJSONPromise(isInternalEventListener, eventListeners.map(handlerArgument)) .then(setIsInternal);
84
85 /**
86 * @param {!WebInspector.EventListener} listener
87 * @return {!RuntimeAgent.CallArgument}
88 */
89 function handlerArgument(listener)
90 {
91 return WebInspector.RemoteObject.toCallArgument(listener.handler ());
92 }
93
94 /**
95 * @suppressReceiverCheck
96 * @return {!Array<boolean>}
97 * @this {Array<*>}
98 */
99 function isInternalEventListener()
100 {
101 var isInternal = [];
102 var internalHandlersSet = new Set(this);
103 for (var handler of arguments)
104 isInternal.push(internalHandlersSet.has(handler));
105 return isInternal;
106 }
107
108 /**
109 * @param {!Array<boolean>} isInternal
110 */
111 function setIsInternal(isInternal)
112 {
113 for (var i = 0; i < eventListeners.length; ++i) {
114 if (isInternal[i])
115 eventListeners[i].setListenerType("frameworkInternal");
116 }
117 }
118 }
119
120 /**
38 * @this {WebInspector.EventListenersView} 121 * @this {WebInspector.EventListenersView}
39 */ 122 */
40 function listenersCallback(listeners) 123 function addEventListeners()
41 { 124 {
42 this.reset(); 125 this._addObjectEventListeners(object, eventListeners);
43 for (var i = 0; i < listeners.length; ++i) 126 this._addObjectEventListeners(object, frameworkEventListenersObject. eventListeners);
44 this._addObjectEventListeners(objects[i], listeners[i]);
45 this.addEmptyHolderIfNeeded();
46 this._eventListenersArrivedForTest();
47 } 127 }
48 }, 128 },
49 129
50 /** 130 /**
51 * @param {!WebInspector.RemoteObject} object 131 * @param {!WebInspector.RemoteObject} object
52 * @param {?Array<!WebInspector.EventListener>} eventListeners 132 * @param {?Array<!WebInspector.EventListener>} eventListeners
53 */ 133 */
54 _addObjectEventListeners: function(object, eventListeners) 134 _addObjectEventListeners: function(object, eventListeners)
55 { 135 {
56 if (!eventListeners) 136 if (!eventListeners)
57 return; 137 return;
58 for (var eventListener of eventListeners) { 138 for (var eventListener of eventListeners) {
59 var treeItem = this._getOrCreateTreeElementForType(eventListener.typ e()); 139 var treeItem = this._getOrCreateTreeElementForType(eventListener.typ e());
60 treeItem.addObjectEventListener(eventListener, object); 140 treeItem.addObjectEventListener(eventListener, object);
61 } 141 }
62 }, 142 },
63 143
64 /** 144 /**
145 * @param {boolean} showFramework
146 */
147 showFrameworkListeners: function(showFramework)
148 {
149 var eventTypes = this._treeOutline.rootElement().children();
150 for (var eventType of eventTypes) {
151 for (var listenerElement of eventType.children()) {
152 var listenerType = listenerElement.eventListener().listenerType( );
153 var hidden = false;
154 if (listenerType === "frameworkUser" && !showFramework)
155 hidden = true;
156 if (listenerType === "frameworkInternal" && showFramework)
157 hidden = true;
158 listenerElement.hidden = hidden;
159 }
160 }
161 },
162
163 /**
65 * @param {string} type 164 * @param {string} type
66 * @return {!WebInspector.EventListenersTreeElement} 165 * @return {!WebInspector.EventListenersTreeElement}
67 */ 166 */
68 _getOrCreateTreeElementForType: function(type) 167 _getOrCreateTreeElementForType: function(type)
69 { 168 {
70 var treeItem = this._treeItemMap.get(type); 169 var treeItem = this._treeItemMap.get(type);
71 if (!treeItem) { 170 if (!treeItem) {
72 treeItem = new WebInspector.EventListenersTreeElement(type, this._li nkifier); 171 treeItem = new WebInspector.EventListenersTreeElement(type, this._li nkifier);
73 this._treeItemMap.set(type, treeItem); 172 this._treeItemMap.set(type, treeItem);
74 this._treeOutline.appendChild(treeItem); 173 this._treeOutline.appendChild(treeItem);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 * @param {!WebInspector.Linkifier} linkifier 266 * @param {!WebInspector.Linkifier} linkifier
168 */ 267 */
169 _setTitle: function(object, linkifier) 268 _setTitle: function(object, linkifier)
170 { 269 {
171 var title = this.listItemElement.createChild("span"); 270 var title = this.listItemElement.createChild("span");
172 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle"); 271 var subtitle = this.listItemElement.createChild("span", "event-listener- tree-subtitle");
173 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL())); 272 subtitle.appendChild(linkifier.linkifyRawLocation(this._eventListener.lo cation(), this._eventListener.sourceURL()));
174 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false)); 273 title.appendChild(WebInspector.ObjectPropertiesSection.createValueElemen t(object, false));
175 }, 274 },
176 275
276 /**
277 * @return {!WebInspector.EventListener}
278 */
279 eventListener: function()
280 {
281 return this._eventListener;
282 },
283
177 __proto__: TreeElement.prototype 284 __proto__: TreeElement.prototype
178 } 285 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/components/EventListenersUtils.js ('k') | Source/devtools/front_end/components/module.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698