| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2009 Google Inc. All rights reserved. | 2 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 /** | 31 /** |
| 32 * @constructor | 32 * @constructor |
| 33 * @extends {WebInspector.View} | 33 * @extends {WebInspector.Widget} |
| 34 * @param {!WebInspector.PopoverHelper=} popoverHelper | 34 * @param {!WebInspector.PopoverHelper=} popoverHelper |
| 35 */ | 35 */ |
| 36 WebInspector.Popover = function(popoverHelper) | 36 WebInspector.Popover = function(popoverHelper) |
| 37 { | 37 { |
| 38 WebInspector.View.call(this); | 38 WebInspector.Widget.call(this); |
| 39 this.markAsRoot(); | 39 this.markAsRoot(); |
| 40 this.element.className = WebInspector.Popover._classNamePrefix; // Override | 40 this.element.className = WebInspector.Popover._classNamePrefix; // Override |
| 41 WebInspector.installComponentRootStyles(this.element); | 41 WebInspector.installComponentRootStyles(this.element); |
| 42 this._containerElement = createElementWithClass("div", "fill popover-contain
er"); | 42 this._containerElement = createElementWithClass("div", "fill popover-contain
er"); |
| 43 | 43 |
| 44 this._popupArrowElement = this.element.createChild("div", "arrow"); | 44 this._popupArrowElement = this.element.createChild("div", "arrow"); |
| 45 this._contentDiv = this.element.createChild("div", "content"); | 45 this._contentDiv = this.element.createChild("div", "content"); |
| 46 | 46 |
| 47 this._popoverHelper = popoverHelper; | 47 this._popoverHelper = popoverHelper; |
| 48 this._hideBound = this.hide.bind(this); | 48 this._hideBound = this.hide.bind(this); |
| 49 } | 49 } |
| 50 | 50 |
| 51 WebInspector.Popover._classNamePrefix = "popover custom-popup-vertical-scroll cu
stom-popup-horizontal-scroll"; | 51 WebInspector.Popover._classNamePrefix = "popover custom-popup-vertical-scroll cu
stom-popup-horizontal-scroll"; |
| 52 | 52 |
| 53 WebInspector.Popover.prototype = { | 53 WebInspector.Popover.prototype = { |
| 54 /** | 54 /** |
| 55 * @param {!Element} element | 55 * @param {!Element} element |
| 56 * @param {!Element|!AnchorBox} anchor | 56 * @param {!Element|!AnchorBox} anchor |
| 57 * @param {?number=} preferredWidth | 57 * @param {?number=} preferredWidth |
| 58 * @param {?number=} preferredHeight | 58 * @param {?number=} preferredHeight |
| 59 * @param {?WebInspector.Popover.Orientation=} arrowDirection | 59 * @param {?WebInspector.Popover.Orientation=} arrowDirection |
| 60 */ | 60 */ |
| 61 showForAnchor: function(element, anchor, preferredWidth, preferredHeight, ar
rowDirection) | 61 showForAnchor: function(element, anchor, preferredWidth, preferredHeight, ar
rowDirection) |
| 62 { | 62 { |
| 63 this._innerShow(null, element, anchor, preferredWidth, preferredHeight,
arrowDirection); | 63 this._innerShow(null, element, anchor, preferredWidth, preferredHeight,
arrowDirection); |
| 64 }, | 64 }, |
| 65 | 65 |
| 66 /** | 66 /** |
| 67 * @param {!WebInspector.View} view | 67 * @param {!WebInspector.Widget} view |
| 68 * @param {!Element|!AnchorBox} anchor | 68 * @param {!Element|!AnchorBox} anchor |
| 69 * @param {?number=} preferredWidth | 69 * @param {?number=} preferredWidth |
| 70 * @param {?number=} preferredHeight | 70 * @param {?number=} preferredHeight |
| 71 */ | 71 */ |
| 72 showView: function(view, anchor, preferredWidth, preferredHeight) | 72 showView: function(view, anchor, preferredWidth, preferredHeight) |
| 73 { | 73 { |
| 74 this._innerShow(view, view.element, anchor, preferredWidth, preferredHei
ght); | 74 this._innerShow(view, view.element, anchor, preferredWidth, preferredHei
ght); |
| 75 }, | 75 }, |
| 76 | 76 |
| 77 /** | 77 /** |
| 78 * @param {?WebInspector.View} view | 78 * @param {?WebInspector.Widget} view |
| 79 * @param {!Element} contentElement | 79 * @param {!Element} contentElement |
| 80 * @param {!Element|!AnchorBox} anchor | 80 * @param {!Element|!AnchorBox} anchor |
| 81 * @param {?number=} preferredWidth | 81 * @param {?number=} preferredWidth |
| 82 * @param {?number=} preferredHeight | 82 * @param {?number=} preferredHeight |
| 83 * @param {?WebInspector.Popover.Orientation=} arrowDirection | 83 * @param {?WebInspector.Popover.Orientation=} arrowDirection |
| 84 */ | 84 */ |
| 85 _innerShow: function(view, contentElement, anchor, preferredWidth, preferred
Height, arrowDirection) | 85 _innerShow: function(view, contentElement, anchor, preferredWidth, preferred
Height, arrowDirection) |
| 86 { | 86 { |
| 87 if (this._disposed) | 87 if (this._disposed) |
| 88 return; | 88 return; |
| 89 this._contentElement = contentElement; | 89 this._contentElement = contentElement; |
| 90 | 90 |
| 91 // This should not happen, but we hide previous popup to be on the safe
side. | 91 // This should not happen, but we hide previous popup to be on the safe
side. |
| 92 if (WebInspector.Popover._popover) | 92 if (WebInspector.Popover._popover) |
| 93 WebInspector.Popover._popover.hide(); | 93 WebInspector.Popover._popover.hide(); |
| 94 WebInspector.Popover._popover = this; | 94 WebInspector.Popover._popover = this; |
| 95 | 95 |
| 96 var document = anchor instanceof Element ? anchor.ownerDocument : conten
tElement.ownerDocument; | 96 var document = anchor instanceof Element ? anchor.ownerDocument : conten
tElement.ownerDocument; |
| 97 var window = document.defaultView; | 97 var window = document.defaultView; |
| 98 | 98 |
| 99 // Temporarily attach in order to measure preferred dimensions. | 99 // Temporarily attach in order to measure preferred dimensions. |
| 100 var preferredSize = view ? view.measurePreferredSize() : WebInspector.me
asurePreferredSize(this._contentElement); | 100 var preferredSize = view ? view.measurePreferredSize() : WebInspector.me
asurePreferredSize(this._contentElement); |
| 101 preferredWidth = preferredWidth || preferredSize.width; | 101 preferredWidth = preferredWidth || preferredSize.width; |
| 102 preferredHeight = preferredHeight || preferredSize.height; | 102 preferredHeight = preferredHeight || preferredSize.height; |
| 103 | 103 |
| 104 window.addEventListener("resize", this._hideBound, false); | 104 window.addEventListener("resize", this._hideBound, false); |
| 105 document.body.appendChild(this._containerElement); | 105 document.body.appendChild(this._containerElement); |
| 106 WebInspector.View.prototype.show.call(this, this._containerElement); | 106 WebInspector.Widget.prototype.show.call(this, this._containerElement); |
| 107 | 107 |
| 108 if (view) | 108 if (view) |
| 109 view.show(this._contentDiv); | 109 view.show(this._contentDiv); |
| 110 else | 110 else |
| 111 this._contentDiv.appendChild(this._contentElement); | 111 this._contentDiv.appendChild(this._contentElement); |
| 112 | 112 |
| 113 this._positionElement(anchor, preferredWidth, preferredHeight, arrowDire
ction); | 113 this._positionElement(anchor, preferredWidth, preferredHeight, arrowDire
ction); |
| 114 | 114 |
| 115 if (this._popoverHelper) { | 115 if (this._popoverHelper) { |
| 116 this._contentDiv.addEventListener("mousemove", this._popoverHelper._
killHidePopoverTimer.bind(this._popoverHelper), true); | 116 this._contentDiv.addEventListener("mousemove", this._popoverHelper._
killHidePopoverTimer.bind(this._popoverHelper), true); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 238 this._popupArrowElement.style.left = Math.max(0, anchorBox.x - newEl
ementPosition.x - borderRadius - arrowRadius + anchorBox.width / 2) + "px"; | 238 this._popupArrowElement.style.left = Math.max(0, anchorBox.x - newEl
ementPosition.x - borderRadius - arrowRadius + anchorBox.width / 2) + "px"; |
| 239 } | 239 } |
| 240 | 240 |
| 241 this.element.className = WebInspector.Popover._classNamePrefix + " " + v
erticalAlignment + "-" + horizontalAlignment + "-arrow"; | 241 this.element.className = WebInspector.Popover._classNamePrefix + " " + v
erticalAlignment + "-" + horizontalAlignment + "-arrow"; |
| 242 WebInspector.installComponentRootStyles(this.element); | 242 WebInspector.installComponentRootStyles(this.element); |
| 243 this.element.positionAt(newElementPosition.x, newElementPosition.y - bor
derWidth, container); | 243 this.element.positionAt(newElementPosition.x, newElementPosition.y - bor
derWidth, container); |
| 244 this.element.style.width = newElementPosition.width + borderWidth * 2 +
"px"; | 244 this.element.style.width = newElementPosition.width + borderWidth * 2 +
"px"; |
| 245 this.element.style.height = newElementPosition.height + borderWidth * 2
+ "px"; | 245 this.element.style.height = newElementPosition.height + borderWidth * 2
+ "px"; |
| 246 }, | 246 }, |
| 247 | 247 |
| 248 __proto__: WebInspector.View.prototype | 248 __proto__: WebInspector.Widget.prototype |
| 249 } | 249 } |
| 250 | 250 |
| 251 /** | 251 /** |
| 252 * @constructor | 252 * @constructor |
| 253 * @param {!Element} panelElement | 253 * @param {!Element} panelElement |
| 254 * @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor | 254 * @param {function(!Element, !Event):(!Element|!AnchorBox|undefined)} getAnchor |
| 255 * @param {function(!Element, !WebInspector.Popover):undefined} showPopover | 255 * @param {function(!Element, !WebInspector.Popover):undefined} showPopover |
| 256 * @param {function()=} onHide | 256 * @param {function()=} onHide |
| 257 * @param {boolean=} disableOnClick | 257 * @param {boolean=} disableOnClick |
| 258 */ | 258 */ |
| (...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 this._resetHoverTimer(); | 415 this._resetHoverTimer(); |
| 416 } | 416 } |
| 417 } | 417 } |
| 418 } | 418 } |
| 419 | 419 |
| 420 /** @enum {string} */ | 420 /** @enum {string} */ |
| 421 WebInspector.Popover.Orientation = { | 421 WebInspector.Popover.Orientation = { |
| 422 Top: "top", | 422 Top: "top", |
| 423 Bottom: "bottom" | 423 Bottom: "bottom" |
| 424 } | 424 } |
| OLD | NEW |