Fix onDeselected not being called
Browse files- index.html +20 -23
- src/driver.ts +1 -1
- src/highlight.ts +1 -1
- src/popover.ts +1 -0
index.html
CHANGED
@@ -401,20 +401,14 @@ npm install driver.js</pre
|
|
401 |
document.getElementById("async-tour").addEventListener("click", () => {
|
402 |
const driverObj = driver({
|
403 |
animate: true,
|
404 |
-
backdropColor: "blue",
|
405 |
opacity: 0.3,
|
406 |
-
onDeselected: (element => {
|
407 |
-
if (element?.classList?.contains('dynamic-el')) {
|
408 |
-
element?.parentElement?.removeChild(element);
|
409 |
-
}
|
410 |
-
}),
|
411 |
steps: [
|
412 |
{
|
413 |
element: ".page-header",
|
414 |
popover: {
|
415 |
title: "Async Driver.js",
|
416 |
description:
|
417 |
-
|
418 |
side: "bottom",
|
419 |
align: "start",
|
420 |
},
|
@@ -427,38 +421,41 @@ npm install driver.js</pre
|
|
427 |
side: "left",
|
428 |
align: "start",
|
429 |
onNextClick: () => {
|
430 |
-
const newDiv = document.querySelector(
|
431 |
-
|
432 |
-
newDiv.innerHTML =
|
433 |
-
newDiv.style.display =
|
434 |
-
newDiv.style.padding =
|
435 |
-
newDiv.style.backgroundColor =
|
436 |
-
newDiv.style.color =
|
437 |
-
newDiv.style.fontSize =
|
438 |
-
newDiv.style.position =
|
439 |
newDiv.style.top = `${Math.random() * (500 - 30) + 30}px`;
|
440 |
newDiv.style.left = `${Math.random() * (500 - 30) + 30}px`;
|
441 |
-
newDiv.className =
|
442 |
|
443 |
document.body.appendChild(newDiv);
|
444 |
|
445 |
driverObj.moveNext();
|
446 |
-
}
|
447 |
},
|
448 |
},
|
449 |
{
|
450 |
-
element:
|
451 |
popover: {
|
452 |
title: "Dynamic Elements",
|
453 |
-
description: "This was created before we moved here"
|
454 |
-
|
|
|
|
|
|
|
455 |
},
|
456 |
{
|
457 |
element: ".page-header sup",
|
458 |
popover: {
|
459 |
title: "Improved Hooks",
|
460 |
description:
|
461 |
-
|
462 |
side: "bottom",
|
463 |
align: "start",
|
464 |
},
|
@@ -621,7 +618,7 @@ npm install driver.js</pre
|
|
621 |
const driverObj = driver({
|
622 |
stagePadding: 0,
|
623 |
popoverOffset: 20,
|
624 |
-
stageRadius: 10
|
625 |
});
|
626 |
|
627 |
driverObj.highlight({
|
|
|
401 |
document.getElementById("async-tour").addEventListener("click", () => {
|
402 |
const driverObj = driver({
|
403 |
animate: true,
|
|
|
404 |
opacity: 0.3,
|
|
|
|
|
|
|
|
|
|
|
405 |
steps: [
|
406 |
{
|
407 |
element: ".page-header",
|
408 |
popover: {
|
409 |
title: "Async Driver.js",
|
410 |
description:
|
411 |
+
"Driver.js has been written from the ground up. The new version is more powerful, has less surprises, more customizable and tons of new features.",
|
412 |
side: "bottom",
|
413 |
align: "start",
|
414 |
},
|
|
|
421 |
side: "left",
|
422 |
align: "start",
|
423 |
onNextClick: () => {
|
424 |
+
const newDiv = document.querySelector(".dynamic-el") || document.createElement("div");
|
425 |
+
|
426 |
+
newDiv.innerHTML = "This is a new Element";
|
427 |
+
newDiv.style.display = "block";
|
428 |
+
newDiv.style.padding = "20px";
|
429 |
+
newDiv.style.backgroundColor = "black";
|
430 |
+
newDiv.style.color = "white";
|
431 |
+
newDiv.style.fontSize = "14px";
|
432 |
+
newDiv.style.position = "fixed";
|
433 |
newDiv.style.top = `${Math.random() * (500 - 30) + 30}px`;
|
434 |
newDiv.style.left = `${Math.random() * (500 - 30) + 30}px`;
|
435 |
+
newDiv.className = "dynamic-el";
|
436 |
|
437 |
document.body.appendChild(newDiv);
|
438 |
|
439 |
driverObj.moveNext();
|
440 |
+
},
|
441 |
},
|
442 |
},
|
443 |
{
|
444 |
+
element: ".dynamic-el",
|
445 |
popover: {
|
446 |
title: "Dynamic Elements",
|
447 |
+
description: "This was created before we moved here",
|
448 |
+
onDeselected: element => {
|
449 |
+
element?.parentElement?.removeChild(element);
|
450 |
+
},
|
451 |
+
},
|
452 |
},
|
453 |
{
|
454 |
element: ".page-header sup",
|
455 |
popover: {
|
456 |
title: "Improved Hooks",
|
457 |
description:
|
458 |
+
"Unlike the older version, new version doesn't work with z-indexes so no more positional issues.",
|
459 |
side: "bottom",
|
460 |
align: "start",
|
461 |
},
|
|
|
618 |
const driverObj = driver({
|
619 |
stagePadding: 0,
|
620 |
popoverOffset: 20,
|
621 |
+
stageRadius: 10,
|
622 |
});
|
623 |
|
624 |
driverObj.highlight({
|
src/driver.ts
CHANGED
@@ -149,7 +149,7 @@ export function driver(options: Config = {}) {
|
|
149 |
const activeElement = getState("activeElement");
|
150 |
const activeStep = getState("activeStep");
|
151 |
|
152 |
-
const onDeselected = getConfig("onDeselected");
|
153 |
const onDestroyed = getConfig("onDestroyed");
|
154 |
|
155 |
document.body.classList.remove("driver-active", "driver-fade", "driver-simple");
|
|
|
149 |
const activeElement = getState("activeElement");
|
150 |
const activeStep = getState("activeStep");
|
151 |
|
152 |
+
const onDeselected = activeStep?.popover?.onDeselected || getConfig("onDeselected");
|
153 |
const onDestroyed = getConfig("onDestroyed");
|
154 |
|
155 |
document.body.classList.remove("driver-active", "driver-fade", "driver-simple");
|
src/highlight.ts
CHANGED
@@ -72,7 +72,7 @@ function transferHighlight(toElement: Element, toStep: DriveStep) {
|
|
72 |
const isAnimatedTour = getConfig("animate");
|
73 |
const highlightStartedHook = getConfig("onHighlightStarted");
|
74 |
const highlightedHook = getConfig("onHighlighted");
|
75 |
-
const deselectedHook = getConfig("onDeselected");
|
76 |
|
77 |
if (!isFirstHighlight && deselectedHook) {
|
78 |
deselectedHook(isFromDummyElement ? undefined : fromElement, fromStep!);
|
|
|
72 |
const isAnimatedTour = getConfig("animate");
|
73 |
const highlightStartedHook = getConfig("onHighlightStarted");
|
74 |
const highlightedHook = getConfig("onHighlighted");
|
75 |
+
const deselectedHook = fromStep?.popover?.onDeselected || getConfig("onDeselected");
|
76 |
|
77 |
if (!isFirstHighlight && deselectedHook) {
|
78 |
deselectedHook(isFromDummyElement ? undefined : fromElement, fromStep!);
|
src/popover.ts
CHANGED
@@ -28,6 +28,7 @@ export type Popover = {
|
|
28 |
|
29 |
// Called after the popover is rendered
|
30 |
onPopoverRendered?: (popover: PopoverDOM) => void;
|
|
|
31 |
|
32 |
// Button callbacks
|
33 |
onNextClick?: (element: Element | undefined, step: DriveStep) => void;
|
|
|
28 |
|
29 |
// Called after the popover is rendered
|
30 |
onPopoverRendered?: (popover: PopoverDOM) => void;
|
31 |
+
onDeselected?: (element: Element | undefined, step: DriveStep) => void;
|
32 |
|
33 |
// Button callbacks
|
34 |
onNextClick?: (element: Element | undefined, step: DriveStep) => void;
|