diff --git a/addons/stock/static/tests/popover_widget_tests.js b/addons/stock/static/tests/popover_widget_tests.js index dff13d60489..0e2ea8b32e2 100644 --- a/addons/stock/static/tests/popover_widget_tests.js +++ b/addons/stock/static/tests/popover_widget_tests.js @@ -39,7 +39,7 @@ QUnit.module('ModelFieldSelector', { var $popoverButton = form.$('a.fa.fa-info-circle.text-danger'); assert.strictEqual($popoverButton.length, 1, "Should have a popover icon/button in red"); assert.strictEqual($popoverButton.prop('special_click'), true, "Special click properpy should be activated"); - await testUtils.dom.triggerEvents($popoverButton, ['focus']); + await testUtils.dom.triggerEvent($popoverButton, 'focusin'); $popover = $('div.popover'); assert.strictEqual($popover.length, 1, "Should have a popover container in DOM"); assert.strictEqual($popover.html().includes("var that = self // why not?"), true, "The message should be in DOM"); diff --git a/addons/web/static/src/core/popover/popover.js b/addons/web/static/src/core/popover/popover.js index 9eb7960a52a..d0bb630752e 100644 --- a/addons/web/static/src/core/popover/popover.js +++ b/addons/web/static/src/core/popover/popover.js @@ -13,7 +13,17 @@ export class Popover extends Component { } onPositioned(el, { direction, variant }) { const position = `${direction[0]}${variant[0]}`; - el.classList.add(`bs-popover-${direction}`, `o-popover--${position}`); + const directionMap = { + top: "top", + bottom: "bottom", + left: "start", + right: "end", + }; + el.classList.add( + `bs-popover-${directionMap[direction]}`, + `o-popover-${direction}`, + `o-popover--${position}` + ); const arrowEl = el.firstElementChild; switch (position) { case "tm": // top-middle diff --git a/addons/web/static/src/core/popover/popover.scss b/addons/web/static/src/core/popover/popover.scss index f7714dc33d7..0973c758d7b 100644 --- a/addons/web/static/src/core/popover/popover.scss +++ b/addons/web/static/src/core/popover/popover.scss @@ -35,19 +35,35 @@ } } - &.o-popover--ts .arrow, &.o-popover--bs .arrow { + &.o-popover-top, &.o-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; + } + + &.o-popover-right, &.o-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; + } + + &.o-popover-bottom, &.o-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; + } + + &.o-popover-left, &.o-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; + } + + &.o-popover--ts .popover-arrow, &.o-popover--bs .popover-arrow { left: $popover-border-radius; } - &.o-popover--te .arrow, &.o-popover--be .arrow { + &.o-popover--te .popover-arrow, &.o-popover--be .popover-arrow { right: $popover-border-radius; } - &.o-popover--ls .arrow, &.o-popover--rs .arrow { + &.o-popover--ls .popover-arrow, &.o-popover--rs .popover-arrow { top: $popover-border-radius; } - &.o-popover--le .arrow, &.o-popover--re .arrow { + &.o-popover--le .popover-arrow, &.o-popover--re .popover-arrow { bottom: $popover-border-radius; } } diff --git a/addons/web/static/src/core/popover/popover.xml b/addons/web/static/src/core/popover/popover.xml index 2e057bef5bd..c5c659b10e9 100644 --- a/addons/web/static/src/core/popover/popover.xml +++ b/addons/web/static/src/core/popover/popover.xml @@ -6,7 +6,7 @@ t-att-class="props.popoverClass" t-ref="popper" > -
+