Skip to content

Commit

Permalink
SCORM 1.2 Gateway. First version.
Browse files Browse the repository at this point in the history
  • Loading branch information
agordillo committed Jun 2, 2016
1 parent 1e74049 commit 844c78e
Show file tree
Hide file tree
Showing 114 changed files with 21,689 additions and 232 deletions.
237 changes: 37 additions & 200 deletions examples/SCORM_APP/Local_API_SCORM_12.js

Large diffs are not rendered by default.

102 changes: 80 additions & 22 deletions examples/SCORM_APP/SCORM_Player.js
Expand Up @@ -22,8 +22,10 @@

function SCORM_Player(options){

var status = {};

var defaults = {
version: "1.1",
version: "1.2",
debug: true,
SCORM_VERSION: undefined,
SCORM_PACKAGE_URL: undefined,
Expand Down Expand Up @@ -52,7 +54,7 @@ function SCORM_Player(options){
adaptContentWrapper();


//Public
//Public

this.loadScormContent = function(callback){
$(document).ready(function(){
Expand Down Expand Up @@ -212,29 +214,85 @@ function SCORM_Player(options){
return;
}

settings.LMS_API.addListener("cmi.progress_measure", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setProgress(value*100);
}
});
if(settings.SCORM_VERSION === "12"){
settings.LMS_API.addListener("cmi.core.lesson_status", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
// Completion status and success status are not considered in SCORM 1.2, but can be inferred from lesson_status
// lesson_status = "|passed|completed|failed|incomplete|browsed|not attempted|unknown|"
// completion_status = "|completed|incomplete|not attempted|unknown|"
// success_status = "|passed|failed|unknown|"
var completionValue = undefined;
var successValue = undefined;

switch(value){
case "passed":
completionValue = "completed";
successValue = value;
break;
case "failed":
successValue = value;
break;
case "completed":
case "incomplete":
case "not attempted":
completionValue = value;
break;
case "browsed":
completionValue = "not attempted";
break;
case "unknown":
completionValue = value;
successValue = value;
break;
}

settings.LMS_API.addListener("cmi.completion_status", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setCompletionStatus(value);
}
});
if((typeof completionValue == "string")&&(completionValue != status.completionStatus)){
if(status.completionStatus != "completed"){
//Do not allow to undo "completed" lesson_status.
settings.VISH_IFRAME_API.setCompletionStatus(completionValue);
status.completionStatus = completionValue;
}
}
if((typeof successValue == "string")&&(successValue != status.successStatus)){
if(status.completionStatus != "passed"){
settings.VISH_IFRAME_API.setSuccessStatus(successValue);
status.successStatus = successValue;
}
}
}
});

settings.LMS_API.addListener("cmi.score.scaled", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setScore(value*100);
}
});
settings.LMS_API.addListener("cmi.score.scaled", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setScore(value*100);
}
});

settings.LMS_API.addListener("cmi.success_status", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setSuccessStatus(value);
}
});
} else if((settings.SCORM_VERSION === "2004")||(typeof settings.SCORM_VERSION != "string")){
settings.LMS_API.addListener("cmi.progress_measure", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setProgress(value*100);
}
});

settings.LMS_API.addListener("cmi.completion_status", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setCompletionStatus(value);
}
});

settings.LMS_API.addListener("cmi.score.scaled", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setScore(value*100);
}
});

settings.LMS_API.addListener("cmi.success_status", function(value){
if(settings.VISH_IFRAME_API.isConnected()){
settings.VISH_IFRAME_API.setSuccessStatus(value);
}
});
}
};

function adaptContentWrapper(){
Expand Down
7 changes: 7 additions & 0 deletions examples/SCORM_APP/framed_vishubcode_scorm12_wrapper.html
@@ -0,0 +1,7 @@
<html>
<head>
</head>
<body>
<iframe src="vishubcode_scorm12_wrapper.html" style="width:100%; height:100%; border: none"></iframe>
</body>
</html>
7 changes: 7 additions & 0 deletions examples/SCORM_APP/framed_vishubcode_scorm2004_wrapper.html
@@ -0,0 +1,7 @@
<html>
<head>
</head>
<body>
<iframe src="vishubcode_scorm2004_wrapper.html" style="width:100%; height:100%; border: none"></iframe>
</body>
</html>
7 changes: 0 additions & 7 deletions examples/SCORM_APP/framed_vishubcode_scorm_wrapper.html

This file was deleted.

23 changes: 23 additions & 0 deletions examples/SCORM_APP/vishubcode_scorm12_wrapper.html
@@ -0,0 +1,23 @@
<html>
<head>
<script src="jquery-1.11.1.min.js" type="text/javascript"></script>
<script src="Local_API_SCORM_12.js" type="text/javascript"></script>
<script src="SCORM_Player.js" type="text/javascript"></script>
<script src="../../js/VISH.IframeAPI.js" type="text/javascript"></script>
</head>

<body>
<script type="text/javascript">
//SCORM URL
var scormpackageURL = "../contents/scormappcode/AQuizmaker_SCORM12/index_lms.html";
// Create LMS API
var API = new Local_API_SCORM_12({debug: true});
//Create SCORM player
var SCORM_Player = new SCORM_Player({debug: true, SCORM_VERSION: "12", LMS_API: API, VISH_IFRAME_API: VISH.IframeAPI, SCORM_PACKAGE_URL: scormpackageURL });

SCORM_Player.loadScormContent(function(){
// Scorm content loaded
});
</script>
</body>
</html>
Expand Up @@ -9,11 +9,11 @@
<body>
<script type="text/javascript">
//SCORM URL
var scormpackageURL = "../contents/scormappcode/MedievalArmor/index_lms.html";
var scormpackageURL = "../contents/scormappcode/MedievalArmor_SCORM2004/index_lms.html";
// Create LMS API
var API_1484_11 = new Local_API_1484_11({debug: false});
var API_1484_11 = new Local_API_1484_11({debug: true});
//Create SCORM player
var SCORM_Player = new SCORM_Player({debug: false, LMS_API: API_1484_11, VISH_IFRAME_API: VISH.IframeAPI, SCORM_PACKAGE_URL: scormpackageURL });
var SCORM_Player = new SCORM_Player({debug: true, SCORM_VERSION: "2004", LMS_API: API_1484_11, VISH_IFRAME_API: VISH.IframeAPI, SCORM_PACKAGE_URL: scormpackageURL });

SCORM_Player.loadScormContent(function(){
// Scorm content loaded
Expand Down
110 changes: 110 additions & 0 deletions examples/contents/scormappcode/AQuizmaker_SCORM12/adlcp_rootv1p2.xsd
@@ -0,0 +1,110 @@
<?xml version="1.0"?>
<!-- filename=adlcp_rootv1p2.xsd -->
<!-- Conforms to w3c http://www.w3.org/TR/xmlschema-1/ 2000-10-24-->

<xsd:schema xmlns="http://www.adlnet.org/xsd/adlcp_rootv1p2"
targetNamespace="http://www.adlnet.org/xsd/adlcp_rootv1p2"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
xmlns:imscp="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="unqualified"
version="ADL Version 1.2">

<xsd:import namespace="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
schemaLocation="imscp_rootv1p1p2.xsd"/>

<xsd:element name="location" type="locationType"/>
<xsd:element name="prerequisites" type="prerequisitesType"/>
<xsd:element name="maxtimeallowed" type="maxtimeallowedType"/>
<xsd:element name="timelimitaction" type="timelimitactionType"/>
<xsd:element name="datafromlms" type="datafromlmsType"/>
<xsd:element name="masteryscore" type="masteryscoreType"/>


<xsd:element name="schema" type="newSchemaType"/>
<xsd:simpleType name="newSchemaType">
<xsd:restriction base="imscp:schemaType">
<xsd:enumeration value="ADL SCORM"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:element name="schemaversion" type="newSchemaversionType"/>
<xsd:simpleType name="newSchemaversionType">
<xsd:restriction base="imscp:schemaversionType">
<xsd:enumeration value="1.2"/>
</xsd:restriction>
</xsd:simpleType>


<xsd:attribute name="scormtype">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="asset"/>
<xsd:enumeration value="sco"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>

<xsd:simpleType name="locationType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="2000"/>
</xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="prerequisitesType">
<xsd:simpleContent>
<xsd:extension base="prerequisiteStringType">
<xsd:attributeGroup ref="attr.prerequisitetype"/>
</xsd:extension>
</xsd:simpleContent>
</xsd:complexType>

<xsd:attributeGroup name="attr.prerequisitetype">
<xsd:attribute name="type" use="required">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="aicc_script"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
</xsd:attributeGroup>

<xsd:simpleType name="maxtimeallowedType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="13"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="timelimitactionType">
<xsd:restriction base="stringType">
<xsd:enumeration value="exit,no message"/>
<xsd:enumeration value="exit,message"/>
<xsd:enumeration value="continue,no message"/>
<xsd:enumeration value="continue,message"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="datafromlmsType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="255"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="masteryscoreType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="200"/>
</xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="stringType">
<xsd:restriction base="xsd:string"/>
</xsd:simpleType>

<xsd:simpleType name="prerequisiteStringType">
<xsd:restriction base="xsd:string">
<xsd:maxLength value="200"/>
</xsd:restriction>
</xsd:simpleType>

</xsd:schema>
@@ -0,0 +1 @@
<?xml version="1.0" encoding="UTF-8"?><!-- filename=ims_xml.xsd --><xsd:schema xmlns="http://www.w3.org/XML/1998/namespace" targetNamespace="http://www.w3.org/XML/1998/namespace" xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <!-- 2001-02-22 edited by Thomas Wason IMS Global Learning Consortium, Inc. --> <xsd:annotation> <xsd:documentation>In namespace-aware XML processors, the &quot;xml&quot; prefix is bound to the namespace name http://www.w3.org/XML/1998/namespace.</xsd:documentation> <xsd:documentation>Do not reference this file in XML instances</xsd:documentation> <xsd:documentation>Schawn Thropp: Changed the uriReference type to string type</xsd:documentation> </xsd:annotation> <xsd:attribute name="lang" type="xsd:language"> <xsd:annotation> <xsd:documentation>Refers to universal XML 1.0 lang attribute</xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="base" type="xsd:string"> <xsd:annotation> <xsd:documentation>Refers to XML Base: http://www.w3.org/TR/xmlbase</xsd:documentation> </xsd:annotation> </xsd:attribute> <xsd:attribute name="link" type="xsd:string"/></xsd:schema>

0 comments on commit 844c78e

Please sign in to comment.