]> _ Git - hf-scorm-package.git/commitdiff
wip #4907 @1.5
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 15 Dec 2021 10:25:29 +0000 (11:25 +0100)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Wed, 15 Dec 2021 10:25:29 +0000 (11:25 +0100)
js/libs/scorm/facade.js
js/scormpackage.js
style/style.css
style/style.css.map
style/style.sass

index fd277685d9f2ae5273ca568fbdeb5ed641a6598d..78e60d9a9ac446efbe3871bc6ab493d001201ba5 100644 (file)
@@ -12,18 +12,35 @@ SCORMFacade.prototype = {
     },
     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');
index ce38a76e6b69a0c5f82e6b352d46254cf0214bfa..1e0db21dc3443d04e0013f16ed89f726f7a7e8cb 100644 (file)
@@ -1,4 +1,6 @@
 window.savedState = {};
+window.currentModule = null;
+
 
 SCORM_INITED = false;
 SCORM_START_TIME = null;
@@ -79,18 +81,46 @@ function initScorm() {
 
     }
 
-    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;
@@ -160,6 +190,7 @@ function closeSubSCO() {
 
 function openSubSCO(id) {
     var module = getModuleData(id);
+    currentModule = module;
     var path = module.path;
 
     var e = path.split('.');
@@ -176,16 +207,14 @@ function openSubSCO(id) {
     $("#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();
 }
@@ -211,14 +240,17 @@ function 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>');
 
     });
@@ -258,22 +290,10 @@ function initScormEvents() {
     }
     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);
index 520dc597aabcb0d4234d0f73aaaae69cc8f849c4..d253454d1d57493bba41dff1fe2ee758340c1177 100644 (file)
@@ -191,7 +191,8 @@ header h1 {
   border-left: 10px solid #000000;
 }
 #wrapper main table tbody td.score div {
-  width: 50px;
+  white-space: nowrap;
+  width: 60px;
   padding: 5px;
   margin: 0 auto;
   background-color: #e4ff19;
index 1abca19ad52a05d4f0d2b6ca4cf0e618095f1e5d..0dcea500ca65ca47adf96b7dc3dd260bcbc30507 100644 (file)
@@ -1 +1 @@
-{"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
index f123354ea2bf17eb1b416e9c8c68f48a3a48aa8a..7dbc73c29e5df994136819d3d2818525bdf081c1 100644 (file)
@@ -152,12 +152,14 @@ header
 
           &.score
             div
-              width: 50px
+              white-space: nowrap
+              width: 60px
               padding: 5px
               margin: 0 auto
               background-color: #e4ff19
               font-weight: 600
 
+
           svg
             height: 30px