thechiselgroup / biomixer

BioMixer
http://bio-mixer.appspot.com/
16 stars 13 forks source link

Tour of BioMixer #495

Closed everbeek closed 9 years ago

everbeek commented 9 years ago

Is there a web app oriented thing similar to Tours that we could use to guide new users?

everbeek commented 9 years ago

I asked Laura, and she directed me to this: http://tourmyapp.com/

I will look at it, and search for alternatives now that I have this lead.

I expect everything I find to be via sequential popups rather than more fully featured like Tours. We'll see.

This company offers some keywords for finding interactive onboarding tools: http://blog.kera.io/post/42951938895/top-walkme-alternatives-compared-and-visualised . Their onboarding product appears to be gone, and I came across two other web tombstones in this field.

This Quora answer has many links: http://www.quora.com/What-are-the-alternatives-to-WalkMe

everbeek commented 9 years ago

of the ones below, Hopscotch then Joyride are the most polished of the freely available onboarding libraries. Features they probably lack include spotlighting and action following (click a button, triggers the next step of the tour). I will have to look deeper into each to see if they support these two vital features, or if I could easily tack those on.


A variety to look at. Focus on the Github ones, check all for free-ness: http://www.quora.com/What-are-the-alternatives-to-WalkMe

cpetrachenko commented 9 years ago

Great ideas and I'm excited to do something like this. But do tools like these affect the performance of the application being described? (I may misunderstand how these tools connect to the application being described, if at all.)

everbeek commented 9 years ago

I don't think they would affect performance. They would only be activated on first visit or via some "Show Me!" button that I would add. Nothing in the existing functionality would trigger any of a tour library's code, only vice versa and only during a tour. It would increase the download size, but that's unlikely to be a problem for quite some time.

everbeek commented 9 years ago

Some thoughts:

Joyride includes a single method call that is called after each step, and a single method after the final step. Looking at github, it also has pre- and post- methods. I could probably also use this to update or inject ids into the driving data structure, if the ids are not in existence prior to taking certain tour steps. Not a big deal at all. Joyride also keeps its data separate from the document, in a way, so it can be inspected for ids that will be used.

Intro.js uses a roughly identical data structure. It has an onChange(nextElement) method, onStart(), and onExit(). It also has onbeforechange(nextStepElement) and onafterchange(nextStepElement), which I presume will receive the "previous" element when moving backwards. Form that I can ifner undo and redo. Like Joyride, it does not have functions allowed instead of constants for string values, but has the progress meter and back forward buttons.

Hopsotch has an even more diverse set of events I can bind to, but covers the same base ground (pre, post, etc). The nextOnTargetClick is really nice; it allows the user to progress the tour by clicking the item of interest, but this is a mixed blessing if all other elements are not prevented from being clicked...and Hopscotch does not appear to have spotlighting. It does support helpers...a way of dealing with an inability to include function definitions in JSON (as opposed to JS structures which otherwise are quite similar to JSON). If this is a problem with using the other ones, look to Hopscotch. Handles multi-page, but I don't need that I don't think.

Conclusion: Intro.js looks preferable because of progress meters, back and forward buttons, and spotlighting. It doesn't have scroll easing...but I don't need that! Joyride has the "expose" and "modal" parameters that create spotlight effects. Hopscotch has the target clicking option...

everbeek commented 9 years ago

For the tour, if I don't think I can do it using whatever graph the user has loaded, I can set it up to be a link to a stand alone window, which is passed an argument that starts the tour right away.

Found more...I will assess them quickly now that I have three baseline libraries to compare to: https://news.layervault.com/stories/15273-a-list-of-product-tour-plugins-for-onboarding

Ok, this one is nice but I'm not convinced it is superior to baseline: http://ryanfunduk.com/jquery-tourbus/

Chardin.js has wonderful contemporary design: http://heelhook.github.io/chardin.js/ and spotlighting. But it may not have steps.

Tourist.js is explicitly meant for complicated apps where actions need to be taken on the udnerlying page...interesting... http://easelinc.github.io/tourist/ It requires a CSS dependency, as well as Backbone. I don't feel like adding those unless I deem Tourist's features fully necessary.

Shepard.js allows interaction when things are dimmed. That would be ok for our case, or even desirable. http://github.hubspot.com/shepherd/docs/welcome/, but it also has an additional dependency called Tether, but is included.

It looks like I am still deciding among Hopscotch, Intro.js and Joyride, with my preference on the latter two except for the target clicking in Hopscotch. I can probably easily fake the Hopscotch "nextOnTargetClick" in the other two. Of more interest is modal and spotlighting capabilities.

everbeek commented 9 years ago

Ok, pulling the trigger on intro.js. If I have problems with it, Joyride and Hopscotch are both options too.

everbeek commented 9 years ago

I set up a tour with intro.js, but it allows popups to be positioned such that they go off screen. That's not ok, and there is a long outstanding issue for it. I will set things up with Joyride next, and probably Hopscotch. If it seems like the right decision, I will devise a fix for Intro.js and probably submit a pull request.

Oy, it's already a problem for me that Joyride expects an id for the element to be focused on...perhaps I will skip to Hopscotch right away.

everbeek commented 9 years ago

Intro.js doesn't allow use of highlighted elements, which means the users cannot perform the actions I want them to. I haven't completely abandoned it, since this might be easier to modify than Hopscotch...

Hopscotch does let me have users actually use page elements, but it doesn't offer shading, or modal dialogs, or non-anchored ones (where there is no target for it to point to). It also allows dialogs to fall off screen.

I just fixed a positioning problem in intro.js, and tried to fix the inability to interact with spotlighted elements. I cannot fix the latter, it seems, so I will prevent the shading and spotlighting from occurring. I would try a bit longer, but the spotlighting effect works poorly with SVG (such as the node menus), because of z-order problems. It seems to place the spotlight box below the element of interest, but the library is not coded to be SVG aware.

If I can disable shadowing and spotlighting easily, I am yet another step forward.

everbeek commented 9 years ago

I have disabled spotlighting and shading because of the SVG incompatibility. I now have null exception spawning from the same overall problem. When introjs tries to remove the previous element that was focused on (.introjs-showElement), it finds null when that was an SVG element.

If it were not a library I would move to using D3 selectors to get at the SVG.

http://stackoverflow.com/questions/8638621/jquery-svg-why-cant-i-addclass

One alternative is accessing classList rather than className, but IE doesn't support that. I will look at the Mozilla classList shim there, as well as Motto's library for accessing SVG classes from JQuery. I can then either use the shim and change className to classList where appropriate, or change all the className attribute accesses to JQuery. It's too bad that IntroJs does not use JQuery. The shim is preferable because then I don't need to taint our copy of IntroJs with JQuery, just change the JS approach it uses.

everbeek commented 9 years ago

Introjs steps behave well know, until I need the menu opened up. Then the tooltip causes the page to expand wider, and it gets placed off to the right of the menu item of interest, even pointing in the wrong direction. It is as though it is being added with incorrect display properties or to the wrong parent element, but it is likely something else.

everbeek commented 9 years ago

getBoundingClientRect() is giving me decent values for most elements, except those that are nested in my menu.

everbeek commented 9 years ago

Have it all working now. Committing, Then getting on to fixing a bug wherein I cannot drag nodes (#501). I think it preceded this work.

After fixing that, adding id checks at construction time and testing in an embed environment.

everbeek commented 9 years ago

Add:

everbeek commented 9 years ago

I am considering re-implementing the Intro.Js highlight mechanism (which I disabled with CSS). If I make it into four lines, rather than a box proper, then we can click through it freely in any browser.

This is kind of insane...and I kind of like it: http://www.walterzorn.de/en/jsgraphics/jsgraphics_e.htm . This is a library allowing geometric drawing in pure javascript (no SVG, no Canvas, no Flash). It uses good algorithms, and implements the shapes as collections of divs (insane!). I was just considering the use of four divs to produce the box outline, but I might use this instead, if the library looks easy to use and isn't too large. It would offer more flexibility (such as tightly outlining objects to be highlighted, even if they are not best outlined in a rectangle). It's 23K...so I will make my own rectangles and if we need flexibility, this note will be around to point towards this library later.

everbeek commented 9 years ago

I have an outline that works with html and SVG. It can be improved visually later via CSS, but works well as it is. It cannot be given a background, because that would lead us back to the same problem that I was trying to resolve.

Also got myself stuck when I changed a function to a lambda function and failed to change a single call instance...couldn't figure out why the menu system was broken. Sorted it out though.

everbeek commented 9 years ago

Looks great in embed. Closing case for now, but tweaks will surely follow later.