Extension:GuidedTour/Refactoring brainstorming/Use case: Article Creation Help

The experimental ArticleCreationHelp extension shows guiders over red links. The guiders' descriptions contain the title of the article pointed to by the red link, so they change for each red link they appear over. Also, they sometimes contain a link to a page for creating that article.

Some conisderations:

Not all properties available on tourSpecs should be modifiable.

GuidedTour should hear back about any changes made to a tour, and should take care of things like caching.

While dynamic modification of tours seems to go against the grain of the declarative approach taken here, it would allow reuse of code and styles for cases where some tour elements are best set dynamically.

Option 1: TourController
Here's a draft implementation.

Some issues:


 * Maybe instead of  it should be , with   holding the properties to change.
 * With regard to changing a guider while it's displayed: it's nice to be able to animate, but the new version of the guider should probably be a distinct step, rather than a new version of an existing step.

Option 1a: TourController with properties, and animateFromPrev in step definition
Here's a variation on the previous option:

It seems there may be times when you'll want to change a guider while it's displayed. ("To click the save button, scroll down," "Keep scrolling," "Now click here.") That is the possible use case for modifying steps while they're displayed.

Another case is: when you have consecutive guiders/steps that point to the same thing, and you want to animate the transition from one guider to the next. For that situation, steps could have an  property.

Here are draft implementations for this TourController API and the animateFromPrev property.

Option 2: Tour start-up callbacks
Suggested here: "Allow tours to run setup code every time the tour is re-started (passing some setup callback to defineTour)?"

Option 3: Methods directly on GT
Similar to Option 1. Something like this (?):

Option 4: Allow functions instead of strings
Suggested here. For example, the library could call a function for creating description html each time a tour is launched, and replace DOM elements if the value returned has changed since the previous launch.