|
461 | 461 | }; |
462 | 462 |
|
463 | 463 | nuget.setPopovers = function () { |
464 | | - var popoverElement = $(this); |
465 | | - var popoverElementDom = this; |
| 464 | + setPopoversInternal(this, rightWithVerticalFallback); |
| 465 | + } |
| 466 | + |
| 467 | + function rightWithVerticalFallback(popoverElement, ownerElement) { |
| 468 | + // Both numbers below are in CSS pixels. |
| 469 | + const MinSpaceOnRight = 150; |
| 470 | + const MinSpaceOnTop = 100; |
| 471 | + |
| 472 | + const ownerBoundingBox = ownerElement.getBoundingClientRect(); |
| 473 | + const spaceOnRight = window.innerWidth - ownerBoundingBox.right; |
| 474 | + if (spaceOnRight > MinSpaceOnRight) { |
| 475 | + return 'right'; |
| 476 | + } |
| 477 | + const spaceOnTop = ownerBoundingBox.top; |
| 478 | + if (spaceOnTop > MinSpaceOnTop) { |
| 479 | + return 'top'; |
| 480 | + } |
| 481 | + |
| 482 | + return 'bottom'; |
| 483 | + } |
| 484 | + |
| 485 | + function setPopoversInternal(element, placement) { |
| 486 | + var popoverElement = $(element); |
| 487 | + var popoverElementDom = element; |
466 | 488 | var originalLabel = popoverElementDom.ariaLabel; |
467 | 489 | var popoverHideTimeMS = 2000; |
468 | 490 | var popoverFadeTimeMS = 200; |
469 | 491 |
|
470 | | - popoverElement.popover({ trigger: 'hover' }); |
| 492 | + var popoverOptions = { trigger: 'hover', container: 'body' }; |
| 493 | + if (placement) { |
| 494 | + popoverOptions.placement = placement; |
| 495 | + } |
| 496 | + |
| 497 | + popoverElement.popover(popoverOptions); |
471 | 498 | popoverElement.click(popoverShowAndHide); |
472 | 499 | popoverElement.focus(popoverShowAndHide); |
473 | 500 | popoverElement.keyup(function (event) { |
|
0 commit comments