Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(759)

Unified Diff: third_party/WebKit/Source/devtools/front_end/ui/Popover.js

Issue 2740803002: [DevTools] Simplify Popover API (Closed)
Patch Set: addressed comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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() {

Powered by Google App Engine
This is Rietveld 408576698