},
GetValue: function (key) {
this._log('Get value ' + key);
- if(key==='cmi.completion_status'){
+ var d = savedState[currentModule.id];
+ if (key === 'cmi.core.lesson_status' || key === 'cmi.completion_status') {
+ return d.completion_status;
+ } else if (key === 'cmi.location' || key === 'cmi.core.lesson_location') {
+ return JSON.stringify(d.location);
+ } else if (key === 'cmi.success_status') {
+ return d.success_status;
}
- return getScormValue(key);
+ return d.cmi[key] === null ? 'null' : d.cmi[key];
},
SetValue: function (key, value) {
this._log('Set value ' + key + ' :: ' + value);
- if(key===''){
-
+ var data = {cmi: {}};
+ if (key === 'cmi.core.lesson_status' || key === 'cmi.completion_status') {
+ key = 'completion_status';
+ data[key] = value;
+ } else if (key === 'cmi.location' || key === 'cmi.core.lesson_location') {
+ key = 'location';
+ data[key] = value;
+ } else if (key === 'cmi.success_status') {
+ key = 'success_status';
+ data[key] = value;
+ } else {
+ data.cmi[key] = value;
}
- // TODO save data in module
+ setModuleState(currentModule.id, data);
+ return true;
},
Commit: function (d) {
this._log('Commit');
window.savedState = {};
+window.currentModule = null;
+
SCORM_INITED = false;
SCORM_START_TIME = null;
}
- setContents();
- initEvents();
if (SCORM_OK) {
scormExit();
startScormTimer();
initScormEvents();
}
+ initState();
+ setContents();
+ initEvents();
window.API = null;
window.API_1484_11 = new SCORMFacade();
return SCORM_OK;
}
+function initState() {
+ var currentLocation = '';
+ if (SCORM_OK) {
+ currentLocation = getScormValue('location');
+ }
+
+ if (currentLocation === undefined || currentLocation === null || currentLocation === 'null' || currentLocation === '') {
+ window.savedState = {};
+ } else {
+ window.savedState = JSON.parse(currentLocation);
+ }
+
+
+ if (window.savedState === undefined || window.savedState === null || window.savedState === 'null') {
+ window.savedState = {};
+ }
+
+ var defaultState = {completion_status: 'incomplete', success_status: 'unknown', score: 0, location: {}, cmi: {}};
+ $.each(DATA.modules, function (k, v) {
+ if (window.savedState[v.id] === undefined || window.savedState[v.id] === null) {
+ window.savedState[v.id] = defaultState;
+ } else {
+ window.savedState[v.id] = $.extend(true, defaultState, window.savedState[v.id])
+ }
+ });
+}
+
function scormMarkAsComplete() {
if (!SCORM_OK) {
return;
function openSubSCO(id) {
var module = getModuleData(id);
+ currentModule = module;
var path = module.path;
var e = path.split('.');
$("#sco").attr('src', path);
if (!module.scorm) {
- setModuleState(module.id, 'completed', 'passed', 100);
+ setModuleState(module.id, {completion_status: 'completed', success_status: 'passed', score: 100});
}
}
-function setModuleState(id, completion_status, success_status, score, location) {
- if (location === undefined) {
- location = {};
- }
- var s = {completion_status: completion_status, success_status: success_status, score: score, location: location};
- window.savedState[id] = s;
+function setModuleState(id, data) {
+ console.log('setModuleState', id, JSON.stringify(data));
+ window.savedState[id] = $.extend(true, window.savedState[id], data);
+ console.log(savedState[id]);
saveStatus();
setContents();
}
$('header h1').text(DATA.title);
$('title').text(DATA.title);
$('tbody').html('');
+
+
$.each(DATA.modules, function (k, v) {
- var s = (status[v.id] === undefined) ? {complete_status: 'incomplete', success_status: 'unknown', score: 0, location: {}} : status[v.id];
+ var s = window.savedState[v.id];
+
var tr = $('<tr data-type="' + v.type + '" data-id="' + v.id + '"><td class="i">' + getSpriteIcon('icon-' + v.type) + '</td></tr>');
$('tbody').append(tr);
tr.append('<td class="t">' + v.title + '</td>');
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.complete_status === 'completed' ? vcheck : xcheck) + '</td>');
+ tr.append('<td class="c">' + (s.completion_status === 'completed' ? vcheck : xcheck) + '</td>');
tr.append('<td class="score c" data-score="' + s.score + '"><div>' + s.score + ' %</div></td>');
});
}
SCORM_LOCATION_INITED = true;
- var currentLocation = getScormValue('location');
- if (currentLocation !== 'null' && currentLocation !== '') {
- window.savedState = {};
- } else {
- window.savedState = JSON.parse(currentLocation);
- }
-
-
- if (window.savedState === undefined || window.savedState === null || window.savedState === 'null') {
- window.savedState = {};
- }
initEvents();
setContents();
-
setInterval(function () {
pipwerks.SCORM.save();
}, 5000);
-{"version":3,"sourceRoot":"","sources":["style.sass"],"names":[],"mappings":"AAEA;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;;AAEJ;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAEJ;EACE;EACA;EACA;;;AAEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAII;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAyDN;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACE;EACA;;AAGE;EACE;EACA;;AAEA;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;AAMI;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAuII;EACE;;AAGF;EACE;EACA;EACA;;AACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;;AAEJ;EACE;;;AAEZ;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA","file":"style.css"}
\ No newline at end of file
+{"version":3,"sourceRoot":"","sources":["style.sass"],"names":[],"mappings":"AAEA;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AACA;EACE;;AAEJ;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAEJ;EACE;EACA;EACA;;;AAEJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAII;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAsDF;EACE,kBAvDA;;AAyDN;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEJ;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEJ;EACE;EACA;;AAGE;EACE;EACA;;AAEA;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAEF;EACE;;AAMI;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAgIM;EACE,mBAjIR;;AAmIQ;EACE,OApIV;;AAuII;EACE;;AAGF;EACE;EACA;EACA;;AACJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;;;AAEZ;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA","file":"style.css"}
\ No newline at end of file