kamrify commited on
Commit
4ccc492
·
1 Parent(s): c2d9950

Fixes #383 - adds support for disableActiveInteraction option

Browse files
Files changed (5) hide show
  1. index.html +8 -0
  2. src/config.ts +3 -0
  3. src/driver.css +8 -2
  4. src/highlight.ts +7 -2
  5. src/utils.ts +3 -1
index.html CHANGED
@@ -386,6 +386,13 @@ npm install driver.js</pre
386
  description: "You can now have popovers without elements as well",
387
  },
388
  },
 
 
 
 
 
 
 
389
  {
390
  element: "#scrollable-area",
391
  popover: {
@@ -457,6 +464,7 @@ npm install driver.js</pre
457
  const driverObj = driver({
458
  animate: true,
459
  steps: basicTourSteps,
 
460
  showProgress: true,
461
  progressText: "{{current}} of {{total}} done",
462
  onPopoverRender: (popover) => {
 
386
  description: "You can now have popovers without elements as well",
387
  },
388
  },
389
+ {
390
+ element: '.buttons',
391
+ popover: {
392
+ title: "Buttons",
393
+ description: "Here are some buttons",
394
+ },
395
+ },
396
  {
397
  element: "#scrollable-area",
398
  popover: {
 
464
  const driverObj = driver({
465
  animate: true,
466
  steps: basicTourSteps,
467
+ disableActiveInteraction: true,
468
  showProgress: true,
469
  progressText: "{{current}} of {{total}} done",
470
  onPopoverRender: (popover) => {
src/config.ts CHANGED
@@ -15,6 +15,8 @@ export type Config = {
15
  stagePadding?: number;
16
  stageRadius?: number;
17
 
 
 
18
  allowKeyboardControl?: boolean;
19
 
20
  // Popover specific configuration
@@ -54,6 +56,7 @@ export function configure(config: Config = {}) {
54
  allowClose: true,
55
  overlayOpacity: 0.7,
56
  smoothScroll: false,
 
57
  showProgress: false,
58
  stagePadding: 10,
59
  stageRadius: 5,
 
15
  stagePadding?: number;
16
  stageRadius?: number;
17
 
18
+ disableActiveInteraction?: boolean;
19
+
20
  allowKeyboardControl?: boolean;
21
 
22
  // Popover specific configuration
 
56
  allowClose: true,
57
  overlayOpacity: 0.7,
58
  smoothScroll: false,
59
+ disableActiveInteraction: false,
60
  showProgress: false,
61
  stagePadding: 10,
62
  stageRadius: 5,
src/driver.css CHANGED
@@ -80,7 +80,8 @@
80
  transition-duration: 200ms;
81
  }
82
 
83
- .driver-popover-close-btn:hover, .driver-popover-close-btn:focus {
 
84
  color: #2d2d2d;
85
  }
86
 
@@ -140,7 +141,12 @@
140
  overflow: hidden !important;
141
  }
142
 
143
- .driver-popover-footer button:hover, .driver-popover-footer button:focus {
 
 
 
 
 
144
  background-color: #f7f7f7;
145
  }
146
 
 
80
  transition-duration: 200ms;
81
  }
82
 
83
+ .driver-popover-close-btn:hover,
84
+ .driver-popover-close-btn:focus {
85
  color: #2d2d2d;
86
  }
87
 
 
141
  overflow: hidden !important;
142
  }
143
 
144
+ .driver-no-interaction, .driver-no-interaction * {
145
+ pointer-events: none !important;
146
+ }
147
+
148
+ .driver-popover-footer button:hover,
149
+ .driver-popover-footer button:focus {
150
  background-color: #f7f7f7;
151
  }
152
 
src/highlight.ts CHANGED
@@ -146,11 +146,16 @@ function transferHighlight(toElement: Element, toStep: DriveStep) {
146
  renderPopover(toElement, toStep);
147
  }
148
 
149
- fromElement.classList.remove("driver-active-element");
150
  fromElement.removeAttribute("aria-haspopup");
151
  fromElement.removeAttribute("aria-expanded");
152
  fromElement.removeAttribute("aria-controls");
153
 
 
 
 
 
 
154
  toElement.classList.add("driver-active-element");
155
  toElement.setAttribute("aria-haspopup", "dialog");
156
  toElement.setAttribute("aria-expanded", "true");
@@ -160,7 +165,7 @@ function transferHighlight(toElement: Element, toStep: DriveStep) {
160
  export function destroyHighlight() {
161
  document.getElementById("driver-dummy-element")?.remove();
162
  document.querySelectorAll(".driver-active-element").forEach(element => {
163
- element.classList.remove("driver-active-element");
164
  element.removeAttribute("aria-haspopup");
165
  element.removeAttribute("aria-expanded");
166
  element.removeAttribute("aria-controls");
 
146
  renderPopover(toElement, toStep);
147
  }
148
 
149
+ fromElement.classList.remove("driver-active-element", "driver-no-interaction");
150
  fromElement.removeAttribute("aria-haspopup");
151
  fromElement.removeAttribute("aria-expanded");
152
  fromElement.removeAttribute("aria-controls");
153
 
154
+ const disableActiveInteraction = getConfig("disableActiveInteraction");
155
+ if (disableActiveInteraction) {
156
+ toElement.classList.add("driver-no-interaction");
157
+ }
158
+
159
  toElement.classList.add("driver-active-element");
160
  toElement.setAttribute("aria-haspopup", "dialog");
161
  toElement.setAttribute("aria-expanded", "true");
 
165
  export function destroyHighlight() {
166
  document.getElementById("driver-dummy-element")?.remove();
167
  document.querySelectorAll(".driver-active-element").forEach(element => {
168
+ element.classList.remove("driver-active-element", "driver-no-interaction");
169
  element.removeAttribute("aria-haspopup");
170
  element.removeAttribute("aria-expanded");
171
  element.removeAttribute("aria-controls");
src/utils.ts CHANGED
@@ -18,7 +18,9 @@ export function getFocusableElements(parentEls: Element[] | HTMLElement[]) {
18
 
19
  return [...(isParentFocusable ? [parentEl as HTMLElement] : []), ...focusableEls];
20
  })
21
- .filter(el => isElementVisible(el));
 
 
22
  }
23
 
24
  export function bringInView(element: Element) {
 
18
 
19
  return [...(isParentFocusable ? [parentEl as HTMLElement] : []), ...focusableEls];
20
  })
21
+ .filter(el => {
22
+ return getComputedStyle(el).pointerEvents !== "none" && isElementVisible(el);
23
+ });
24
  }
25
 
26
  export function bringInView(element: Element) {