A simple, lightweight, clean and small library for creating guided product tours for your web app.

Overview

Tourguide.js

Simple, lightweight library for creating guided tours for your web, apps and more.

A tour guide is a person who provides assistance, information on cultural, historical and contemporary heritage to people on organized tours and individual clients at educational establishments, religious and historical sites, museums, and at venues of other significant interest, attractions sites. [https://en.wikipedia.org/wiki/Tour_guide]

Fiddle with It

Want to see how it works right away? Try on JSFiddle

Install Tourguide.js

npm i tourguidejs

Why do I need Tourguide.js

Every time you build you next awesome web app, you sit back and stare lovingly at your handy-work :) But then inevitably someone comes along asking one and the same inconvenient question: "So, how do I use it?"

You try to explain, but people are just not getting it! You write how-tos, lengthy docs, and step-by-step guides, and yet, nothing seems to be enough.

This is why we built Tourguide.js - a simple yet powerful explainer utility, designed to help you make the reply a little bit less painful. Because, let's face it - picture is worth a 1000 words:

Getting started

There are a few ways you can use Tourguide.js

Fiddle with it

Want to see how it works right away? Try on JSFiddle

CommonJS

Download tourguide.min.js, add it to your project libraries, and then include it on page:

<script src="tourguide.min.js"></script>

ES Module support

If you use ES modules in your project (Webpack, Rollup) import Tourguide.js like so:

import Tourguide from "tourguidejs";

Usage

Before use, Tourguide.js must be instantiated:

var tourguide = new Tourguide({options});
  • root: root element the tour steps will attach to; default is document.body

  • selector: if you want to use content based tour approach you can use this option to specify the common selector for the tour steps; default is [data-tour]

  • animationspeed: speed of all tour built-in animations; default is 300

  • padding: additional padding to add to step highlighter; default is 5(px)

  • align<'top' | 'bottom' | 'center'>: the vertical alignment of the tour targets. default is 'top'

  • steps: if you choose to take JSON based tour approach provide use this property to provide the data; default is null

  • src: if you want to load the tour from a remote URL you may specify it here; default is null

  • preloadimages: if you want to preload images, you may set this attribute to true; default is false

  • restoreinitialposition: if you want to restore the scroll position after the tour ended, you may set this attribute to true; default is true

  • colors: if you want to customize the color schema of this plugin, use this attribute. object will be combine with default values.

    Here is the defult

    {
      "overlay": "rgba(0, 0, 0, 0.5)",
      "background": "#fff",
      "bullet": "#ff4141",
      "bulletVisited": "#aaa",
      "bulletCurrent": "#b50000",
      "stepButtonPrev": "#ff4141",
      "stepButtonNext": "#ff4141",
      "stepButtonComplete": "#b50000",
    }
  • keyboardNavigation: if you want to enable keyboard navigation, use this attribute. each attribute can be number, string or object. If you want to disable the keyboard navigation, just set this option to false.

    Here is the default

    {
      "next": "ArrowRight",
      "prev": "ArrowLeft",
      "first": "Home",
      "last": "End",
      "complete": null,
      "stop": "Escape"
    }
  • request: if you want to load the tour from a remote URL you may provide request headers here

  • onStart: callback function triggered when the tour starts

  • onStop: callback function triggered when tour stops

  • onComplete: callback triggered when tour completes

  • onStep: callback triggered when a tour step is shown

  • onAction: callback triggered when the user-defined action processed. see onAction for more detail.

Once instantiated you can use tourguide instance a several different ways:

Content based approach

Simplest approach is to read the descriptions right off the elements on page. This works best if you are using an MVC approach in your application. Simply add tour descriptions to the HTML elements in your page template:

<button aria-label="Collaborate" data-tour="step: 1; title: Step1; content: Lorem ipsum dolor sit amet">
  Collaborate
</button>

In this mode you can simply use Tourguide.js as-is:

var tourguide = new Tourguide();
tourguide.start();

About step details, See Step section.

JSON based approach

You may also write your own steps definition using JSON notation:

`[`
`  {`
`    "selector": null,`
`    "step": 1,`
`    "title": "Lets take a moment and look around Docsie library",`
`    "content": "Click a button to advance to the next step of this tour.<br/> To stop this tour at any time click a button in the top-right corner.",`
`    "image": "https://somehost.com/image.jpeg"`
`  },`
`  {`
`    "selector": "[data-component=library]:first-of-type",`
`    "step": 2,`
`    "title": "Shelf",`
`    "content": "Just like a real library &lt;mark&gt;Docsie&lt;/mark&gt; starts with &lt;dfn&gt;shelves&lt;/dfn&gt;. Each &lt;dfn&gt;shelf&lt;/dfn&gt; represnts a separate collection of ideas. You may think of them as individual websites, or website sections."`
`  }`
`]`

Once you have the complete JSON description for each of your tour steps you will have to initialize Tourguide.js passing your JSON as steps: property:

var steps = [...];
var tourguide = new Tourguide({steps: steps});
tourguide.start();

About step details, See Step section.

Remote URL approach

You may also want to load the steps remotely. To do so simply provide the target src as one of the Tourguide.js init params:

var tourguide = new Tourguide({src: "https://somedomain.com/tours/guide.json"});
tourguide.start();

About step details, See Step section.

Step

  • selector?<string>: CSS selector used to find the target element (used on JSON based approach and Remote URL approach)

  • step<number>: tour step sequence number

  • title<string>: tour step title

  • marked?<boolean>: if content is markdown, you may set this attr to true; default false.

  • content<string>: tour step description. if marked is true, you can write the content with markdown language.

  • image?<url>: tour step illustration

  • actions?<array>: tour actions array.

    • target?<string>: CSS selector used to find the target element. default is current step's target.

    • act?<string | number | function>: action after event triggered.

      • string: "next" | "previous" | "stop" | "complete"
      • number: same as step.go(number).
      • function: callback function. function (event, currentstep, curaction)
    • event<object | string>: event details. if you want just use only the event type, set it as a string value, otherwise set it as an object.

      All KeyboardEvent attribute is accepted including keyCode, altKey, metaKey, ctrlKey and etc. View This doc for more details about the KeyboardEvent: https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent

    Example:

    {
      ...
      "actions": [
        {
          "target": "body",
          "act": (event, currentstep, curaction, tourguide) => { /* your logic here */ }
          "event": {
            "type": "keyup"
            "keyCode": 39, // arrow right
            "ctrlKey": true // with ctrl key
          }
        },
        {
          "act": "next",
          "event": "click"
        }
      ]
      ...
    }

?* indicates the property is optional*

Controlling the tour

Once your tour has started you have several ways to manually control the tour flow:

tourguide.start([step])

Start the tour at any time by calling start(). You may optionally provide the step number to start the tour at a specific step (by default a tour always starts at step 1):

tourguide.start(2)

tourguide.stop()

Stop the tour at any moment by calling stop()

tourguide.next()

Causes tour to go to the next step in the sequence

tourguide.previous()

Causes tour to go to the previous step in the sequence

tourguide.go(step)

Causes tour to go to the step specified

tourguide.go(2)

Additional properties

  • tourguide.currentstep: returns the current step object

  • tourguide.length: return the number of steps on the tour

  • tourguide.steps: returns the tour steps as JSON notation

  • tourguide.hasnext: return true if there are steps remaining in the tour, otherwise returns false

  • tourguide.options: returns Tourguide.js options object

Attaching callbacks

Tourguide.js supports several helpful callbacks to help you better control the tour. You may optionally pass the callback functions into the tour instance at initialization time:

var tourguide = new Tourguide({
  `onStart:function(options){...},`
  `onStop:function(options){...},`
  `onComplete:function(){...},`
  `onStep:function(currentstep, type){...},`
  `onAction:function(currentstep, e){...}`
});

onStart

Fires when the guided tour is started. The callback function will receive a single param:

  • options: tour options object

onStop

Fires when the guided tour stops. The callback function will receive a single param:

  • options: tour options object

onComplete

Fires when the guided tour is complete. The callback function will receives no params.

NOTE: onStop is always fired first, before onComplete is fired

onStep

Fires when tour step is activated. The callback function receives two params:

  • currentstep: tour step object

  • type: string representing the current direction of the tor; can be one of: "previous" | "next"

onAction

Fires when user has clicked on the step target. The callback function receives two params:

Step object

Each step of the tour is wrapped into a Step class. This allows you to have a direct access to the individual step properties and actions:

  • target: returns the target element step is attached to

  • el: returns the step view element

  • show(): show step element

  • hide(): hide step element

You can obtain the current step object an any time during the tour execution by calling tourguide.currentstep property:

var currentstep = tourguide.currentstep;
var stepTarget = currentstep.target;
var stepView = currentstep.el;

License

Tourguide.js is licensed under BSD 3-Clause "New" or "Revised" License

A permissive license similar to the BSD 2-Clause License, but with a 3rd clause that prohibits others from using the name of the project or its contributors to promote derived products without written consent.

Comments
  • I'm getting this error when I was trying to use this in reactjs

    I'm getting this error when I was trying to use this in reactjs

    ./src/tourguidejs/tourguide.esm.js Line 8:172: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 8:541: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 8:3717: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 8:4877: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 8:5761: Expected an assignment or function call and instead saw an expression no-unused-expressions Line 8:7802: Expected an assignment or function call and instead saw an expression no-unused-expressions

    help wanted 
    opened by pratik9722 5
  • Bugfix/#24

    Bugfix/#24

    Changes

    • DOM structure
      • add the inner element on each step element (for relative position).
      • each step element position properties changed from fixed to absolute
      • removed the overflow: hidden on .guided-tour class.
    • getBoundingReact function.
    • Not support root option.

    Updates

    • getViewportReact function.

    Fixes

    • scrolling-back functionality.
    • background show/hide timing.
    • bug fix #24
    opened by syJSdev 3
  • Don't hide overlay between 2 steps

    Don't hide overlay between 2 steps

    Hi,

    Congrats for this project !

    I integrate it on my product, but there is a tiny problem.

    When we are jumping from step to step, unactive the overlay and active the overlay and it's like a blinking and it's a deceptive effet.

    Can you help me ?

    Regards

    Michael

    opened by michaelfr 3
  • Typo in demo

    Typo in demo

    Describe the bug

    There's a typo in the demo

    To Reproduce

    Go to the demo and go through the tour. The last card says card 4

    image

    Expected behavior Should say card 2

    opened by tacman 2
  • Bump minimatch and mocha in /test

    Bump minimatch and mocha in /test

    Bumps minimatch to 5.0.1 and updates ancestor dependency mocha. These dependencies need to be updated together.

    Updates minimatch from 3.0.4 to 5.0.1

    Changelog

    Sourced from minimatch's changelog.

    change log

    5.1

    • use windowsPathNoEscape/allowWindowsEscape opts

    5.0

    • brace-expansion: ignore only blocks that begins with $
    • Expect exclusively forward slash as path sep, same as node-glob

    4.2

    • makeRe: globstar should match zero+ path portions
    • Fix bug with escaped '@' in patterns

    4.1

    • treat nocase:true as always having magic
    • expose GLOBSTAR marker

    4.0

    • Update to modern JS syntax
    • Add allowWindowsEscape option

    3.x

    • Added basic redos protection
    • Handle unfinished !( extglob patterns
    • Add partial: true option
    Commits
    • 9f49616 5.0.1
    • cdc3188 don't load the whole path module just for the sep
    • dfa4f22 test unix path so win32 has full coverage
    • a000988 remove unused npmignore file
    • 0b2d3ba mention fnmatch(3) in impl comparison
    • 8c3f5f4 skip tests on windows that rely on \ being a valid path char
    • fc44f5f 5.0.0
    • 9104d8d Expect exclusively forward slash as path sep, same as node-glob
    • 58b72d3 fix(brace-expansion): ignore only blocks that begins with $
    • 048ada0 4.2.1
    • Additional commits viewable in compare view

    Updates mocha from 6.2.3 to 10.1.0

    Release notes

    Sourced from mocha's releases.

    v10.1.0

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    v10.0.0

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    v9.2.2

    9.2.2 / 2022-03-11

    Please also note our announcements.

    :bug: Fixes

    ... (truncated)

    Changelog

    Sourced from mocha's changelog.

    10.1.0 / 2022-10-16

    :tada: Enhancements

    :nut_and_bolt: Other

    10.0.0 / 2022-05-01

    :boom: Breaking Changes

    :nut_and_bolt: Other

    Also thanks to @​ea2305 and @​SukkaW for improvements to our documentation.

    9.2.2 / 2022-03-11

    :bug: Fixes

    :nut_and_bolt: Other

    ... (truncated)

    Commits
    • 5f96d51 build(v10.1.0): release
    • ed74f16 build(v10.1.0): update CHANGELOG
    • 51d4746 chore(devDeps): update 'ESLint' to v8 (#4926)
    • 4e06a6f fix(browser): increase contrast for replay buttons (#4912)
    • 41567df Support prefers-color-scheme: dark (#4896)
    • 61b4b92 fix the regular expression for function clean in utils.js (#4770)
    • 77c18d2 chore: use standard 'Promise.allSettled' instead of polyfill (#4905)
    • 84b2f84 chore(ci): upgrade GH actions to latest versions (#4899)
    • 023f548 build(v10.0.0): release
    • 62b1566 build(v10.0.0): update CHANGELOG
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Colors doesn't work

    Colors doesn't work

    Describe the bug According to the readme you should be able to set colors. But this feature seems to be unimplemented.

    To Reproduce Steps to reproduce the behavior:

    1. create a new tourguide with new Tourguide({colors: {bullet: '#000'}})
    2. the colors are unchanged

    Expected behavior bullet color should be black

    Desktop (please complete the following information):

    • Browser chrome

    Additional context There's no mention of colors anywhere in the sourcecode downloaded from npm v0.3.0. Is this a build issue? I can see that it's implemented in the github source

    opened by SimonLandeholm 1
  • Bump jsdom from 15.2.1 to 16.5.0 in /test

    Bump jsdom from 15.2.1 to 16.5.0 in /test

    Bumps jsdom from 15.2.1 to 16.5.0.

    Release notes

    Sourced from jsdom's releases.

    Version 16.5.0

    • Added window.queueMicrotask().
    • Added window.event.
    • Added inputEvent.inputType. (diegohaz)
    • Removed ondragexit from Window and friends, per a spec update.
    • Fixed the URL of about:blank iframes. Previously it was getting set to the parent's URL. (SimonMueller)
    • Fixed the loading of subresources from the filesystem when they had non-ASCII filenames.
    • Fixed the hidden="" attribute to cause display: none per the user-agent stylesheet. (ph-fritsche)
    • Fixed the new File() constructor to no longer convert / to :, per a pending spec update.
    • Fixed mutation observer callbacks to be called with the MutationObserver instance as their this value.
    • Fixed <input type=checkbox> and <input type=radio> to be mutable even when disabled, per a spec update.
    • Fixed XMLHttpRequest to not fire a redundant final progress event if a progress event was previously fired with the same loaded value. This would usually occur with small files.
    • Fixed XMLHttpRequest to expose the Content-Length header on cross-origin responses.
    • Fixed xhr.response to return null for failures that occur during the middle of the download.
    • Fixed edge cases around passing callback functions or event handlers. (ExE-Boss)
    • Fixed edge cases around the properties of proxy-like objects such as localStorage or dataset. (ExE-Boss)
    • Fixed a potential memory leak with custom elements (although we could not figure out how to trigger it). (soncodi)

    Version 16.4.0

    • Added a not-implemented warning if you try to use the second pseudo-element argument to getComputedStyle(), unless you pass a ::part or ::slotted pseudo-element, in which case we throw an error per the spec. (ExE-Boss)
    • Improved the performance of repeated access to el.tagName, which also indirectly improves performance of selector matching and style computation. (eps1lon)
    • Fixed form.elements to respect the form="" attribute, so that it can contain non-descendant form controls. (ccwebdesign)
    • Fixed el.focus() to do nothing on disconnected elements. (eps1lon)
    • Fixed el.focus() to work on SVG elements. (zjffun)
    • Fixed removing the currently-focused element to move focus to the <body> element. (eps1lon)
    • Fixed imgEl.complete to return true for <img> elements with empty or unset src="" attributes. (strager)
    • Fixed imgEl.complete to return true if an error occurs loading the <img>, when canvas is enabled. (strager)
    • Fixed imgEl.complete to return false if the <img> element's src="" attribute is reset. (strager)
    • Fixed the valueMissing validation check for <input type="radio">. (zjffun)
    • Fixed translate="" and draggable="" attribute processing to use ASCII case-insensitivity, instead of Unicode case-insensitivity. (zjffun)

    Version 16.3.0

    • Added firing of focusin and focusout when using el.focus() and el.blur(). (trueadm)
    • Fixed elements with the contenteditable="" attribute to be considered as focusable. (jamieliu386)
    • Fixed window.NodeFilter to be per-Window, instead of shared across all Windows. (ExE-Boss)
    • Fixed edge-case behavior involving use of objects with handleEvent properties as event listeners. (ExE-Boss)
    • Fixed a second failing image load sometimes firing a load event instead of an error event, when the canvas package is installed. (strager)
    • Fixed drawing an empty canvas into another canvas. (zjffun)

    Version 16.2.2

    • Updated StyleSheetList for better spec compliance; notably it no longer inherits from Array.prototype. (ExE-Boss)
    • Fixed requestAnimationFrame() from preventing process exit. This likely regressed in v16.1.0.
    • Fixed setTimeout() to no longer leak the closures passed in to it. This likely regressed in v16.1.0. (AviVahl)
    • Fixed infinite recursion that could occur when calling click() on a <label> element, or one of its descendants.
    • Fixed getComputedStyle() to consider inline style="" attributes. (eps1lon)
    • Fixed several issues with <input type="number">'s stepUp() and stepDown() functions to be properly decimal-based, instead of floating point-based.
    • Fixed various issues where updating selectEl.value would not invalidate properties such as selectEl.selectedOptions. (ExE-Boss)
    • Fixed <input>'s src property, and <ins>/<del>'s cite property, to properly reflect as URLs.
    • Fixed window.addEventLister, window.removeEventListener, and window.dispatchEvent to properly be inherited from EventTarget, instead of being distinct functions. (ExE-Boss)
    • Fixed errors that would occur if attempting to use a DOM object, such as a custom element, as an argument to addEventListener.

    ... (truncated)

    Changelog

    Sourced from jsdom's changelog.

    16.5.0

    • Added window.queueMicrotask().
    • Added window.event.
    • Added inputEvent.inputType. (diegohaz)
    • Removed ondragexit from Window and friends, per a spec update.
    • Fixed the URL of about:blank iframes. Previously it was getting set to the parent's URL. (SimonMueller)
    • Fixed the loading of subresources from the filesystem when they had non-ASCII filenames.
    • Fixed the hidden="" attribute to cause display: none per the user-agent stylesheet. (ph-fritsche)
    • Fixed the new File() constructor to no longer convert / to :, per a pending spec update.
    • Fixed mutation observer callbacks to be called with the MutationObserver instance as their this value.
    • Fixed <input type=checkbox> and <input type=radio> to be mutable even when disabled, per a spec update.
    • Fixed XMLHttpRequest to not fire a redundant final progress event if a progress event was previously fired with the same loaded value. This would usually occur with small files.
    • Fixed XMLHttpRequest to expose the Content-Length header on cross-origin responses.
    • Fixed xhr.response to return null for failures that occur during the middle of the download.
    • Fixed edge cases around passing callback functions or event handlers. (ExE-Boss)
    • Fixed edge cases around the properties of proxy-like objects such as localStorage or dataset. (ExE-Boss)
    • Fixed a potential memory leak with custom elements (although we could not figure out how to trigger it). (soncodi)

    16.4.0

    • Added a not-implemented warning if you try to use the second pseudo-element argument to getComputedStyle(), unless you pass a ::part or ::slotted pseudo-element, in which case we throw an error per the spec. (ExE-Boss)
    • Improved the performance of repeated access to el.tagName, which also indirectly improves performance of selector matching and style computation. (eps1lon)
    • Fixed form.elements to respect the form="" attribute, so that it can contain non-descendant form controls. (ccwebdesign)
    • Fixed el.focus() to do nothing on disconnected elements. (eps1lon)
    • Fixed el.focus() to work on SVG elements. (zjffun)
    • Fixed removing the currently-focused element to move focus to the <body> element. (eps1lon)
    • Fixed imgEl.complete to return true for <img> elements with empty or unset src="" attributes. (strager)
    • Fixed imgEl.complete to return true if an error occurs loading the <img>, when canvas is enabled. (strager)
    • Fixed imgEl.complete to return false if the <img> element's src="" attribute is reset. (strager)
    • Fixed the valueMissing validation check for <input type="radio">. (zjffun)
    • Fixed translate="" and draggable="" attribute processing to use ASCII case-insensitivity, instead of Unicode case-insensitivity. (zjffun)

    16.3.0

    • Added firing of focusin and focusout when using el.focus() and el.blur(). (trueadm)
    • Fixed elements with the contenteditable="" attribute to be considered as focusable. (jamieliu386)
    • Fixed window.NodeFilter to be per-Window, instead of shared across all Windows. (ExE-Boss)
    • Fixed edge-case behavior involving use of objects with handleEvent properties as event listeners. (ExE-Boss)
    • Fixed a second failing image load sometimes firing a load event instead of an error event, when the canvas package is installed. (strager)
    • Fixed drawing an empty canvas into another canvas. (zjffun)

    16.2.2

    • Updated StyleSheetList for better spec compliance; notably it no longer inherits from Array.prototype. (ExE-Boss)
    • Fixed requestAnimationFrame() from preventing process exit. This likely regressed in v16.1.0.
    • Fixed setTimeout() to no longer leak the closures passed in to it. This likely regressed in v16.1.0. (AviVahl)
    • Fixed infinite recursion that could occur when calling click() on a <label> element, or one of its descendants.
    • Fixed getComputedStyle() to consider inline style="" attributes. (eps1lon)
    • Fixed several issues with <input type="number">'s stepUp() and stepDown() functions to be properly decimal-based, instead of floating point-based.

    ... (truncated)

    Commits
    • 2d82763 Version 16.5.0
    • 9741311 Fix loading of subresources with Unicode filenames
    • 5e46553 Use domenic's ESLint config as the base
    • 19b35da Fix the URL of about:blank iframes
    • 017568e Support inputType on InputEvent
    • 29f4fdf Upgrade dependencies
    • e2f7639 Refactor create‑event‑accessor.js to remove code duplication
    • ff69a75 Convert JSDOM to use callback functions
    • 19df6bc Update links in contributing guidelines
    • 1e34ff5 Test triage
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump async from 2.6.3 to 2.6.4 in /test

    Bump async from 2.6.3 to 2.6.4 in /test

    Bumps async from 2.6.3 to 2.6.4.

    Changelog

    Sourced from async's changelog.

    v2.6.4

    • Fix potential prototype pollution exploit (#1828)
    Commits
    Maintainer changes

    This version was pushed to npm by hargasinski, a new releaser for async since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Add backward navigation

    Add backward navigation

    Describe the solution you'd like

    I'd like to be able to go backwards in the tour without clicking on the nav dots.

    A left chevon, opposite the one on the right, to go back to the previous slide.

    image

    enhancement 
    opened by tacman 1
  • onLoaded callback

    onLoaded callback

    Is your feature request related to a problem? Please describe. When using remote src, if the user starts tour before the plugin initializes, this error happened. image

    Describe the solution you'd like Need the onLoaded callback which notifies the plugin is ready.

    bug enhancement 
    opened by syJSdev 1
  • Doesn't work on Safari / iPhone / iPad

    Doesn't work on Safari / iPhone / iPad

    When I view the tour on my iPad or iPhone in Safari and in Chrome, all positioning is messed up.

    It doesn't matter if I do it in my app - or in the JS fiddle example on the main page, all highlighted elements are dead center, and the prompts appear in random locations.

    I wish I'd known this before adding it to every section of my app! 123

    opened by chriscollins405 1
  • Bump qs from 6.5.2 to 6.5.3 in /test

    Bump qs from 6.5.2 to 6.5.3 in /test

    Bumps qs from 6.5.2 to 6.5.3.

    Changelog

    Sourced from qs's changelog.

    6.5.3

    • [Fix] parse: ignore __proto__ keys (#428)
    • [Fix] utils.merge: avoid a crash with a null target and a truthy non-array source
    • [Fix] correctly parse nested arrays
    • [Fix] stringify: fix a crash with strictNullHandling and a custom filter/serializeDate (#279)
    • [Fix] utils: merge: fix crash when source is a truthy primitive & no options are provided
    • [Fix] when parseArrays is false, properly handle keys ending in []
    • [Fix] fix for an impossible situation: when the formatter is called with a non-string value
    • [Fix] utils.merge: avoid a crash with a null target and an array source
    • [Refactor] utils: reduce observable [[Get]]s
    • [Refactor] use cached Array.isArray
    • [Refactor] stringify: Avoid arr = arr.concat(...), push to the existing instance (#269)
    • [Refactor] parse: only need to reassign the var once
    • [Robustness] stringify: avoid relying on a global undefined (#427)
    • [readme] remove travis badge; add github actions/codecov badges; update URLs
    • [Docs] Clean up license text so it’s properly detected as BSD-3-Clause
    • [Docs] Clarify the need for "arrayLimit" option
    • [meta] fix README.md (#399)
    • [meta] add FUNDING.yml
    • [actions] backport actions from main
    • [Tests] always use String(x) over x.toString()
    • [Tests] remove nonexistent tape option
    • [Dev Deps] backport from main
    Commits
    • 298bfa5 v6.5.3
    • ed0f5dc [Fix] parse: ignore __proto__ keys (#428)
    • 691e739 [Robustness] stringify: avoid relying on a global undefined (#427)
    • 1072d57 [readme] remove travis badge; add github actions/codecov badges; update URLs
    • 12ac1c4 [meta] fix README.md (#399)
    • 0338716 [actions] backport actions from main
    • 5639c20 Clean up license text so it’s properly detected as BSD-3-Clause
    • 51b8a0b add FUNDING.yml
    • 45f6759 [Fix] fix for an impossible situation: when the formatter is called with a no...
    • f814a7f [Dev Deps] backport from main
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
Releases(1.0.1)
  • 1.0.1(Dec 2, 2022)

    What's Changed

    • Bugfix/correct scroll offset by @it-s in https://github.com/LikaloLLC/tourguide.js/pull/61
    • Bump ansi-regex from 3.0.0 to 3.0.1 in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/56
    • Bump ecstatic and http-server in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/57
    • Bump ws from 7.4.3 to 7.5.9 in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/58
    • Bump json-schema and jsprim in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/59
    • Feature/markdown by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/33
    • Correctly parse steps of the tour when from DOM source by @it-s in https://github.com/LikaloLLC/tourguide.js/pull/35
    • Feature/fix tests by @it-s in https://github.com/LikaloLLC/tourguide.js/pull/36
    • markdown test by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/38
    • colors option feature by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/39
    • Bugfix/#24 by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/37
    • Feature/Actions and Bug fix by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/42
    • Back step navigation button by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/44
    • Keyboard navigation feature by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/43
    • Bugfix, Examples, New Features by @syJSdev in https://github.com/LikaloLLC/tourguide.js/pull/46
    • Bump lodash from 4.17.20 to 4.17.21 in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/47
    • Bump follow-redirects from 1.13.2 to 1.14.8 in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/48
    • Bump minimist from 1.2.5 to 1.2.6 in /test by @dependabot in https://github.com/LikaloLLC/tourguide.js/pull/51
    • Version 1.0 by @it-s in https://github.com/LikaloLLC/tourguide.js/pull/55

    Full Changelog: https://github.com/LikaloLLC/tourguide.js/compare/0.3.0...1.0.0 Full Changelog: https://github.com/LikaloLLC/tourguide.js/compare/1.0.0...1.0.1

    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Jan 21, 2021)

    We've updated tourguide.js to reduce address multiple rendering issues reported by the community.

    fixed overlay issues #25, #28 fixed error reporting issue #10 fixed cleaning up issue #31

    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(May 17, 2019)

    This is a maintenance release. Readme has been updated. Also there is now a separate documentation site at https://sites.docsie.io/sewing-necessary/Documentation/

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(May 17, 2019)

    This release add the following:

    • Restore scroll position after tour is complete
    • Allow user clicks action target
    • Center the bubble when target DOM node is invisible
    • Mobile CSS fixes
    • bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 0.1.9(May 1, 2019)

Owner
Docsie.io
We are a software company from Thornhill, ON. Our products include www.docsie.io, metrics.im and hanba.io
Docsie.io
Coverage-guided, in-process fuzzing for the Node.js

Jazzer.js Jazzer.js is a coverage-guided, in-process fuzzer for the Node.js platform developed by Code Intelligence. It is based on libFuzzer and brin

Code Intelligence 113 Dec 26, 2022
Personal project to a student schedule classes according his course level. Using GraphQL, Clean Code e Clean Architecture.

classes-scheduler-graphql This is a personal project for student scheduling, with classes according his course level. I intend to make just the backen

Giovanny Lucas 6 Jul 9, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
A small javascript DOM manipulation library based on Jquery's syntax. Acts as a small utility library with the most common functions.

Quantdom JS Quantdom is a very small (about 600 bytes when ran through terser & gzipped) dom danipulation library that uuses a Jquery like syntax and

Sean McQuaid 7 Aug 16, 2022
✨ Small and Clean JavaScript Toast Notifications

BuzzNotify Small and Clean JavaScript Toast Notifications New version introduces breaking changes! Now the styles come separately and you will have to

R. Eliut 9 Aug 23, 2022
Simple jQuery plugin that will allow users to zoom in your images, perfect for product images and galleries.

Image Zoom (jQuery) Plugin Simple jQuery plugin that will allow users to zoom in your images, perfect for product images and galleries that is less th

Mario Duarte 8 Aug 3, 2022
JS Cloudimage 360 View - A simple, interactive resource that can be used to provide a virtual tour of your product

JS Cloudimage 360 View - A simple, interactive resource that can be used to provide a virtual tour of your product

Scaleflex 1.9k Jan 7, 2023
A small library for creating typing animations.

A small library for creating typing animations. View a short video demonstration here. Installation npm i tiper-js Usage Initialization is really simp

Carlos Santos 187 Nov 5, 2022
A small web app that tries to imitate the desktop web version of amazon site, you can add items to the basket, delete them, and have your user authentication feature thanks to Firebase.

Features Here's the feature's included in this project ??‍??‍??‍?? Login Page ?? Products Page ?? Cart and Checkout Page ?? Sign up function with Goog

Murad Rahmanzada 16 Aug 22, 2022
A clean and lightweight TypeScript Next.js Starter powered by the tools (nearly) everybody use

This is a template for a Next.js project based on create-next-app Report Bug · Request Feature ⚡ Quickstart You can click on the button Use this templ

José Manuel Lucas 8 Nov 14, 2022
✏️ A small jQuery extension to turn a static HTML table into an editable one. For quickly populating a small table with JSON data, letting the user modify it with validation, and then getting JSON data back out.

jquery-editable-table A small jQuery extension to turn an HTML table editable for fast data entry and validation Demo ?? https://jsfiddle.net/torrobin

Tor 7 Jul 31, 2022
Simple scripts for crawling shopee's shop and product information from shopee.vn

Table of Contents About The Project Built With Getting Started Prerequisites Installation Usage License About The Project shopee-crawler is a simple p

Hoàng Kim Minh 5 Dec 13, 2022
waitlyst.js provides in-app widgets for collecting customer feedback & product analytics.

waitlyst.js provides in-app widgets for collecting customer feedback & product analytics. Track every event on your app Understand your users and how

Indextrus 8 Dec 3, 2022
Essential Audio Player JS is a simple, clean and minimal JavaScript / HTML5 / CSS web audio player.

Essential Audio Player JS is a simple, clean and minimal JavaScript / HTML5 / CSS web audio player. No unnecessary controls, just a button and a track

null 32 Dec 14, 2022
A simple, strictly typed ORM, to assist you in using Cloudflare's D1 product

D1-Orm ✨ A simple, strictly typed ORM, to assist you in using Cloudflare's D1 product API reference can be found at https://d1-orm.pages.dev/modules D

null 78 Dec 25, 2022
An e-commerce web application that allows people to buy clothes product

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

Jamila Moseka 5 Aug 4, 2022
Tiny API that provide product/library name for a URL

JSer.info Product Name API Tiny API that provide product/library name for a URL. Usage Supported All products. curl https://jser-product-name.deno.dev

JSer.info 6 Oct 21, 2022