@@ -160,6 +160,12 @@ qx.Class.define("osparc.tours.Manager", {
160160 }
161161 } ,
162162
163+ __getVisibleElement : function ( selector ) {
164+ const elements = document . querySelectorAll ( `[${ selector } ]` ) ;
165+ const element = [ ...elements ] . find ( el => osparc . utils . Utils . isElementOnScreen ( el ) ) ;
166+ return element ;
167+ } ,
168+
163169 __toStepCheck : function ( idx = 0 ) {
164170 const steps = this . getSteps ( ) ;
165171 if ( idx >= steps . length ) {
@@ -171,16 +177,25 @@ qx.Class.define("osparc.tours.Manager", {
171177 this . __currentIdx = idx ;
172178 const step = steps [ idx ] ;
173179 if ( step . beforeClick && step . beforeClick . selector ) {
174- const element = document . querySelector ( `[${ step . beforeClick . selector } ]` ) ;
175- const widget = qx . ui . core . Widget . getWidgetByElement ( element ) ;
176- if ( step . beforeClick . action ) {
177- widget [ step . beforeClick . action ] ( ) ;
178- } else if ( step . beforeClick . event ) {
179- widget . fireEvent ( step . beforeClick . event ) ;
180+ let targetWidget = null ;
181+ const element = this . __getVisibleElement ( step . beforeClick . selector ) ;
182+ if ( element ) {
183+ targetWidget = qx . ui . core . Widget . getWidgetByElement ( element ) ;
184+ }
185+ if ( targetWidget ) {
186+ if ( step . beforeClick . action ) {
187+ targetWidget [ step . beforeClick . action ] ( ) ;
188+ } else if ( step . beforeClick . event ) {
189+ targetWidget . fireEvent ( step . beforeClick . event ) ;
190+ } else {
191+ targetWidget . execute ( ) ;
192+ }
193+ setTimeout ( ( ) => this . __toStep ( steps , idx ) , 100 ) ;
180194 } else {
181- widget . execute ( ) ;
195+ // target not found, move to the next step
196+ this . __toStepCheck ( this . __currentIdx + 1 ) ;
197+ return ;
182198 }
183- setTimeout ( ( ) => this . __toStep ( steps , idx ) , 100 ) ;
184199 } else {
185200 this . __toStep ( steps , idx ) ;
186201 }
@@ -207,8 +222,11 @@ qx.Class.define("osparc.tours.Manager", {
207222 const step = steps [ idx ] ;
208223 const stepWidget = this . __currentBubble = this . __createStep ( ) ;
209224 if ( step . anchorEl ) {
210- const el = document . querySelector ( `[${ step . anchorEl } ]` ) ;
211- const targetWidget = qx . ui . core . Widget . getWidgetByElement ( el ) ;
225+ let targetWidget = null ;
226+ const element = this . __getVisibleElement ( step . anchorEl ) ;
227+ if ( element ) {
228+ targetWidget = qx . ui . core . Widget . getWidgetByElement ( element ) ;
229+ }
212230 if ( targetWidget ) {
213231 stepWidget . setElement ( targetWidget ) ;
214232 if ( step . placement ) {
@@ -224,6 +242,7 @@ qx.Class.define("osparc.tours.Manager", {
224242 // intro text, it will be centered
225243 stepWidget . getChildControl ( "caret" ) . exclude ( ) ;
226244 }
245+
227246 if ( step . title ) {
228247 stepWidget . setTitle ( step . title ) ;
229248 }
0 commit comments