[FIX] web_tour: properly filter on visible elements

When checking the DOM for tour step trigger, the ":visible" jQuery
filter was used to get the visible elements. The problem is that this
filter does not care about the visibility css property. So, for jQuery,
a display:block and visibility:hidden element is visible.

This was an issue as kanban ghosts or settings panels in odoo are
hidden thanks to the visibility property instead of display.
This commit is contained in:
qsm-odoo
2016-08-12 16:09:57 +02:00
parent de0d9fd666
commit 7fd1f5ac48
+18 -2
View File
@@ -111,8 +111,8 @@ return core.Class.extend({
} else {
$trigger = $(tip.trigger);
}
$trigger = $trigger.filter(':visible').first();
var extra_trigger = tip.extra_trigger ? $(tip.extra_trigger).filter(':visible').length : true;
$trigger = get_first_visible_element($trigger);
var extra_trigger = tip.extra_trigger ? get_first_visible_element($(tip.extra_trigger)).length : true;
var triggered = $trigger.length && extra_trigger;
if (triggered) {
if (!tip.widget) {
@@ -123,6 +123,22 @@ return core.Class.extend({
} else {
this._deactivate_tip(tip);
}
function get_first_visible_element($elements) {
for (var i = 0 ; i < $elements.length ; i++) {
var $elem = $elements.eq(i);
if ($elem.is(":visible")) {
var $i = $elem;
while ($i.css("visibility") !== "hidden") {
$i = $i.parent();
if ($i.is("html")) {
return $elem;
}
}
}
}
return $();
}
},
_activate_tip: function(tip, tour_name, $anchor) {
var tour = this.tours[tour_name];