finishScorm();
});
- var currentPage = getScormValue('location');
+ var currentLocation = getScormValue('location');
try {
- if (currentPage != '') {
+ if (currentLocation.indexOf('page_') === 0) {
var e = currentPage.split('_');
if (e.length == 2 && e[0] == 'page') {
fluidbook.setCurrentPage(e[1]);
}
+ } else if (currentLocation.indexOf('{') === 0) {
+ var location = JSON.parse(currentLocation);
+ if (location.page) {
+ fluidbook.setCurrentPage(location.page);
+ }
+ if (location.maxPage) {
+ fluidbook.setMaxPage(location.maxPage, true);
+ }
}
} catch (err) {
console.log(err);
}
$(fluidbook).on('fluidbook.page.navigation', function (e, page) {
- setScormValue('location', 'page_' + page);
+ scormSaveCurrentPosition(page);
+ });
+
+ $(fluidbook).on('fluidbook.maxpage.set', function (e, page) {
+ scormSaveCurrentPosition(undefined, page);
});
// Commit data once a minute
- setTimeout(function (args) {
+ setTimeout(function () {
pipwerks.SCORM.save();
- }, 60000);
+ }, 2000);
+}
+
+function scormSaveCurrentPosition(page, maxPage) {
+ if (page === undefined) {
+ page = fluidbook.currentPage;
+ }
+ if (maxPage === undefined) {
+ maxPage = fluidbook.getMaxPage();
+ }
+ setScormValue('location', JSON.stringify({page: page, maxPage: maxPage}));
}
function finishScorm() {
setSessionTime();
+ pipwerks.SCORM.save();
pipwerks.SCORM.quit();
}
function scormComplete() {
setScormValue('status', "completed");
- window.close();
finishScorm();
+ window.close();
}
function getScormValue(elementName) {
totalSeconds = "0" + totalSeconds;
}
sessionTime = totalHours + ":" + totalMinutes + ":" + totalSeconds;
+ setScormValue('session_time', sessionTime);
} else {
- sessionTime = Math.round(calculatedTime / 1000);
+ setScormValue('session_time', scormSecondsToTimeInterval(calculatedTime / 1000));
}
- setScormValue('session_time', sessionTime);
+
}
function dateToScormTime(date) {
function getScormTimeInterval(start, end) {
var diff = Math.round((end.getTime() - start.getTime()) / 1000);
+ return scormSecondsToTimeInterval(diff);
+}
+
+function scormSecondsToTimeInterval(diff) {
var h = Math.floor(diff / 3600);
diff = diff % 3600;
var m = Math.floor(diff / 60);