Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Captivate SCORM 2004 Output, reduced var statements, moved function declarations
// set document.domain property here, if it works for your environment/SCORM implementation
// document.domain="";
var g_intAPIType = 0,
strURLFile = "sample.swf", // Name of the flash file
intIntervalSecs = 1, // Number of seconds to wait for SCORM API to load
g_intAPIOrder = 0, // Way to search for API object (0 - starts with bottom up; 1 - starts top down)
strURLBase = "",
strURLParams = "",
strURLFull = document.location + "",
intTemp = strURLFull.indexOf("#"),
strTemp = location.protocol.toUpperCase(),
timeCurrent_int = new Date().getTime(),
timeLimit_int = new Date().getTime() + (intIntervalSecs * 1000),
g_bIsInternetExplorer;
if(g_intAPIType==0){
// Detect Internet Explorer
g_bIsInternetExplorer = navigator.appName.indexOf("Microsoft") != -1;
}
function Finish(){
if((isAPI()) && (g_bFinishDone == false)){
(g_zAPIVersion=="0.2"?g_objAPI.LMSCommit(""):g_objAPI.Commit(""));
g_bFinishDone = (g_zAPIVersion=="0.2"?g_objAPI.LMSFinish("") == "true":g_objAPI.Terminate("") == "true");
}
return (g_bFinishDone + ""); // Force type to string
}
// Handle fscommand messages from a Flash movie
function Captivate_DoFSCommand(command, args){
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate,
strFSArgs = new String(args),
strFSCmd = new String(command),
strErr = "true",
strFSArg1,
strFSArg2,
strFSArg3,
intFSDelimiter = strFSArgs.indexOf("|"),
strFSTemp;
if(intFSDelimiter > -1){
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API
strFSTemp = strFSArgs.substr(intFSDelimiter + 1);
intFSDelimiter = strFSTemp.indexOf("|");
if(intFSDelimiter > -1){
strFSArg2 = strFSTemp.substr(0, intFSDelimiter); // Value
strFSArg3 = strFSTemp.substr(intFSDelimiter + 1); // Variable
} else {
strFSArg2 = strFSTemp;
}
} else {
strFSArg1 = strFSArgs;
}
// do nothing, if SCORM API is not available
if(!isAPI()){ return; }
if(strFSCmd == "LMSInitialize" || strFSCmd=="Initialize"){
CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");'));
} else if(strFSCmd == "LMSSetValue" || strFSCmd=="SetValue"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");');
strErr = g_bFinishDone;
CaptivateObj.SetVariable(strFSArg3, g_bFinishDone);
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else if((strFSArg2) && (strFSArg2.length > 0)){
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){
strErr = eval('g_objAPI.' + strFSCmd + '();');
CaptivateObj.SetVariable(strFSArg3, strErr);
} else {
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");');
CaptivateObj.SetVariable(strFSArg3, strErr);
}
} else if(strFSCmd.substring(0,3) == "LMSGet"){
strErr = "-2: No Flash variable specified";
}
return strErr;
}
function Captivate_DoExternalInterface(command, parameter, value, variable){
var CaptivateObj = g_bIsInternetExplorer ? Captivate : document.Captivate,
strFSCmd = new String(command),
strErr = "true",
strFSArg1 = parameter,
strFSArg2 = value,
strFSArg3 = variable,
courseStatus;
//alert("command " + command + " ;parameter " +parameter+ " ;value " + value + " ;variable " + variable);
//var strFSArgs = new String(args);
/*var intFSDelimiter = strFSArgs.indexOf("|");
if(intFSDelimiter > -1)
{
strFSArg1 = strFSArgs.substr(0, intFSDelimiter); // Name of data element to get from API
var strFSTemp = strFSArgs.substr(intFSDelimiter + 1);
intFSDelimiter = strFSTemp.indexOf("|");
if(intFSDelimiter > -1)
{
strFSArg2 = strFSTemp.substr(0, intFSDelimiter); // Value
strFSArg3 = strFSTemp.substr(intFSDelimiter + 1); // Variable
} else {
strFSArg2 = strFSTemp;
}
} else {
strFSArg1 = strFSArgs;
}*/
// do nothing, if SCORM API is not available
if(!isAPI()){ return; }
if(strFSCmd == "LMSInitialize" || strFSCmd=="Initialize"){
//CaptivateObj.SetVariable(strFSArg3, eval('g_objAPI.' + strFSCmd + '(\"\");'));
CaptivateObj.SetScormVariable(strFSArg3,eval('g_objAPI.' + strFSCmd + '(\"\");'));
courseStatus = eval('g_objAPI.' + 'GetValue' + '(\"' + "cmi.completion_status" + '\");');
if(courseStatus == 'not attempted'){
eval('g_objAPI.' + 'SetValue' + '(\"' + "cmi.completion_status" + '\",\"' + 'incomplete' + '\");');
}
} else if(strFSCmd == "LMSSetValue" || strFSCmd == "SetValue"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\",\"' + strFSArg2 + '\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else if(strFSCmd == "LMSFinish" || strFSCmd=="Terminate"){
g_bFinishDone = eval('g_objAPI.' + strFSCmd + '(\"\");');
strErr = g_bFinishDone;
//CaptivateObj.SetVariable(strFSArg3, g_bFinishDone);
CaptivateObj.SetScormVariable(strFSArg3, g_bFinishDone);
} else if(strFSCmd == "LMSCommit" || strFSCmd=="Commit"){
strErr = eval('g_objAPI.' + strFSCmd + '(\"\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else if((strFSArg2) && (strFSArg2.length > 0)){
if(strFSCmd=="LMSGetLastError" || strFSCmd=="GetLastError"){
strErr = eval('g_objAPI.' + strFSCmd + '();');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
} else {
strErr = eval('g_objAPI.' + strFSCmd + '(\"' + strFSArg1 + '\");');
//CaptivateObj.SetVariable(strFSArg3, strErr);
CaptivateObj.SetScormVariable(strFSArg3, strErr);
}
} else if(strFSCmd.substring(0,3) == "LMSGet"){
strErr = "-2: No Flash variable specified";
}
return strErr;
}
// Hook for Internet Explorer
if((navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) || g_intAPIType == -1){
g_intAPIType = 0;
document.write('<script language=\"VBScript\"\>\n');
document.write('On Error Resume Next\n');
document.write('Sub Captivate_FSCommand(ByVal command, ByVal args)\n');
document.write('Call Captivate_DoFSCommand(command, args)\n');
document.write('End Sub\n');
document.write('</script\>\n');
document.write('<script language=\"VBScript\"\>\n');
document.write('On Error Resume Next\n');
document.write('Sub Captivate_DoExternalInterface(ByVal command, ByVal parameter, ByVal value, ByVal variable)\n');
document.write('Call Captivate_DoExternalInterface(command, parameter, value, variable)\n');
document.write('End Sub\n');
document.write('</script\>\n');
} else {
g_intAPIType = 0;
}
if(intTemp == -1){
intTemp = strURLFull.indexOf("?");
}
if(intTemp > 0){
strURLParams = strURLFull.substring(intTemp + 1, strURLFull.length);
}
if(strTemp.indexOf("FILE") == -1){
intTemp = location.pathname.lastIndexOf("/");
} else {
intTemp = location.pathname.lastIndexOf("\\");
}
if(intTemp != -1){
strURLBase = location.protocol + "//" + location.host + location.pathname.substring(0, intTemp + 1);
} else {
strURLBase = location.protocol + "//" + location.host + location.pathname;
}
strURLParams = (strURLParams==unescape(strURLParams)?escape(strURLParams):strURLParams);
strURLParams = (strURLParams==""?"":"?") + strURLParams;
// This simply loops for a set period of time, waiting for the API to
// load and/or be found. A better solution would be to use setInterval
// and on the timeout, redirect or load the resulting Captivate file.
while((g_objAPI == null) && timeCurrent_int < timeLimit_int){
g_objAPI = getAPI(g_intAPIOrder);
timeCurrent_int = new Date().getTime();
}
if(g_objAPI != null){
strURLParams = "?SCORM_API=" + g_zAPIVersion + "&SCORM_TYPE=" + g_intAPIType;
}
window.onload = function (){
var so = new SWFObject(strURLFile + strURLParams, "Captivate", "641", "512", "10", "#CCCCCC");
so.addParam("name", "Captivate");
so.addParam("bgcolor","#f5f4f1");
so.addParam("menu", "false");
so.write("CaptivateContent");
document.getElementById('Captivate').focus();
document.Captivate.focus();
};
window.onunload = Finish;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.