-<?xml version="1.0" encoding="UTF-8"?>
-<manifest
- xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
- xmlns:imsmd="http://www.imsglobal.org/xsd/imsmd_rootv1p2p1"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_rootv1p2"
- identifier="MANIFEST-90878C16-EB60-D648-94ED-9651972B5F38"
- xsi:schemaLocation="http://www.imsproject.org/xsd/imscp_rootv1p1p2 imscp_rootv1p1p2.xsd
- http://www.imsglobal.org/xsd/imsmd_rootv1p2p1 imsmd_rootv1p2p1.xsd
- http://www.adlnet.org/xsd/adlcp_rootv1p2 adlcp_rootv1p2.xsd">
+<?xml version="1.0" standalone="no" ?>
+<manifest identifier="MANIFEST-90878C16-EB60-D648-94ED-9651972B5F38" version="1.3"
+ xmlns="http://www.imsglobal.org/xsd/imscp_v1p1"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:adlcp="http://www.adlnet.org/xsd/adlcp_v1p3"
+ xmlns:adlseq="http://www.adlnet.org/xsd/adlseq_v1p3"
+ xmlns:adlnav="http://www.adlnet.org/xsd/adlnav_v1p3"
+ xmlns:imsss="http://www.imsglobal.org/xsd/imsss"
+ xsi:schemaLocation="http://www.imsglobal.org/xsd/imscp_v1p1 imscp_v1p1.xsd
+ http://www.adlnet.org/xsd/adlcp_v1p3 adlcp_v1p3.xsd
+ http://www.adlnet.org/xsd/adlseq_v1p3 adlseq_v1p3.xsd
+ http://www.adlnet.org/xsd/adlnav_v1p3 adlnav_v1p3.xsd
+ http://www.imsglobal.org/xsd/imsss imsss_v1p0.xsd">
<metadata>
<schema>ADL SCORM</schema>
- <schemaversion>1.2</schemaversion>
+ <schemaversion>2004 4th Edition</schemaversion>
</metadata>
- <organizations default="ACME-ORG-1350650111249">
- <organization identifier="ACME-ORG-1350650111249" structure="hierarchical">
- <title>HF SCORM Multiple Package</title>
- <item identifier="HF_SCORM_PACKAGE" identifierref="HF_SCORM_PACKAGE" isvisible="true">
- <title>HF SCORM Multiple Package</title>
+ <organizations default="HF">
+ <organization identifier="HF" adlseq:objectivesGlobalToSystem="false">
+ <title>HF Scorm Multi Package</title>
+ <item identifier="multipackage" identifierref="multipackage_RES" isvisible="true">
+ <title>HF Scorm Multi Package</title>
+ <adlnav:presentation>
+ <adlnav:navigationInterface>
+ <adlnav:hideLMSUI>continue</adlnav:hideLMSUI>
+ <adlnav:hideLMSUI>previous</adlnav:hideLMSUI>
+ <adlnav:hideLMSUI>exit</adlnav:hideLMSUI>
+ <adlnav:hideLMSUI>exitAll</adlnav:hideLMSUI>
+ <adlnav:hideLMSUI>suspendAll</adlnav:hideLMSUI>
+ <adlnav:hideLMSUI>abandonAll</adlnav:hideLMSUI>
+ </adlnav:navigationInterface>
+ </adlnav:presentation>
</item>
</organization>
</organizations>
<resources>
- <resource type="webcontent" adlcp:scormtype="sco" identifier="HF_SCORM_PACKAGE" href="index.html">
+ <resource identifier="multipackage_RES" type="webcontent" adlcp:scormType="sco" href="index.html">
<file href="index.html"/>
</resource>
</resources>
}
function initState() {
+
+ if (SCORM_LOCATION_INITED) {
+ return;
+ }
+ SCORM_LOCATION_INITED = true;
+
var currentLocation = '';
if (SCORM_OK) {
currentLocation = getScormValue('location');
window.savedState = JSON.parse(currentLocation);
}
+ console.log(currentLocation, window.savedState);
+
if (window.savedState === undefined || window.savedState === null || window.savedState === 'null') {
window.savedState = {};
}
-
+ var clone = $.extend(true, {}, window.savedState);
$.each(DATA.modules, function (k, v) {
+ var id = v.id.toString();
var defaultState = {completion_status: 'incomplete', success_status: 'unknown', score: 0, location: '', cmi: {}};
- if (window.savedState[v.id] === undefined || window.savedState[v.id] === null) {
- window.savedState[v.id] = defaultState;
+ if (clone[id] === undefined || clone[id] === null) {
+ window.savedState[id] = defaultState;
} else {
- $.extend(true, window.savedState[v.id], defaultState);
+ window.savedState[id] = $.extend(true, defaultState, clone[id]);
}
});
}
}
setSessionTime();
pipwerks.SCORM.save();
- if (fluidbook.settings.multilang === '') {
- pipwerks.SCORM.quit();
- }
+ pipwerks.SCORM.quit();
}
function scormExit() {
return;
}
var v = 'suspend';
- if (fluidbook.settings.scorm_force_attempts) {
- if (pipwerks.SCORM.version === '1.2') {
- v = 'logout';
- } else {
- v = 'normal';
- }
- }
-
setScormValue('exit', v);
}
}
function setModuleState(id, data) {
- $.extend(true, window.savedState[id], data);
+ var clone = $.extend(true, {}, window.savedState[id]);
+ window.savedState[id] = $.extend(true, {}, clone, data);
saveStatus();
setContents();
}
function saveStatus() {
+ if (!SCORM_LOCATION_INITED) {
+ return;
+ }
setSCORMLocation(window.savedState);
+ var completed = true;
+ var globalScore = 0;
+ var globalScoreItems = 0;
+ for (var k in DATA.modules) {
+ var m = DATA.modules[k];
+ var s = window.savedState[m.id];
+ if (m.mandatory && s.completion_status !== 'completed' && s.completion_status !== 'passed') {
+ completed = false;
+ }
+ var score = calcScore(s);
+ if (!isNaN(score) && score >= 0) {
+ globalScore += score;
+ globalScoreItems++;
+ }
+ }
+ var score100 = globalScore / globalScoreItems;
+ if (isNaN(score100)) {
+ score100 = -1;
+ }
+ if (score100 > 0) {
+ setScormValue('cmi.score.raw', score100);
+ setScormValue('cmi.score.scaled', score100 / 100);
+ setScormValue('cmi.score.min', 0);
+ setScormValue('cmi.score.max', 100);
+ }
+ if (!isNaN(score100) && score100 > 0) {
+ setScormValue('success_status', 'passed');
+ } else {
+ setScormValue('success_status', 'unknown');
+ }
+ setScormValue('status', completed ? 'completed' : 'incomplete');
}
function getModuleData(id) {
}
function setContents() {
+ if (!SCORM_LOCATION_INITED) {
+ return;
+ }
var vcheck = getSpriteIcon('check-ok');
var xcheck = getSpriteIcon('check-nok');
var types = {IN: 'Infographic PDF', AN: 'Animation', VI: 'Video', FB: 'Fluidbook', PC: 'Podcast HTML', QZ: 'Quiz'};
tr.append('<td class="y">' + types[v.type] + '</td>');
tr.append('<td class="c">' + (v.mandatory ? vcheck : xcheck) + '</td>');
tr.append('<td class="c">' + (s.completion_status === 'completed' ? vcheck : xcheck) + '</td>');
- tr.append('<td class="score c" data-score="' + score + '"><div>' + (score === 0 ? '-' : score + ' %') + '</div></td>');
+ tr.append('<td class="score c" data-score="' + score + '"><div>' + (score < 0 ? '-' : score + ' %') + '</div></td>');
});
}
function calcScore(s) {
- var raw = doubleQuestionMark(s.cmi['cmi.core.score.raw'], s.cmi['cmi.score.raw'], 0);
+ if (s === undefined) {
+ return -1;
+ }
+ var raw = doubleQuestionMark(s.cmi['cmi.core.score.raw'], s.cmi['cmi.score.raw'], -1);
var max = doubleQuestionMark(s.cmi['cmi.core.score.max'], s.cmi['cmi.score.max'], 100);
var min = doubleQuestionMark(s.cmi['cmi.core.score.min'], s.cmi['cmi.score.min'], 0);
+
+ console.log(raw, max, min);
var scale = max - min;
var norm = raw - min;
+ if (isNaN(scale) || isNaN(norm)) {
+ return -1;
+ }
return 100 * (norm / scale);
}
function doubleQuestionMark() {
for (var i = 0; i < arguments.length; i++) {
- if (arguments[i] === undefined || arguments[i]===null) {
+ if (arguments[i] === undefined || arguments[i] === null) {
continue;
}
return arguments[i];
finishScorm();
});
- if (SCORM_LOCATION_INITED) {
- return;
- }
- SCORM_LOCATION_INITED = true;
-
-
- initEvents();
- setContents();
-
setInterval(function () {
pipwerks.SCORM.save();
}, 5000);
return false;
}
var result = pipwerks.SCORM.set(cmi, value);
- if (fluidbook.settings.scorm_immediate_commit) {
- pipwerks.SCORM.save();
- }
return result;
}