mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 03:32:18 -05:00
45 lines
1.3 KiB
TypeScript
45 lines
1.3 KiB
TypeScript
import { Controller } from '@hotwired/stimulus'
|
|
import { driver } from 'driver.js'
|
|
|
|
// Connects to data-controller="basic-tour"
|
|
export default class extends Controller {
|
|
driverObject = null
|
|
completed = []
|
|
|
|
connect (): void {
|
|
// Find tour elements in page
|
|
const tourElements = document.querySelectorAll('[data-tour-title]')
|
|
if (tourElements.length > 0) {
|
|
// Create steps for each element
|
|
const tourSteps = [...tourElements].map((stepElement: HTMLElement) => (
|
|
{
|
|
element: '#' + stepElement.id,
|
|
popover: {
|
|
title: stepElement.dataset.tourTitle,
|
|
description: stepElement.dataset.tourDescription
|
|
}
|
|
}
|
|
))
|
|
// Create driver object
|
|
this.driverObject = driver({
|
|
onHighlighted: this.onHighlighted.bind(this),
|
|
onDestroyStarted: this.onDestroyStarted.bind(this),
|
|
showProgress: true,
|
|
steps: tourSteps
|
|
})
|
|
// Start
|
|
this.driverObject.drive()
|
|
}
|
|
}
|
|
|
|
onHighlighted (element?: Element, step: DriveStep, options: { config: Config, state: State, driver: Driver }): void {
|
|
this.completed.push(element.id)
|
|
}
|
|
|
|
onDestroyStarted (): void {
|
|
console.log('store tour state')
|
|
console.log(this.completed)
|
|
this.driverObject.destroy()
|
|
}
|
|
}
|