From f2c59460512cfef87117db5952f9bcef3018c7a8 Mon Sep 17 00:00:00 2001
From: Christophe Matthieu <chm@odoo.com>
Date: Fri, 24 Oct 2014 12:14:15 +0200
Subject: [PATCH] [FIX] tour.js: popover position when scrolling down

---
 addons/web/static/src/js/tour.js | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/addons/web/static/src/js/tour.js b/addons/web/static/src/js/tour.js
index 8a08751646ee..5d962844f736 100644
--- a/addons/web/static/src/js/tour.js
+++ b/addons/web/static/src/js/tour.js
@@ -241,12 +241,20 @@ var Tour = {
     },
     repositionPopover: function() {
         var popover = Tour.$element.data("bs.popover");
-        var $tip = Tour.$element.data("bs.popover").tip();
+        var $tip = popover.tip();
 
         if (popover.options.orphan) {
             return $tip.css("top", $(window).outerHeight() / 2 - $tip.outerHeight() / 2);
         }
 
+        if (Tour.$element.parents("div").filter(function(){ return getComputedStyle(this).position === 'fixed'; }).length) {
+            var pos = popover.getPosition();
+            var top = pos.top;
+            if (popover.options.placement === "top") top -= $tip.height();
+            if (popover.options.placement === "bottom") top += pos.height;
+            $tip.css({'top': top+'px'});
+        }
+
         var offsetBottom, offsetHeight, offsetRight, offsetWidth, originalLeft, originalTop, tipOffset;
         offsetWidth = $tip[0].offsetWidth;
         offsetHeight = $tip[0].offsetHeight;
@@ -270,10 +278,10 @@ var Tour = {
         $tip.offset(tipOffset);
         if (popover.options.placement === "bottom" || popover.options.placement === "top") {
                 var left = Tour.$element.offset().left + Tour.$element.outerWidth()/2 - tipOffset.left;
-                $tip.find(".arrow").css("left", left ? left + "px" : "");
+                popover.arrow().css("left", left ? left + "px" : "");
         } else if (popover.options.placement !== "auto") {
                 var top = Tour.$element.offset().top + Tour.$element.outerHeight()/2 - tipOffset.top;
-                $tip.find(".arrow").css("top", top ? top + "px" : "");
+                popover.arrow().css("top", top ? top + "px" : "");
         }
     },
     _load_template: false,
-- 
GitLab