| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> | 3 * Copyright (C) 2008 Matt Lilek <webkit@mattlilek.com> |
| 4 * Copyright (C) 2009 Joseph Pecoraro | 4 * Copyright (C) 2009 Joseph Pecoraro |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 | 68 |
| 69 this._includeRootDOMNode = !omitRootDOMNode; | 69 this._includeRootDOMNode = !omitRootDOMNode; |
| 70 this._selectEnabled = selectEnabled; | 70 this._selectEnabled = selectEnabled; |
| 71 /** @type {?SDK.DOMNode} */ | 71 /** @type {?SDK.DOMNode} */ |
| 72 this._rootDOMNode = null; | 72 this._rootDOMNode = null; |
| 73 /** @type {?SDK.DOMNode} */ | 73 /** @type {?SDK.DOMNode} */ |
| 74 this._selectedDOMNode = null; | 74 this._selectedDOMNode = null; |
| 75 | 75 |
| 76 this._visible = false; | 76 this._visible = false; |
| 77 | 77 |
| 78 this._popoverHelper = new UI.PopoverHelper(this._element); | 78 this._popoverHelper = new UI.PopoverHelper(this._element, this._getPopoverRe
quest.bind(this)); |
| 79 this._popoverHelper.initializeCallbacks(this._getPopoverAnchor.bind(this), t
his._showPopover.bind(this)); | |
| 80 this._popoverHelper.setHasPadding(true); | 79 this._popoverHelper.setHasPadding(true); |
| 81 this._popoverHelper.setTimeout(0, 100); | 80 this._popoverHelper.setTimeout(0, 100); |
| 82 | 81 |
| 83 /** @type {!Map<!SDK.DOMNode, !Elements.ElementsTreeOutline.UpdateRecord>} *
/ | 82 /** @type {!Map<!SDK.DOMNode, !Elements.ElementsTreeOutline.UpdateRecord>} *
/ |
| 84 this._updateRecords = new Map(); | 83 this._updateRecords = new Map(); |
| 85 /** @type {!Set<!Elements.ElementsTreeElement>} */ | 84 /** @type {!Set<!Elements.ElementsTreeElement>} */ |
| 86 this._treeElementsBeingUpdated = new Set(); | 85 this._treeElementsBeingUpdated = new Set(); |
| 87 | 86 |
| 88 this._domModel.addEventListener(SDK.DOMModel.Events.MarkersChanged, this._ma
rkersChanged, this); | 87 this._domModel.addEventListener(SDK.DOMModel.Events.MarkersChanged, this._ma
rkersChanged, this); |
| 89 this._showHTMLCommentsSetting = Common.moduleSetting('showHTMLComments'); | 88 this._showHTMLCommentsSetting = Common.moduleSetting('showHTMLComments'); |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 var element; | 514 var element; |
| 516 if (elementUnderMouse === elementAboveMouse) | 515 if (elementUnderMouse === elementAboveMouse) |
| 517 element = elementUnderMouse; | 516 element = elementUnderMouse; |
| 518 else | 517 else |
| 519 element = this.treeElementFromPoint(x, y + 2); | 518 element = this.treeElementFromPoint(x, y + 2); |
| 520 | 519 |
| 521 return element; | 520 return element; |
| 522 } | 521 } |
| 523 | 522 |
| 524 /** | 523 /** |
| 525 * @param {!Element} element | |
| 526 * @param {!Event} event | 524 * @param {!Event} event |
| 527 * @return {!Element|!AnchorBox|undefined} | 525 * @return {?UI.PopoverRequest} |
| 528 */ | 526 */ |
| 529 _getPopoverAnchor(element, event) { | 527 _getPopoverRequest(event) { |
| 530 var link = element; | 528 var link = event.target; |
| 531 while (link && !link[Elements.ElementsTreeElement.HrefSymbol]) | 529 while (link && !link[Elements.ElementsTreeElement.HrefSymbol]) |
| 532 link = link.parentElementOrShadowHost(); | 530 link = link.parentElementOrShadowHost(); |
| 533 return link ? link : undefined; | 531 if (!link) |
| 532 return null; |
| 533 |
| 534 return { |
| 535 box: link.boxInWindow(), |
| 536 show: async popover => { |
| 537 var listItem = link.enclosingNodeOrSelfWithNodeName('li'); |
| 538 var node = /** @type {!Elements.ElementsTreeElement} */ (listItem.treeEl
ement).node(); |
| 539 var precomputedFeatures = await this._loadDimensionsForNode(node); |
| 540 var preview = await Components.DOMPresentationUtils.buildImagePreviewCon
tents( |
| 541 node.target(), link[Elements.ElementsTreeElement.HrefSymbol], true,
precomputedFeatures); |
| 542 if (preview) |
| 543 popover.contentElement.appendChild(preview); |
| 544 return !!preview; |
| 545 } |
| 546 }; |
| 534 } | 547 } |
| 535 | 548 |
| 536 /** | 549 /** |
| 537 * @param {!SDK.DOMNode} node | 550 * @param {!SDK.DOMNode} node |
| 538 * @param {function()} callback | 551 * @return {!Promise<!Object|undefined>} |
| 539 */ | 552 */ |
| 540 _loadDimensionsForNode(node, callback) { | 553 _loadDimensionsForNode(node) { |
| 541 if (!node.nodeName() || node.nodeName().toLowerCase() !== 'img') { | 554 if (!node.nodeName() || node.nodeName().toLowerCase() !== 'img') |
| 542 callback(); | 555 return Promise.resolve(); |
| 543 return; | |
| 544 } | |
| 545 | 556 |
| 557 var fulfill; |
| 558 var promise = new Promise(x => fulfill = x); |
| 546 node.resolveToObject('', resolvedNode); | 559 node.resolveToObject('', resolvedNode); |
| 560 return promise; |
| 547 | 561 |
| 548 function resolvedNode(object) { | 562 function resolvedNode(object) { |
| 549 if (!object) { | 563 if (!object) { |
| 550 callback(); | 564 fulfill(); |
| 551 return; | 565 return; |
| 552 } | 566 } |
| 553 | 567 |
| 554 object.callFunctionJSON(features, undefined, callback); | 568 object.callFunctionJSON(features, undefined, fulfill); |
| 555 object.release(); | 569 object.release(); |
| 556 | 570 |
| 557 /** | 571 /** |
| 558 * @return {!{offsetWidth: number, offsetHeight: number, naturalWidth: num
ber, naturalHeight: number, currentSrc: (string|undefined)}} | 572 * @return {!{offsetWidth: number, offsetHeight: number, naturalWidth: num
ber, naturalHeight: number, currentSrc: (string|undefined)}} |
| 559 * @suppressReceiverCheck | 573 * @suppressReceiverCheck |
| 560 * @this {!Element} | 574 * @this {!Element} |
| 561 */ | 575 */ |
| 562 function features() { | 576 function features() { |
| 563 return { | 577 return { |
| 564 offsetWidth: this.offsetWidth, | 578 offsetWidth: this.offsetWidth, |
| 565 offsetHeight: this.offsetHeight, | 579 offsetHeight: this.offsetHeight, |
| 566 naturalWidth: this.naturalWidth, | 580 naturalWidth: this.naturalWidth, |
| 567 naturalHeight: this.naturalHeight, | 581 naturalHeight: this.naturalHeight, |
| 568 currentSrc: this.currentSrc | 582 currentSrc: this.currentSrc |
| 569 }; | 583 }; |
| 570 } | 584 } |
| 571 } | 585 } |
| 572 } | 586 } |
| 573 | 587 |
| 574 /** | |
| 575 * @param {!Element|!AnchorBox} link | |
| 576 * @param {!UI.GlassPane} popover | |
| 577 * @return {!Promise<boolean>} | |
| 578 */ | |
| 579 _showPopover(link, popover) { | |
| 580 var fulfill; | |
| 581 var promise = new Promise(x => fulfill = x); | |
| 582 var listItem = link.enclosingNodeOrSelfWithNodeName('li'); | |
| 583 var node = /** @type {!Elements.ElementsTreeElement} */ (listItem.treeElemen
t).node(); | |
| 584 this._loadDimensionsForNode( | |
| 585 node, Components.DOMPresentationUtils.buildImagePreviewContents.bind( | |
| 586 Components.DOMPresentationUtils, node.target(), link[Elements.
ElementsTreeElement.HrefSymbol], true, | |
| 587 showPopover)); | |
| 588 return promise; | |
| 589 | |
| 590 /** | |
| 591 * @param {!Element=} contents | |
| 592 */ | |
| 593 function showPopover(contents) { | |
| 594 if (contents) | |
| 595 popover.contentElement.appendChild(contents); | |
| 596 fulfill(!!contents); | |
| 597 } | |
| 598 } | |
| 599 | |
| 600 _onmousedown(event) { | 588 _onmousedown(event) { |
| 601 var element = this._treeElementFromEvent(event); | 589 var element = this._treeElementFromEvent(event); |
| 602 | 590 |
| 603 if (!element || element.isEventWithinDisclosureTriangle(event)) | 591 if (!element || element.isEventWithinDisclosureTriangle(event)) |
| 604 return; | 592 return; |
| 605 | 593 |
| 606 element.select(); | 594 element.select(); |
| 607 } | 595 } |
| 608 | 596 |
| 609 /** | 597 /** |
| (...skipping 1083 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1693 */ | 1681 */ |
| 1694 function resolved(node) { | 1682 function resolved(node) { |
| 1695 if (node) { | 1683 if (node) { |
| 1696 this.treeOutline._selectedDOMNode = node; | 1684 this.treeOutline._selectedDOMNode = node; |
| 1697 this.treeOutline._selectedNodeChanged(); | 1685 this.treeOutline._selectedNodeChanged(); |
| 1698 } | 1686 } |
| 1699 } | 1687 } |
| 1700 return true; | 1688 return true; |
| 1701 } | 1689 } |
| 1702 }; | 1690 }; |
| OLD | NEW |