Source/WebCore/ChangeLog

 12011-10-02 Mikhail Naganov <mnaganov@chromium.org>
 2
 3 Web Inspector: Factor out object properties popup.
 4 https://bugs.webkit.org/show_bug.cgi?id=69234
 5
 6 Also, for HTML elements, show a non-empty id value in the element name.
 7
 8 Reviewed by NOBODY (OOPS!).
 9
 10 * inspector/front-end/ObjectPropertiesSection.js:
 11 (WebInspector.ObjectPropertiesSection.prototype.onPropertiesReceived):
 12 (WebInspector.ObjectPropertiesSection.prototype.update.callback):
 13 (WebInspector.ObjectPropertiesSection.prototype.update):
 14 * inspector/front-end/Popover.js: Code extracted into ObjectPopoverHelper.
 15 (WebInspector.ObjectPopoverHelper):
 16 (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover.showObjectPopover.else.section.onPropertiesReceived):
 17 (WebInspector.ObjectPopoverHelper.prototype._showObjectPopover):
 18 * inspector/front-end/SourceFrame.js: From here.
 19 (WebInspector.SourceFrame.prototype._initializeTextViewer):
 20 (WebInspector.SourceFrame.prototype._mouseDown):
 21 (WebInspector.SourceFrame.prototype._onShowPopover.showObjectPopover):
 22 (WebInspector.SourceFrame.prototype._onShowPopover):
 23
1242011-09-30 Pavel Feldman <pfeldman@google.com>
225
326 Web Inspector: [chromium] expose inspector protocol version to the embedder.

Source/WebCore/inspector/front-end/ObjectPropertiesSection.js

@@WebInspector.ObjectPropertiesSection.prototype = {
4242 this.update();
4343 },
4444
 45 onPropertiesReceived: function(properties)
 46 {
 47 },
 48
4549 update: function()
4650 {
4751 var self = this;

@@WebInspector.ObjectPropertiesSection.prototype = {
4953 {
5054 if (!properties)
5155 return;
 56 self.onPropertiesReceived(properties);
5257 self.updateProperties(properties);
5358 }
5459 if (this.ignoreHasOwnProperty)

Source/WebCore/inspector/front-end/Popover.js

@@WebInspector.PopoverHelper.prototype = {
288288 }
289289 }
290290}
 291
 292WebInspector.ObjectPopoverHelper = function(panelElement, getAnchor, queryObject, onHide, disableOnClick)
 293{
 294 WebInspector.PopoverHelper.call(this, panelElement, getAnchor, this._showObjectPopover.bind(this), onHide, disableOnClick);
 295 this._queryObject = queryObject;
 296 panelElement.addEventListener("scroll", this.hidePopover.bind(this), true);
 297};
 298
 299WebInspector.ObjectPopoverHelper.prototype = {
 300 _showObjectPopover: function(element, popover)
 301 {
 302 function showObjectPopover(result, wasThrown)
 303 {
 304 if (popover.disposed)
 305 return;
 306 if (wasThrown) {
 307 this.hidePopover();
 308 return;
 309 }
 310 var popoverContentElement = null;
 311 if (result.type !== "object") {
 312 popoverContentElement = document.createElement("span");
 313 popoverContentElement.className = "monospace console-formatted-" + result.type;
 314 popoverContentElement.style.whiteSpace = "pre";
 315 popoverContentElement.textContent = result.description;
 316 if (result.type === "string")
 317 popoverContentElement.textContent = "\"" + popoverContentElement.textContent + "\"";
 318 popover.show(popoverContentElement, element);
 319 } else {
 320 popoverContentElement = document.createElement("div");
 321
 322 var titleElement = document.createElement("div");
 323 titleElement.className = "source-frame-popover-title monospace";
 324 titleElement.textContent = result.description;
 325 popoverContentElement.appendChild(titleElement);
 326
 327 var section = new WebInspector.ObjectPropertiesSection(result);
 328 // For HTML DOM wrappers, append "#id" to title, if not empty.
 329 if (result.description.substr(0, 4) === "HTML") {
 330 section.onPropertiesReceived = function(properties)
 331 {
 332 for (var i = 0; i < properties.length; ++i) {
 333 if (properties[i].name === "id") {
 334 if (properties[i].value.description)
 335 titleElement.textContent += "#" + properties[i].value.description;
 336 break;
 337 }
 338 }
 339 };
 340 }
 341 section.expanded = true;
 342 section.element.addStyleClass("source-frame-popover-tree");
 343 section.headerElement.addStyleClass("hidden");
 344 popoverContentElement.appendChild(section.element);
 345
 346 const popoverWidth = 300;
 347 const popoverHeight = 250;
 348 popover.show(popoverContentElement, element, popoverWidth, popoverHeight);
 349 }
 350 }
 351 this._queryObject(element, showObjectPopover.bind(this));
 352 }
 353}
 354
 355WebInspector.ObjectPopoverHelper.prototype.__proto__ = WebInspector.PopoverHelper.prototype;

Source/WebCore/inspector/front-end/SourceFrame.js

@@WebInspector.SourceFrame.prototype = {
289289
290290 var element = this._textViewer.element;
291291 if (this._delegate.debuggingSupported()) {
292  this._popoverHelper = new WebInspector.PopoverHelper(element,
 292 this._popoverHelper = new WebInspector.ObjectPopoverHelper(element,
293293 this._getPopoverAnchor.bind(this), this._onShowPopover.bind(this), this._onHidePopover.bind(this), true);
294294 element.addEventListener("mousedown", this._mouseDown.bind(this), true);
295  element.addEventListener("scroll", this._scroll.bind(this), true);
296295 }
297296
298297 this._textViewer.beginUpdates();

@@WebInspector.SourceFrame.prototype = {
642641 return this._delegate.suggestedFileName();
643642 },
644643
645  _scroll: function(event)
646  {
647  if (this._popoverHelper)
648  this._popoverHelper.hidePopover();
649  },
650 
651644 _mouseDown: function(event)
652645 {
653  if (this._popoverHelper)
654  this._popoverHelper.hidePopover();
655646 if (event.button != 0 || event.altKey || event.ctrlKey || event.metaKey)
656647 return;
657648 var target = event.target.enclosingNodeOrSelfWithClass("webkit-line-number");

@@WebInspector.SourceFrame.prototype = {
730721 return container;
731722 },
732723
733  _onShowPopover: function(element, popover)
 724 _onShowPopover: function(element, showCallback)
734725 {
735726 if (!this._textViewer.readOnly) {
736727 this._popoverHelper.hidePopover();

@@WebInspector.SourceFrame.prototype = {
740731
741732 function showObjectPopover(result, wasThrown)
742733 {
743  if (popover.disposed)
744  return;
745  if (wasThrown || !this._delegate.debuggerPaused()) {
 734 if (!this._delegate.debuggerPaused()) {
746735 this._popoverHelper.hidePopover();
747736 return;
748737 }
749  var popoverContentElement = null;
750  if (result.type !== "object") {
751  popoverContentElement = document.createElement("span");
752  popoverContentElement.className = "monospace console-formatted-" + result.type;
753  popoverContentElement.style.whiteSpace = "pre";
754  popoverContentElement.textContent = result.description;
755  if (result.type === "string")
756  popoverContentElement.textContent = "\"" + popoverContentElement.textContent + "\"";
757  popover.show(popoverContentElement, element);
758  } else {
759  var popoverContentElement = document.createElement("div");
760 
761  var titleElement = document.createElement("div");
762  titleElement.className = "source-frame-popover-title monospace";
763  titleElement.textContent = result.description;
764  popoverContentElement.appendChild(titleElement);
765 
766  var section = new WebInspector.ObjectPropertiesSection(result);
767  section.expanded = true;
768  section.element.addStyleClass("source-frame-popover-tree");
769  section.headerElement.addStyleClass("hidden");
770  popoverContentElement.appendChild(section.element);
771 
772  const popoverWidth = 300;
773  const popoverHeight = 250;
774  popover.show(popoverContentElement, element, popoverWidth, popoverHeight);
775  }
 738 showCallback(result, wasThrown);
776739 this._highlightElement.addStyleClass("source-frame-eval-expression");
777740 }
778741