Skip to content

Commit 8d1a796

Browse files
committed
querySelectorAll
1 parent 11bf428 commit 8d1a796

File tree

1 file changed

+29
-10
lines changed
  • services/static-webserver/client/source/class/osparc/tours

1 file changed

+29
-10
lines changed

services/static-webserver/client/source/class/osparc/tours/Manager.js

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)