[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:
@@ -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];
|
||||
|
||||
Reference in New Issue
Block a user