There’s been some great posts and examples of how Articulate Rise can serve learning designers to tell great stories. This Hero’s Journey adds a little magic to the core features. Enjoy!
Prototype only. Welcome to the future!
Download the SOURCE!
How does it work?
First of all, this is not a production value feature add-on. At this point this is just an exploration. Here’s what my objectives were in user stories:
- Personalization: user launches the adventure and immediately greeted with a popup. The popup informs the user about its purpose and prompts the user to enter a hero name. Once the user enters the hero name, it should be remembered throughout the experience to provide personalized messages.
- As the popup closes, the title of the course should reflect the hero’s name.
- This is a linear adventure (as is the Hero’s Journey), so stages should be advanced initially in a locked order. When user attempts to go ahead, a friendly reminder should popup (addressing the user by name) to inform about the locked status and which stage should be completed before.
- User should be able to see a YouTube video, embedded, initially playing only the relevant part (from time, to time).
- User will be presented with options such as personality, expertise, or other choices. The system should remember these choices, even if the user leaves the page and returns later (without refreshing the browser).
- User will unlock the next stage by selecting a gift (advancement is not based on the actual completion of the stage at this point). A gift, again, is a one-time choice.
- User should see consequences of their actions to enforce meaningful choices. As simple as, using the name in headlines or referring to the selected personality style. Eventually, it could be an expertise level or something similar.
- User should be able to interact with an embedded Storyline module, where information is passed between the adventure and the module itself. For example, the user’s name should be displayed inside the Storyline module. Gaining information from inside the module should be an option as well (sending back points, unlocking content, etc).
- User should be able to interact with other embedded objects such as the DeminGO simulator at the end.
+ didn’t make it into this version but I have a working prototype on conditional text. User selects expertise (Novice, Beginner, Expert). Based on the selected role, only relevant information is displayed. Or, user can toggle between roles real-time, showing and hiding information. This can be also used for targeting roles like sales, marketing, support, etc.
After the user stories, here’s what I did:
Build the Core Content
I built the core content in Articulate Rise. The tool does a great job allowing you to author content quickly. (Although, I would love to be able to copy-paste elements between segments!)
Once the course framework was complete, I exported it as a web-only site.
Don’t Break the Framework
One way to manipulate the content itself is post-editing after it’s exported. That itself is a hassle because everything coded and minimized. The other problem with that approach is that if you modify the exported course, and you need to do an update in Rise, now you have two different versions.
Instead, I did a reckless “buit-on” approach. Now, that is why it’s not a production value, just a minimum viable product. I’m relying on how Rise is creating the html and css output.
Adding jQuery
First, I added jQuery to the export. The launch html file is the only thing I edited by adding a line to include jQuery.
 <script src="lib/main.bundle.js"></script> <script type="text/javascript" src="jquery-2.1.1.min.js"></script> <script type="text/javascript" src="zsolt.js"></script> <script src="dist/sweetalert.min.js"></script> <link rel="stylesheet" type="text/css" href="dist/sweetalert.css">
These lines are at the bottom of the launch page.
Once jQuery is loaded, it provides you access to the page to manipulate what the user sees REAL-TIME. That means, I can load the Rise adventure as is, but actually changing how it behaves after it’s displayed to the user. That allows me to add features without breaking the core.
The Messaging
The nice pop up messaging is not my creation. Credit goes Tristan Edwards. His sweet alert plugin is offered under MIT license, and you can download it from here.
This little powerful plugin allows me to throw messages to the user (including warning, error, info or even input). So, the first thing I did was adding a popup that asks the user’s name.
Two things happen here. jQuery has the ability to monitor the site, and when everything is loaded, execute some code. So, as the site is loaded, this message pops up.
In JavaScript, I created a variable to store the user’s name. Once the user enters, the name the popup disappears, and the name is stored in memory. That means, every time I throw up a message, I can display the name as well.
How does the name get into the course?
The bigger problem is how to change the course content. Now, we have a name but the course content is some static text you typed in before.
This is where jQuery comes in. I wanted to include the user’s name in the title.
This is where relying on how Rise creates the output comes in (which is the weak point of this approach because they can always change it).
As you see, the course title on the main landing page has the following CSS class. If you don’t know what CSS means, this might be foreign but the concept is that jQuery allows you to find things in the page, based on that CSS class, and THEN change it on the fly.
So, I added one line to find this text on the screen (original title is Connect) based on the “overview__title” clue, and replaced with the new name the user just entered. This way, I haven’t touched the original course, haven’t broken any of the content or code. I simply manipulated the text the user sees on the screen.
The only thing I modified post-export is the index.html file by adding the following:
<script type="text/javascript" src="jquery-2.1.1.min.js"></script> <script type="text/javascript" src="zsolt.js"></script> <script src="dist/sweetalert.min.js"></script>
The first file is the jQuery. The second is my collection JavaScript functions. Right now, it’s messy without any comment. Working on it. And the last one is the messaging plugin.
What about this?
There’s nothing more heart-warming that seeing your name in the middle of a sentence, like it had been actually created just for you.
In order to do this magic, you can’t rely on the CSS thing anymore because you need to know WHERE exactly you want this name to appear. My approach was using something like “shortcuts.” Imagine adding some shortcuts to the text itself that would be replaced when the page is displayed. It’s like when Word shows you the smiley face when you type “:).”
I went back to Rise and added something unique where I wanted the name to appear:
You can use anything, but it has to be something unique, so you won’t end up accidentally replacing something like “name” every time. My little shortcut is “_zomagix::pname_”
When the page loads for the user, jQuery runs through the text and replaces every instance of  _zomagix::pname_ with the actual name (remember, the name was stored in a JavaScript variable, so we can access it anytime.)
And that’s it. The user now sees their own name.
Selecting a Gift or a Choice
Next, I wanted to be able to offer three options for the users to choose from. Then, again, store what the choice was in a JavaScript variable, as well as assure that the user won’t be able to select another one. It’s a one-time thing.
First, I built the image carousel in Rise. Each item has an image, a description and author. The first two are not magical. However, I used the author to add the new feature. The author field shows “Select Gift” but what it is actually a link (as you can see from the underline). Rise allows you to add a link to the text. What I added was not a link to a website, but a link to a JavaScript function.
javascript:selectGift("world",1);
In my JavaScript, I created a function called selectGift. (A function is like a collection of commands that does some work for you.) This selectGift function is waiting for two things: a code word and the choice number. So, the first graphic has “world” as the code word, and the choice number 1. The second graphic sends “world” and 2. And the third is sending “world” and 3.
When you click on the SELECT GIFT, it calls this function and tells them to do the following:
- Store my choice of gift.
- Disable more clicking on the same gift options.
How does it do it? Well, let’s say you clicked on the second graphic. It sends “world” and 2 to the function. Function stores in memory that the “world” lesson, user chose option 2. Then, it finds all other “world” options and jQuery replaces the links real-time, kind of like disabling from being clicked on again.
Same function also makes sure that the next lesson/stage is unlocked. (Which by the way, again, is a feature I added. When the page loads, all stages are “locked”, Â except the first. If you try to go to the next, a message will remind you and takes you back to the first stage. Once a lesson is unlocked, it’s unlocked for ever.)
Jeff Kortenbosch
November 27, 2016 1:03 pmTotally awesome. These are some incredible hacks!
olahzsolt@hotmail.com
November 27, 2016 5:02 pmThanks, Jeff! All for the sake of learning.
Tracy Carroll
November 27, 2016 9:47 pmWow, this is great, Zsolt! I’ve been so busy for a couple of months that I haven’t been keeping up with the latest Articulate/eLearning developments. After looking at this it feels like I’ve been asleep for YEARS!
olahzsolt@hotmail.com
November 28, 2016 5:18 pmTracy, good morning and welcome back to the WORL&D! Thanks for the comment!
Alana McCall
January 10, 2017 3:04 pmGreat work! I am curious about one thing.. on the image carousel, you say each item has an image, description, and author.. however I only see a place to add a caption to images using the carousel and it’s actually under the progress circles instead of above like in your course. Could you elaborate on how you built that? I’m really wanting to see if I can use the image carousel as just another way of navigating in a course and present content, but can’t seem to get the carousel as flexible as I’m hoping for 🙂
olahzsolt@hotmail.com
January 15, 2017 10:33 pmHi Alana,
Thanks for commenting! What happened to this example is that my trial account expired and I can’t see the the source anymore. I’ll have to check on a new, fresh version.
Zsolt
Janil Samson
January 20, 2017 5:26 amHi. Great work. How did you get the embed object to function within the rise site?
Ian Martin
September 21, 2017 6:05 pmI know this is a year late – but I’ve only seen this now and wanted to respond. Thank you for sharing. Easily the best example of some of the possibilities within RISE – with add-ons – JavaScript. Lovely to keep pushing the boundaries – not for technology’s sake but for learner engagement. Found this inspiring.
David Charney
September 17, 2018 1:45 pmNice work on this!
Chip
September 18, 2018 3:38 pmWow, this is top level stuff, i never knew it would even be possible. You really are a hero. I’m going to test it out and come back to comment again. Thanks for the enlightenment.
Cheryl Tyler
October 14, 2018 10:46 pmI’ve just come across this and love how you have done it. Our company is new to Rise but I’m keen to see how far I can push it. Thanks for the information. I did wonder how you managed to have lesson 2 not showing in the TOC once you begin. If you are still answering comments I would be interested to know. Thanks cheryl.
Sumit
August 12, 2020 10:39 amHi Zsolt,
This is a terrific solution! Thank you so much 🙂
I am looking to just change the copyright year for the course. And I could achieve that using the “$(this).html($(this).html().replace(code,replace));” code.
But this is not working for each lesson. If the learner clicks another lesson, the code doesn’t work. How did you ensure that your code applies to the entire course?
Much appreciated
Sumit