diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..adbc3b6
Binary files /dev/null and b/.DS_Store differ
diff --git a/adlcp_rootv1p2.xsd b/adlcp_rootv1p2.xsd
new file mode 100755
index 0000000..f33b38d
--- /dev/null
+++ b/adlcp_rootv1p2.xsd
@@ -0,0 +1,110 @@
+
+
+
+
+
your name here...
+ + + + + + diff --git a/js/.DS_Store b/js/.DS_Store new file mode 100644 index 0000000..8f1abc3 Binary files /dev/null and b/js/.DS_Store differ diff --git a/js/scormfunctions.js b/js/scormfunctions.js new file mode 100755 index 0000000..aa38be9 --- /dev/null +++ b/js/scormfunctions.js @@ -0,0 +1,205 @@ +/* +Source code created by Rustici Software, LLC is licensed under a +Creative Commons Attribution 3.0 United States License +(http://creativecommons.org/licenses/by/3.0/us/) + +Want to make SCORM easy? See our solutions at http://www.scorm.com. + +This example provides for the bare minimum SCORM run-time calls. +It will demonstrate using the API discovery algorithm to find the +SCORM API and then calling Initialize and Terminate when the page +loads and unloads respectively. This example also demonstrates +some basic SCORM error handling. +*/ + + +//Include the standard ADL-supplied API discovery algorithm + + +/////////////////////////////////////////// +//Begin ADL-provided API discovery algorithm +/////////////////////////////////////////// +var findAPITries = 0; + +function findAPI(win) +{ + // Check to see if the window (win) contains the API + // if the window (win) does not contain the API and + // the window (win) has a parent window and the parent window + // is not the same as the window (win) + while ( (win.API == null) && + (win.parent != null) && + (win.parent != win) ) + { + // increment the number of findAPITries + findAPITries++; + + // Note: 7 is an arbitrary number, but should be more than sufficient + if (findAPITries > 7) + { + alert("Error finding API -- too deeply nested."); + return null; + } + + // set the variable that represents the window being + // being searched to be the parent of the current window + // then search for the API again + win = win.parent; + } + return win.API; +} + +function getAPI() +{ + // start by looking for the API in the current window + var theAPI = findAPI(window); + + // if the API is null (could not be found in the current window) + // and the current window has an opener window + if ( (theAPI == null) && + (window.opener != null) && + (typeof(window.opener) != "undefined") ) + { + // try to find the API in the current window�s opener + theAPI = findAPI(window.opener); + } + // if the API has not been found + if (theAPI == null) + { + // Alert the user that the API Adapter could not be found + alert("Unable to find an API adapter"); + } + return theAPI; +} + + +/////////////////////////////////////////// +//End ADL-provided API discovery algorithm +/////////////////////////////////////////// + + +//Create function handlers for the loading and unloading of the page + + +//Constants +var SCORM_TRUE = "true"; +var SCORM_FALSE = "false"; +var SCORM_NO_ERROR = "0"; + +//Since the Unload handler will be called twice, from both the onunload +//and onbeforeunload events, ensure that we only call LMSFinish once. +var finishCalled = false; + +//Track whether or not we successfully initialized. +var initialized = false; + +var API = null; + +function ScormProcessInitialize(){ + var result; + + API = getAPI(); + + if (API == null){ + alert("ERROR - Could not establish a connection with the LMS.\n\nYour results may not be recorded."); + return; + } + + result = API.LMSInitialize(""); + + if (result == SCORM_FALSE){ + var errorNumber = API.LMSGetLastError(); + var errorString = API.LMSGetErrorString(errorNumber); + var diagnostic = API.LMSGetDiagnostic(errorNumber); + + var errorDescription = "Number: " + errorNumber + "\nDescription: " + errorString + "\nDiagnostic: " + diagnostic; + + alert("Error - Could not initialize communication with the LMS.\n\nYour results may not be recorded.\n\n" + errorDescription); + return; + } + + initialized = true; +} + +function ScormProcessFinish(){ + + var result; + + //Don't terminate if we haven't initialized or if we've already terminated + if (initialized == false || finishCalled == true){return;} + + result = API.LMSFinish(""); + + finishCalled = true; + + if (result == SCORM_FALSE){ + var errorNumber = API.LMSGetLastError(); + var errorString = API.LMSGetErrorString(errorNumber); + var diagnostic = API.LMSGetDiagnostic(errorNumber); + + var errorDescription = "Number: " + errorNumber + "\nDescription: " + errorString + "\nDiagnostic: " + diagnostic; + + alert("Error - Could not terminate communication with the LMS.\n\nYour results may not be recorded.\n\n" + errorDescription); + return; + } +} + + +/* +The onload and onunload event handlers are assigned in launchpage.html because more processing needs to +occur at these times in this example. +*/ +//window.onload = ScormProcessInitialize; +//window.onunload = ScormProcessTerminate; +//window.onbeforeunload = ScormProcessTerminate; + + +function ScormProcessGetValue(element){ + + var result; + + if (initialized == false || finishCalled == true){return;} + + result = API.LMSGetValue(element); + + if (result == ""){ + + var errorNumber = API.LMSGetLastError(); + + if (errorNumber != SCORM_NO_ERROR){ + var errorString = API.LMSGetErrorString(errorNumber); + var diagnostic = API.LMSGetDiagnostic(errorNumber); + + var errorDescription = "Number: " + errorNumber + "\nDescription: " + errorString + "\nDiagnostic: " + diagnostic; + + alert("Error - Could not retrieve a value from the LMS.\n\n" + errorDescription); + return ""; + } + } + + return result; +} + +function ScormProcessSetValue(element, value) { + + var result; + + if (initialized == false || finishCalled == true){return;} + + result = API.LMSSetValue(element, value) + console.log(result) + console.log('value set') + API.LMSCommit('') + console.log('data committed') + if (result == SCORM_FALSE){ + var errorNumber = API.LMSGetLastError(); + var errorString = API.LMSGetErrorString(errorNumber); + var diagnostic = API.LMSGetDiagnostic(errorNumber); + + var errorDescription = "Number: " + errorNumber + "\nDescription: " + errorString + "\nDiagnostic: " + diagnostic; + + alert("Error - Could not store a value in the LMS.\n\nYour results may not be recorded.\n\n" + errorDescription); + return; + } + +} \ No newline at end of file diff --git a/js/script.js b/js/script.js new file mode 100644 index 0000000..da367ef --- /dev/null +++ b/js/script.js @@ -0,0 +1,45 @@ + +// import {ScormProcessInitialize, ScormProcessFinish, ScormProcessGetValue, ScormProcessSetValue} from './scorm.js' + +document.addEventListener('DOMContentLoaded', event => { + console.log('DOM CONTENT LOADED') + const name = ScormProcessGetValue('cmi.core.student_name') + console.log(name) + document.querySelector('p').innerText = name + document.querySelector('button#update').addEventListener('click', event => { + console.log('UPDATE BUTTON CLICKED') + // ScormProcessSetValue('cmi.core.score.raw', 42) + const score = document.querySelector('input').value + console.log(`score: ${score}`) + ScormProcessSetValue("cmi.core.score.raw", parseInt(score)) + ScormProcessSetValue("cmi.core.score.min", "0") + ScormProcessSetValue("cmi.core.score.max", "100") + }) + document.querySelector('button#end').addEventListener('click', event => { + console.log('END BUTTON CLICKED') + ScormProcessFinish() + }) +}) + +window.addEventListener('load', event => { + console.log('LOAD') + ScormProcessInitialize() + const completionStatus = ScormProcessGetValue("cmi.core.lesson_status") + if (completionStatus == "not attempted") { + console.log('not attempted') + ScormProcessSetValue("cmi.core.lesson_status", "incomplete") + } + // ScormProcessInitialize() +}) + +window.addEventListener('beforeunload', event => { + console.log('BEFOREUNLOAD') + ScormProcessSetValue("cmi.core.exit", "") + ScormProcessFinish() +}) + +window.addEventListener('unload', event => { + console.log('UNLOAD') + ScormProcessSetValue("cmi.core.exit", "") + ScormProcessFinish() +})