Changeset 58412 in webkit
- Timestamp:
- Apr 28, 2010 10:10:01 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r58409 r58412 1 2010-04-28 Pavel Feldman <pfeldman@chromium.org> 2 3 Reviewed by Timothy Hatcher. 4 5 Web Inspector: Linkify node and function in the event listeners panel. 6 7 https://bugs.webkit.org/show_bug.cgi?id=38251 8 9 * bindings/js/ScriptEventListener.cpp: 10 (WebCore::eventListenerHandlerBody): 11 (WebCore::eventListenerHandlerLocation): 12 * bindings/js/ScriptEventListener.h: 13 * bindings/v8/ScriptEventListener.cpp: 14 (WebCore::eventListenerHandlerBody): 15 (WebCore::eventListenerHandlerLocation): 16 * bindings/v8/ScriptEventListener.h: 17 * inspector/InspectorDOMAgent.cpp: 18 (WebCore::InspectorDOMAgent::buildObjectForEventListener): 19 * inspector/front-end/ElementsPanel.js: 20 (WebInspector.ElementsPanel.prototype.linkifyNodeReference): 21 (WebInspector.ElementsPanel.prototype.linkifyNodeReference.preventDefault): 22 * inspector/front-end/EventListenersSidebarPane.js: 23 (WebInspector.EventListenersSidebarPane.prototype.update.callback): 24 (WebInspector.EventListenersSidebarPane.prototype.update): 25 (): 26 * inspector/front-end/StylesSidebarPane.js: 27 (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules): 28 * inspector/front-end/inspector.css: 29 (.node-link): 30 1 31 2010-04-28 Julien Chaffraix <jchaffraix@webkit.org> 2 32 -
trunk/WebCore/bindings/js/ScriptEventListener.cpp
r57738 r58412 106 106 } 107 107 108 String getEventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* eventListener)108 String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* eventListener) 109 109 { 110 110 const JSEventListener* jsListener = JSEventListener::cast(eventListener); … … 117 117 } 118 118 119 bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String&, int&) 120 { 121 return false; 122 } 123 119 124 } // namespace WebCore -
trunk/WebCore/bindings/js/ScriptEventListener.h
r48887 r58412 46 46 PassRefPtr<JSLazyEventListener> createAttributeEventListener(Node*, Attribute*); 47 47 PassRefPtr<JSLazyEventListener> createAttributeEventListener(Frame*, Attribute*); 48 String getEventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*);49 48 String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*); 49 bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber); 50 50 } // namespace WebCore 51 51 -
trunk/WebCore/bindings/v8/ScriptEventListener.cpp
r55207 r58412 107 107 } 108 108 109 String getEventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener)109 String eventListenerHandlerBody(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener) 110 110 { 111 111 if (listener->type() != EventListener::JSEventListenerType) … … 121 121 } 122 122 123 bool eventListenerHandlerLocation(ScriptExecutionContext* context, ScriptState* scriptState, EventListener* listener, String& sourceName, int& lineNumber) 124 { 125 if (listener->type() != EventListener::JSEventListenerType) 126 return false; 127 128 ScriptScope scope(scriptState); 129 V8AbstractEventListener* v8Listener = static_cast<V8AbstractEventListener*>(listener); 130 v8::Handle<v8::Object> object = v8Listener->getListenerObject(context); 131 if (object.IsEmpty() || !object->IsFunction()) 132 return false; 133 134 v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(object); 135 v8::ScriptOrigin origin = function->GetScriptOrigin(); 136 sourceName = ""; 137 lineNumber = 1; 138 if (!origin.ResourceName().IsEmpty()) { 139 sourceName = toWebCoreString(origin.ResourceName()); 140 lineNumber = function->GetScriptLineNumber() + 1; 141 return true; 142 } 143 return false; 144 } 145 123 146 } // namespace WebCore -
trunk/WebCore/bindings/v8/ScriptEventListener.h
r48887 r58412 46 46 PassRefPtr<V8LazyEventListener> createAttributeEventListener(Node*, Attribute*); 47 47 PassRefPtr<V8LazyEventListener> createAttributeEventListener(Frame*, Attribute*); 48 String getEventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*); 48 String eventListenerHandlerBody(ScriptExecutionContext*, ScriptState*, EventListener*); 49 bool eventListenerHandlerLocation(ScriptExecutionContext*, ScriptState*, EventListener*, String& sourceName, int& lineNumber); 49 50 50 51 } // namespace WebCore -
trunk/WebCore/inspector/InspectorDOMAgent.cpp
r57514 r58412 629 629 value.set("isAttribute", eventListener->isAttribute()); 630 630 value.set("nodeId", pushNodePathToFrontend(node)); 631 value.set("listener", getEventListenerHandlerBody(node->document(), m_frontend->scriptState(), eventListener.get())); 631 value.set("listenerBody", eventListenerHandlerBody(node->document(), m_frontend->scriptState(), eventListener.get())); 632 String sourceName; 633 int lineNumber; 634 if (eventListenerHandlerLocation(node->document(), m_frontend->scriptState(), eventListener.get(), sourceName, lineNumber)) { 635 value.set("sourceName", sourceName); 636 value.set("lineNumber", lineNumber); 637 } 632 638 return value; 633 639 } -
trunk/WebCore/inspector/front-end/ElementsPanel.js
r56446 r58412 764 764 }, 765 765 766 linkifyNodeReference: function(node) 767 { 768 function selectNode(e) 769 { 770 WebInspector.updateFocusedNode(node.id); 771 } 772 773 var link = document.createElement("span"); 774 link.className = "node-link"; 775 link.addEventListener("click", selectNode, false); 776 this.decorateNodeLabel(node, link); 777 return link; 778 }, 779 766 780 updateBreadcrumbSizes: function(focusedCrumb) 767 781 { -
trunk/WebCore/inspector/front-end/EventListenersSidebarPane.js
r54973 r58412 78 78 eventListener.node = WebInspector.domAgent.nodeForId(eventListener.nodeId); 79 79 delete eventListener.nodeId; // no longer needed 80 if (/^function _inspectorCommandLineAPI_logEvent\(/.test(eventListener.listener .toString()))80 if (/^function _inspectorCommandLineAPI_logEvent\(/.test(eventListener.listenerBody.toString())) 81 81 continue; // ignore event listeners generated by monitorEvent 82 82 var type = eventListener.type; … … 156 156 for (var i = 0; i < length; ++i) { 157 157 var eventListener = filteredEventListeners[i]; 158 var eventListenerBar = new WebInspector.EventListenerBar(eventListener );158 var eventListenerBar = new WebInspector.EventListenerBar(eventListener, this._nodeId); 159 159 if (i < length - 1) { 160 160 var connector = document.createElement("div"); … … 175 175 WebInspector.EventListenersSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; 176 176 177 WebInspector.EventListenerBar = function(eventListener )177 WebInspector.EventListenerBar = function(eventListener, nodeId) 178 178 { 179 179 this.eventListener = eventListener; 180 WebInspector.ObjectPropertiesSection.call(this, null, this._getFunctionDisplayName(), this._getNodeDisplayName()); 180 this._nodeId = nodeId; 181 WebInspector.ObjectPropertiesSection.call(this); 182 this._setNodeTitle(); 183 this._setFunctionSubtitle(); 181 184 this.editable = false; 182 185 this.element.className = "event-bar"; /* Changed from "section" */ … … 200 203 }, 201 204 202 _ getNodeDisplayName: function()205 _setNodeTitle: function() 203 206 { 204 207 var node = this.eventListener.node; 205 208 if (!node) 206 return ""; 207 208 if (node.nodeType === Node.DOCUMENT_NODE) 209 return "document"; 210 211 return appropriateSelectorForNode(node); 212 }, 213 214 _getFunctionDisplayName: function() 209 return; 210 211 if (node.nodeType === Node.DOCUMENT_NODE) { 212 this.titleElement.textContent = "document"; 213 return; 214 } 215 216 if (node.id === this._nodeId) { 217 this.titleElement.textContent = appropriateSelectorForNode(node); 218 return; 219 } 220 221 this.titleElement.removeChildren(); 222 this.titleElement.appendChild(WebInspector.panels.elements.linkifyNodeReference(this.eventListener.node)); 223 }, 224 225 _setFunctionSubtitle: function() 215 226 { 216 227 // Requires that Function.toString() return at least the function's signature. 217 var match = this.eventListener.listener.toString().match(/function ([^\(]+?)\(/); 218 return (match ? match[1] : WebInspector.UIString("(anonymous function)")); 228 var subtitle = ""; 229 var payload = this.eventListener; 230 if (this.eventListener.sourceName) { 231 this.subtitleElement.removeChildren(); 232 this.subtitleElement.appendChild(WebInspector.linkifyResourceAsNode(this.eventListener.sourceName, "scripts", this.eventListener.lineNumber)); 233 } else { 234 var match = this.eventListener.listenerBody.match(/function ([^\(]+?)\(/); 235 if (match) 236 this.subtitleElement.textContent = match[1]; 237 else 238 this.subtitleElement.textContent = WebInspector.UIString("(anonymous function)"); 239 } 219 240 } 220 241 } -
trunk/WebCore/inspector/front-end/StylesSidebarPane.js
r57060 r58412 410 410 separatorElement.className = "styles-sidebar-separator"; 411 411 if (styleRule.node) { 412 var link = document.createElement("a"); 413 link.href = ""; 414 link.addEventListener("mousedown", this._selectNode.bind(this, styleRule.node.id), false); 415 WebInspector.panels.elements.decorateNodeLabel(styleRule.node, link); 412 var link = WebInspector.panels.elements.linkifyNodeReference(styleRule.node); 416 413 separatorElement.appendChild(document.createTextNode(WebInspector.UIString("Inherited from") + " ")); 417 414 separatorElement.appendChild(link); … … 453 450 } 454 451 return sections; 455 },456 457 _selectNode: function(nodeId, e)458 {459 WebInspector.updateFocusedNode(nodeId);460 e.preventDefault();461 452 }, 462 453 -
trunk/WebCore/inspector/front-end/inspector.css
r58406 r58412 4031 4031 padding: 32px; 4032 4032 } 4033 4034 .node-link { 4035 text-decoration: underline; 4036 cursor: pointer; 4037 }
Note: See TracChangeset
for help on using the changeset viewer.