Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
SCORM 2004 / 1.2 Content API. Managed code, unit tests.
JavaScript ActionScript HTML

Requirements of past customers stopped SetValue or LMSSetValue calls …

…while in 'review' mode. The Specification however states that it is outside the scope of SCORM to force a LMS to either ignore or allow these calls when in other modes. Its also interesting though that while in these modes they require the LMS to set the 'cmi.credit' to 'no-credit'. Either way, I think this was a missed opportunity to streamline functionality. Removing the 'normal' mode requirement within SCOBotBase.js to allow set value calls.
latest commit ce97b98f40
@cybercussion authored
Failed to load latest commit information.
QUnit-Tests
common Re-organizing directory structure to resemble more of what you'd have…
extend Re-organizing directory structure to resemble more of what you'd have…
flash/as3/com/cybercussion Adding AS3 Class for communicating with SCOBot.
unique Re-organizing directory structure to resemble more of what you'd have…
vocab Re-organizing directory structure to resemble more of what you'd have…
.travis.yml Update .travis.yml
Gruntfile.js
README.md
XMLSchema.dtd Re-organizing directory structure to resemble more of what you'd have…
adlcp_v1p3.xsd Whoops missed a couple.
adlnav_v1p3.xsd Whoops missed a couple.
adlseq_v1p3.xsd Re-organizing directory structure to resemble more of what you'd have…
bdlcp_rootv1p2.xsd Re-organizing directory structure to resemble more of what you'd have…
cert_imsmanifest.xml
datatypes.dtd Re-organizing directory structure to resemble more of what you'd have…
imscp_v1p1.xsd
imsmanifest.xml Removed requirement of jQuery. Moved needed logic to SCOBotUtil.js. T…
imsss_v1p0.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0auxresource.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0control.xsd
imsss_v1p0delivery.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0limit.xsd
imsss_v1p0objective.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0random.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0rollup.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0seqrule.xsd Re-organizing directory structure to resemble more of what you'd have…
imsss_v1p0util.xsd
lock_nav_imsmanifest.xml
lom.xsd Re-organizing directory structure to resemble more of what you'd have…
lomCustom.xsd Re-organizing directory structure to resemble more of what you'd have…
lomLoose.xsd Re-organizing directory structure to resemble more of what you'd have…
lomStrict.xsd Re-organizing directory structure to resemble more of what you'd have…
package.json Version, Licence updates
xml.xsd Re-organizing directory structure to resemble more of what you'd have…

README.md

Build Status

About

SCOBot includes the SCORM 2004 Content Interface with capabilities to rollback to SCORM 1.2. This interacts with the LMS Runtime API. It also includes QUnit tests, SCORM 2004 XSD/DTDs, Flash AS3 Class libraries to interface the JavaScript portions of the project. SCORM enables communication, packaging and sequencing possibilities when deploying e-learning content across different Learning Management Systems. SCORM requires all communication occur with JavaScript. So if you are building an application in another programming language, you'll need to consider other options to communicate with the LMS. Along with the SCOBot content APIs it includes a light offline or non-LMS mimc of the LMS Runtime. This enables you to see tracing of the LMS communication if it was present. This may save you time debugging issues. Simply put, this includes all the logic SCORM didn't bake into the communication API, so your not wasting time writing more code.

What does this solve?

Many examples online are somewhat limited. This project made a effort to better support Objectives, and Interaction capabilities with friendly easy to use APIs. Much of the timestamps, durations, and SCORM formatted responses needed a single point of management vs. having it scattered throughout a project. The specifications range in the hundreds of not thousands of pages of reading, parsing and interpreting which also leads to months of lost development. Differing opinions commonly occur after reading the specifications (either 1.2 or 2004). How you treat the data your trying to store, and whether or not it 'fits' within the SCORM spec. This project makes a attempt to lay out options and document the quirks more thoroughly.

SCOBot Content support:

https://github.com/cybercussion/SCOBot/wiki - Please refer to this for much more detailed information.

Feel free to email or post any issues you run into.

Whats the difference between a Runtime API and this project?

You may be looking for the LMS Runtime called 'API_1484_11', and this Project does not offer or include that. The light mimic that is included IS NOT a runtime. It is just the bare essentials to let this run on itself in a offline capability. The low-latency Runtime is available on https://cybercussion.com (Free for students) but licenced commercially. The Runtime was developed in tandem with the SCOBot Content API project. It includes all the rule sets associated with the SCORM Communication which is responsible for controlling read/write access, character limits, states, and status settings.

Goals:

  • Save you time trying to support the SCORM Standard. Yes, its Initialize, Get Value, Set Value, Commit, and Terminate on the surface, but it goes way beyond that.
  • Educate - Documentation, examples, concepts, options
  • Modernize - No one likes 500 global variable constants coupled with endless other issues associated with un-managed code.
  • Transparency - Know why something isn't working, and have logging to back it up.
  • Test - Drove the whole project with unit tests against the specification. Scenarios, make having a complete test impossible. Which is why there is always room for writing more tests.

Now no longer requires jQuery in v4.x.x.?

Not everyone is using jQuery, and we needed to be sensitive to that. Turns out this project was only using about 9KB (actual) of jQuery. (Migration covered on Wiki) So if your using another framework, library or otherwise, this limitation was removed.

About the Project:

I've kept this project split up into 4 logical portions, leaving room for anyone to add or subtract from the complete package. The main focal point would be 'QUnit-Tests/js/scorm/', as the surrounding files are simply supporting files like JQuery, QUnit, and further README files. I've also added all the files that go into a Content Aggregation Model. This is a package used to export your content to a learning management server. The portions of this project is split into the following sections:

Utilities

  • QUnit-Tests/js/scorm/SCOBotUtil.js (Required in a deployment)- Utility functions replacing lost functionality used by jQuery in 3.x.x and prior. Includes an event system for JavaScript. Wiki covers the audit. Now removed '$' so if you are using jQuery, you don't have to worry about conflicts. Minified this was a hit for 3.8KB vs 95KB of jQuery.

Base Functionality

  • QUnit-Tests/js/scorm/SCOBotBase.js (Required in a deployment)- This is now expanded to backwards support SCORM 1.2 with some warnings and limitations. Will connect to API or API_1484_11 supported by a LMS that hosts SCORM content. This is the core LMS API lookup, and switchboard used to talk to the Runtime API on the LMS.

Full Automation

  • QUnit-Tests/js/scorm/SCOBot.js (Optional in a deployment)- This is the automatic sequenced out SCORM calls commonly used. Supports and boils down some of the more complicated parts of the standard by supporting time stamps (UTC/GMT), duration/latency, formatting interaction info, objectives and rolled up scoring if you choose. You must inform SCOBot how many interactions you have in order for it to caclulate score. Otherwise, you need to write your own score management internal to your SCO. Also supports timed (max time allowed) instances.

Standalone, Local or Offline failover

  • QUnit-Tests/js/scorm/SCOBot_API_1484_11.js (Optional in a deployment)- This is the LMS mimic capability for local testing (non-LMS). May save you some round trips testing out SCORM Calls, or may even allow you to support taking your content offline or running in a non-LMS fashion.

  • Also have now added a minified, or packed version of all 4 of these files in a 39KB easy to use single file for those not doing there own builds. See the scorm.bot.pack.js which is only the 4 above files merged, minified and packed.

QUnit Launchables:

For more on Qunits visit - https://qunitjs.com. If your testing a LMS, feel free to edit the imsmanifest.xml to fit your needs. Change the tests to match your launch parameters or launch data. These tests are not meant to remain static. Make it fit your needs.

  • qunit_SCOBotBase.html - This will run a series of 90+ tests against SCORM which include some local debug, gets and sets as well as classic Initialize, GetValue, SetValue, Commit and Terminate. Even some illegal calls. This whole package is great to run on a LMS to view if the LMS is compliant with SCORM. The test for this is found at 'js/test/scobotbase.js'.

  • qunit_SCOBot_dev_full.html - This will run through a series of 230+ tests rolled up common functionality that pelts the SCOBotBase with all the calls, stressing out the Interactions, Objectives, Suspend Data functionality. This will continue to grow, as I expand the tests to include proper and improper data formats.

  • qunit_SCOBot_prod_full.html - This is the same as the one above, but using the minified/packed JavaScript (single file) scorm.bot.pack.js @~39KB. Ensures the build process works and puts the code in a state for deployment. Optionally, you may want to blend this code in with all your base player code instead and make it part of a whole build.

So why do some tests fail?

Some are cosmetic (date differences between browsers), launch data or values that were written for something used vs. where it is now deployed or packaged. Comment out any tests you aren't using, modify the data its comparing to get your test(s) passing.

Further Reading:

See the Wiki link on github for more detailed info. I based much the work on the fact that it's been many many years since SCORM 2004, and JavaScript has come quite a ways since those days. Getting this into JSLint, QUnit and some more structured code made good solid sense. Since this is on peoples radar in such a broad audience its extremely difficult to speak in API terms to someone that wants to just record some information, and has no idea where in the spec to put it. I understand when building e-learning content you are often faced with teams of people that don't fully grasp or aren't working in the realm of SCORM. Terms won't always line up, and the sequence doesn't always match up. You may run out of space within a few areas due to character limits. These things cause architectual directional changes and can create problems when your close to deploying. So I'd highly recommend getting more reading online in if you're new to this. Diagram (from Brandon Bradley) - http://www.xmind.net/share/brandonbradley/xmind-421310/

What else do you need?

HTML, Flash, Unity... you name it. Presenting your training may require you to construct your own player. This can mean loading, templatizing, blending views and data. Building out interactions, layouts etc ... You could be doing this by hand or using a CMS.
Packaging and or Zipping - You may find once you have SCOBot, plus your presentation you need to now bundle it. The files in this project were meant to assist you here getting a full scope of what needs to be done to make that successful. See the Wiki for more info on zipping/packaging options.

I also recommend trying out a bookmarklet I made to check the status of a content object running on your LMS. SCOverseer - see the Bookmarklet button on that page (drag it to your bookmarks bar). Directions on page.

Thanks for taking the time to take a look, and thanks to everyone that's assisted with feedback.

Something went wrong with that request. Please try again.