Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 } | |
| OLD | NEW |