Fixes #383 - adds support for disableActiveInteraction option
Browse files- index.html +8 -0
- src/config.ts +3 -0
- src/driver.css +8 -2
- src/highlight.ts +7 -2
- 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, | 
|  | |
| 84 | 
             
              color: #2d2d2d;
         | 
| 85 | 
             
            }
         | 
| 86 |  | 
| @@ -140,7 +141,12 @@ | |
| 140 | 
             
              overflow: hidden !important;
         | 
| 141 | 
             
            }
         | 
| 142 |  | 
| 143 | 
            -
            .driver- | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 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 =>  | 
|  | |
|  | |
| 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) {
         |