150 lines
4.0 KiB
TypeScript
150 lines
4.0 KiB
TypeScript
import {fromStorage, StorageKey} from "../storage/common.js";
|
|
import {TourId, type TourData} from "./types.js";
|
|
import {openOptionsPageFromBackground, renderInContainer} from "./utilities.js";
|
|
|
|
function renderSteps(): ReturnType<TourData["steps"]> {
|
|
const step01 = renderInContainer(
|
|
<>
|
|
<h1>Thank you for installing Tildes Shepherd!</h1>
|
|
|
|
<p>
|
|
Tildes Shepherd is a set of interactive guided tours for Tildes to show
|
|
you around and introduce you to the concepts that make this website
|
|
great.
|
|
</p>
|
|
|
|
<p>
|
|
To see and start the tours that are available, click on the extension
|
|
icon to go to the options page or{" "}
|
|
<a href="#" onClick={openOptionsPageFromBackground}>
|
|
click here now
|
|
</a>
|
|
.
|
|
</p>
|
|
|
|
<p>
|
|
Each tour will start with a pop-up like this one and have "Continue",
|
|
"Back" and "Exit" buttons at the bottom. They will progress the tour
|
|
forward, backward or exit it.
|
|
</p>
|
|
</>,
|
|
);
|
|
|
|
const step02 = renderInContainer(
|
|
<>
|
|
<h1>Tour Mechanics</h1>
|
|
|
|
<p>
|
|
During the tours at various points we will want to highlight specific
|
|
areas. When that happens you won't be able to click anything inside
|
|
them, mainly to prevent you from accidentally going to a different page
|
|
and interrupting the tour. But also to prevent you from taking actions
|
|
you maybe don't want to take, like voting on something you don't
|
|
necessarily want to vote on.
|
|
</p>
|
|
|
|
<p>
|
|
Depending on your selected theme, the highlighted areas will have a
|
|
yellow or orange border and some extra added whitespace. As you can see
|
|
in this example where the main site header has been highlighted.
|
|
</p>
|
|
</>,
|
|
);
|
|
|
|
const step03 = renderInContainer(
|
|
<>
|
|
<p>
|
|
If you find any bugs, have feature requests or simply want to ask a
|
|
question. Please send us a message at{" "}
|
|
<a target="_blank" href="https://tildes.net/user/Community/new_message">
|
|
@Community
|
|
</a>
|
|
.
|
|
</p>
|
|
|
|
<p>
|
|
Also, big shoutout to the people at{" "}
|
|
<a target="_blank" href="https://shipshape.io">
|
|
Ship Shape
|
|
</a>{" "}
|
|
for making{" "}
|
|
<a target="_blank" href="https://shepherdjs.dev">
|
|
Shepherd.js
|
|
</a>
|
|
, the software library making this entire project so much easier to
|
|
create. And the namesake of it, too.
|
|
</p>
|
|
|
|
<p>
|
|
Once you click the "I understand" button below, this tour won't pop up
|
|
again, so remember the extension icon is how you get to the tours.
|
|
</p>
|
|
|
|
<p>Happy Tildying!~</p>
|
|
</>,
|
|
);
|
|
|
|
return [
|
|
{
|
|
canClickTarget: false,
|
|
id: "introduction-01",
|
|
text: step01,
|
|
},
|
|
{
|
|
attachTo: {
|
|
element: "#site-header",
|
|
on: "bottom",
|
|
},
|
|
canClickTarget: false,
|
|
id: "introduction-02",
|
|
text: step02,
|
|
},
|
|
{
|
|
buttons: [
|
|
{
|
|
classes: "btn",
|
|
text: "I understand",
|
|
async action() {
|
|
const introductionUnderstood = await fromStorage(
|
|
StorageKey.IntroductionUnderstood,
|
|
);
|
|
introductionUnderstood.value = true;
|
|
await introductionUnderstood.save();
|
|
this.complete();
|
|
},
|
|
},
|
|
{
|
|
classes: "btn",
|
|
text: "Back",
|
|
action() {
|
|
this.back();
|
|
},
|
|
},
|
|
],
|
|
canClickTarget: false,
|
|
id: "introduction-03",
|
|
text: step03,
|
|
},
|
|
];
|
|
}
|
|
|
|
const steps: TourData["steps"] = renderSteps;
|
|
|
|
const eventHandlers: TourData["eventHandlers"] = [];
|
|
|
|
const requirements: TourData["requirements"] = {
|
|
mustBeLoggedIn: false,
|
|
path: "/",
|
|
};
|
|
|
|
export const introductionTour: TourData = {
|
|
id: TourId.Introduction,
|
|
title: "Tildes Shepherd Introduction",
|
|
description:
|
|
"A short introduction to Tildes Shepherd and how the tours work.",
|
|
displayInOptionsPage: true,
|
|
eventHandlers,
|
|
requirements,
|
|
steps,
|
|
};
|