Index: third_party/WebKit/Source/devtools/front_end/ui/Popover.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/ui/Popover.js b/third_party/WebKit/Source/devtools/front_end/ui/Popover.js |
index a6ab9a8fbbade1fbf06c0ed9cc13e5474121c051..8364ab74b8cdf64fd95225ccc32adfd7c798f829 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/ui/Popover.js |
+++ b/third_party/WebKit/Source/devtools/front_end/ui/Popover.js |
@@ -28,83 +28,6 @@ |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
-UI.Popover = class extends UI.GlassPane { |
- /** |
- * @param {!UI.PopoverHelper=} popoverHelper |
- */ |
- constructor(popoverHelper) { |
- super(); |
- this.registerRequiredCSS('ui/popover.css'); |
- this.setBlockPointerEvents(false); |
- this.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent); |
- this.setShowArrow(true); |
- this._popoverHelper = popoverHelper; |
- } |
- |
- /** |
- * @param {!Element} element |
- * @param {!Element|!AnchorBox} anchor |
- */ |
- showForAnchor(element, anchor) { |
- this._innerShow(null, element, anchor); |
- } |
- |
- /** |
- * @param {!UI.Widget} view |
- * @param {!Element|!AnchorBox} anchor |
- */ |
- showView(view, anchor) { |
- this._innerShow(view, view.element, anchor); |
- } |
- |
- /** |
- * @param {?UI.Widget} widget |
- * @param {!Element} contentElement |
- * @param {!Element|!AnchorBox} anchor |
- */ |
- _innerShow(widget, contentElement, anchor) { |
- // This should not happen, but we hide previous popup to be on the safe side. |
- if (UI.Popover._popover) |
- UI.Popover._popover.hide(); |
- UI.Popover._popover = this; |
- |
- var document = |
- /** @type {!Document} */ (anchor instanceof Element ? anchor.ownerDocument : contentElement.ownerDocument); |
- var anchorBox = anchor instanceof AnchorBox ? anchor : anchor.boxInWindow(); |
- this.setContentAnchorBox(anchorBox); |
- |
- if (widget) |
- widget.show(this.contentElement); |
- else |
- this.contentElement.appendChild(contentElement); |
- |
- super.show(document); |
- |
- if (this._popoverHelper) { |
- this.contentElement.addEventListener( |
- 'mousemove', this._popoverHelper._killHidePopoverTimer.bind(this._popoverHelper), true); |
- this.contentElement.addEventListener( |
- 'mouseout', this._popoverHelper._popoverMouseOut.bind(this._popoverHelper), true); |
- } |
- } |
- |
- /** |
- * @override |
- */ |
- hide() { |
- super.hide(); |
- delete UI.Popover._popover; |
- } |
- |
- /** |
- * @param {boolean} noPadding |
- */ |
- setNoPadding(noPadding) { |
- // TODO(dgozman): remove this. Clients should add padding themselves. |
- this.contentElement.classList.toggle('no-padding', noPadding); |
- } |
-}; |
- |
/** |
* @unrestricted |
*/ |
@@ -115,6 +38,7 @@ UI.PopoverHelper = class { |
*/ |
constructor(panelElement, disableOnClick) { |
this._disableOnClick = !!disableOnClick; |
+ this._hasPadding = false; |
panelElement.addEventListener('mousedown', this._mouseDown.bind(this), false); |
panelElement.addEventListener('mousemove', this._mouseMove.bind(this), false); |
panelElement.addEventListener('mouseout', this._mouseOut.bind(this), false); |
@@ -123,7 +47,7 @@ UI.PopoverHelper = class { |
/** |
* @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor |
- * @param {function(!Element, !UI.Popover):undefined} showPopover |
+ * @param {function(!Element, !UI.GlassPane):!Promise<boolean>} showPopover |
* @param {function()=} onHide |
*/ |
initializeCallbacks(getAnchor, showPopover, onHide) { |
@@ -145,6 +69,13 @@ UI.PopoverHelper = class { |
} |
/** |
+ * @param {boolean} hasPadding |
+ */ |
+ setHasPadding(hasPadding) { |
+ this._hasPadding = hasPadding; |
+ } |
+ |
+ /** |
* @param {!MouseEvent} event |
* @return {boolean} |
*/ |
@@ -212,7 +143,8 @@ UI.PopoverHelper = class { |
if (!this._hoverElement) |
return; |
const toolTipDelay = isMouseDown ? 0 : (this._popup ? this._timeout * 0.6 : this._timeout); |
- this._hoverTimer = setTimeout(this._mouseHover.bind(this, this._hoverElement), toolTipDelay); |
+ this._hoverTimer = |
+ setTimeout(this._mouseHover.bind(this, this._hoverElement, event.target.ownerDocument), toolTipDelay); |
} |
_resetHoverTimer() { |
@@ -238,6 +170,7 @@ UI.PopoverHelper = class { |
if (!this._popover) |
return; |
+ delete UI.PopoverHelper._popover; |
if (this._onHide) |
this._onHide(); |
@@ -247,12 +180,33 @@ UI.PopoverHelper = class { |
this._hoverElement = null; |
} |
- _mouseHover(element) { |
+ _mouseHover(element, document) { |
delete this._hoverTimer; |
this._hoverElement = element; |
this._hidePopover(); |
- this._popover = new UI.Popover(this); |
- this._showPopover(element, this._popover); |
+ |
+ this._popover = new UI.GlassPane(); |
+ this._popover.registerRequiredCSS('ui/popover.css'); |
+ this._popover.setBlockPointerEvents(false); |
+ this._popover.setSizeBehavior(UI.GlassPane.SizeBehavior.MeasureContent); |
+ this._popover.setShowArrow(true); |
+ this._popover.contentElement.classList.toggle('has-padding', this._hasPadding); |
+ this._popover.contentElement.addEventListener('mousemove', this._killHidePopoverTimer.bind(this), true); |
+ this._popover.contentElement.addEventListener('mouseout', this._popoverMouseOut.bind(this), true); |
+ this._popover.setContentAnchorBox( |
+ this._hoverElement instanceof AnchorBox ? this._hoverElement : this._hoverElement.boxInWindow()); |
+ |
+ // This should not happen, but we hide previous popover to be on the safe side. |
+ if (UI.PopoverHelper._popover) { |
+ console.error('One popover is already visible'); |
+ UI.PopoverHelper._popover.hide(); |
+ } |
+ UI.PopoverHelper._popover = this._popover; |
+ var popover = this._popover; |
+ this._showPopover(element, this._popover).then(success => { |
+ if (success && this._popover === popover && this._hoverElement === element) |
+ popover.show(document); |
+ }); |
} |
_killHidePopoverTimer() { |