From 19c09e2b998b87fbe6c0e876bc8a6ccd129a5fab Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Tue, 9 Jun 2020 08:26:43 +0200 Subject: [PATCH] done #3691 @3 --- js/libs/fluidbook/fluidbook.scorm.js | 15 +++--- js/libs/fluidbook/fluidbook.splash.js | 2 +- js/libs/scorm/apiwrapper.js | 2 +- js/libs/scorm/scorm.js | 73 ++++++++++++++++++++++----- 4 files changed, 71 insertions(+), 21 deletions(-) diff --git a/js/libs/fluidbook/fluidbook.scorm.js b/js/libs/fluidbook/fluidbook.scorm.js index 52075807..5e3329bc 100644 --- a/js/libs/fluidbook/fluidbook.scorm.js +++ b/js/libs/fluidbook/fluidbook.scorm.js @@ -9,6 +9,12 @@ FluidbookScorm.prototype = { init: function () { var $this = this; + var ok = false; + + if (this.fluidbook.settings.scorm_enable && window.initScorm !== undefined) { + ok = initScorm(); + } + if (this.fluidbook.settings.scorm_variables.linkstocomplete) { this.linksToComplete = this.fluidbook.settings.scorm_variables.linkstocomplete.split(','); } @@ -26,13 +32,10 @@ FluidbookScorm.prototype = { $this.hideScormLinks(); }); - if (this.fluidbook.settings.scorm_enable && window.initScorm !== undefined) { - initScorm(); - } // Mark complete when the user reaches the last page $(this.fluidbook).on('fluidbook.page.change.end', function () { - if ($this.fluidbook.currentPage == $this.fluidbook.settings.pages && $this.fluidbook.settings.scorm_complete_on_last_page) { + if ($this.fluidbook.settings.scorm_complete_on_last_page && $this.fluidbook.currentPage === $this.fluidbook.settings.pages) { scormMarkAsComplete(); } }); @@ -54,7 +57,7 @@ FluidbookScorm.prototype = { }, linksCompleted: function () { - return (this.linksToComplete.length == 0); + return (this.linksToComplete.length === 0); }, isActive: function () { @@ -66,7 +69,7 @@ FluidbookScorm.prototype = { return true; } - return pipwerks.SCORM.API.isFound; + return SCORM_OK; }, openLinkIfCompleteOrDisplayImage: function (openLink, openImage) { diff --git a/js/libs/fluidbook/fluidbook.splash.js b/js/libs/fluidbook/fluidbook.splash.js index 722de533..7d97f4bd 100644 --- a/js/libs/fluidbook/fluidbook.splash.js +++ b/js/libs/fluidbook/fluidbook.splash.js @@ -42,7 +42,7 @@ FluidbookSplash.prototype = { this.fluidbook.pagetransitions.flip3d.performancesTest(function () { $this.fluidbook.networkControl.resume(); var timeout = $this.hideSplashTimeout; - if (window.SCORM !== undefined && window.SCORM === true) { + if (window.SCORM_OK !== undefined && window.SCORM_OK === true) { timeout += 5; } setTimeout(function () { diff --git a/js/libs/scorm/apiwrapper.js b/js/libs/scorm/apiwrapper.js index ff91eb2f..b7f34e28 100644 --- a/js/libs/scorm/apiwrapper.js +++ b/js/libs/scorm/apiwrapper.js @@ -75,7 +75,7 @@ pipwerks.SCORM.isAvailable = function () { pipwerks.SCORM.API.find = function (win) { var API = null, findAttempts = 0, - findAttemptLimit = 500, + findAttemptLimit = 12, traceMsgPrefix = "SCORM.API.find", trace = pipwerks.UTILS.trace, scorm = pipwerks.SCORM; diff --git a/js/libs/scorm/scorm.js b/js/libs/scorm/scorm.js index 14c11dc0..f559492c 100644 --- a/js/libs/scorm/scorm.js +++ b/js/libs/scorm/scorm.js @@ -11,6 +11,7 @@ SCORM_SUCCESS_SCORE = 0; SCORM_EVENTS_INITED = false; SCORM_INTERACTIONS_INITED = false; SCORM_LOCATION_INITED = false; +SCORM_OK = false; var _CMI12 = { 'location': 'cmi.core.lesson_location', @@ -35,17 +36,24 @@ function initScorm() { console.log('init scorm'); SCORM_INITED = true; try { - pipwerks.SCORM.init(); + if (pipwerks.SCORM.init()) { + SCORM_OK = true; + } } catch (e) { } - $(document).on('fluidbook.ready', function () { - scormExit(); - startScormTimer(); - initScormEvents(); - initScormInteractions(); - }); + if (SCORM_OK) { + $(document).on('fluidbook.ready', function () { + scormExit(); + startScormTimer(); + initScormEvents(); + initScormInteractions(); + }); + }else{ + console.log('SCORM nok'); + } + return SCORM_OK; } function _cmi(key) { @@ -65,7 +73,7 @@ function _cmi(key) { } function initScormEvents() { - if (SCORM_EVENTS_INITED) { + if (!SCORM_OK || SCORM_EVENTS_INITED) { return; } SCORM_EVENTS_INITED = true; @@ -123,7 +131,7 @@ function initScormEvents() { }); - // Commit data once a minute + // Commit data every 5 seconds setInterval(function () { fluidbook.networkControl.executeWhenNetwork(function (cb) { pipwerks.SCORM.save(); @@ -135,6 +143,9 @@ function initScormEvents() { } function scormSaveCurrentPosition(page, maxPage) { + if (!SCORM_OK) { + return; + } if (page === undefined) { page = fluidbook.currentPage; } @@ -145,12 +156,18 @@ function scormSaveCurrentPosition(page, maxPage) { } function finishScorm() { + if (!SCORM_OK) { + return; + } setSessionTime(); pipwerks.SCORM.save(); pipwerks.SCORM.quit(); } function scormMarkAsComplete() { + if (!SCORM_OK) { + return; + } scormExit(); setScormValue('status', "completed"); if (!fluidbook.scorm.manageScore) { @@ -159,6 +176,9 @@ function scormMarkAsComplete() { } function scormExit() { + if (!SCORM_OK) { + return; + } var v = 'suspend'; if (fluidbook.settings.scorm_force_attempts) { if (pipwerks.SCORM.version === '1.2') { @@ -176,8 +196,11 @@ function startScormTimer() { } function scormComplete() { - scormMarkAsComplete(); - finishScorm(); + if (SCORM_OK) { + scormMarkAsComplete(); + finishScorm(); + return; + } setTimeout(function () { parent.close(); top.close(); @@ -186,6 +209,9 @@ function scormComplete() { } function getScormValue(elementName) { + if (!SCORM_OK) { + return null; + } var cmi = _cmi(elementName); if (cmi == '') { return null; @@ -195,6 +221,9 @@ function getScormValue(elementName) { } function setScormValue(elementName, value) { + if (!SCORM_OK) { + return; + } var cmi = _cmi(elementName); if (cmi == '') { return false; @@ -204,6 +233,9 @@ function setScormValue(elementName, value) { } function initScormInteractions() { + if (!SCORM_OK) { + return; + } if (SCORM_INTERACTIONS_INITED) { return; } @@ -236,7 +268,9 @@ function initScormInteractions() { } function defineScormInteraction(number, id, type, question, correct_response, weighting) { - + if (!SCORM_OK) { + return; + } if (weighting === undefined) { weighting = 1; } @@ -273,6 +307,9 @@ function defineScormInteraction(number, id, type, question, correct_response, we } function getLearnerResponseById(id) { + if (!SCORM_OK) { + return; + } return getScormValue('cmi.interactions.' + scormIdToN(id) + '.learner_response'); } @@ -281,6 +318,9 @@ function scormIdToN(id) { } function displayScormInteraction(id) { + if (!SCORM_OK) { + return; + } var n = scormIdToN(id); var now = new Date(); if (SCORM_QUESTIONS[n].timestamp !== null) { @@ -291,6 +331,9 @@ function displayScormInteraction(id) { } function answerScormInteraction(id, learner_response, result, set_latency) { + if (!SCORM_OK) { + return; + } var n = scormIdToN(id); var currentTime = Math.round(new Date().getTime() / 1000); displayScormInteraction(id); @@ -310,7 +353,8 @@ function answerScormInteraction(id, learner_response, result, set_latency) { } function updateInteractionsScore() { - if (!fluidbook.scorm.manageScore) { + + if (!SCORM_OK || !fluidbook.scorm.manageScore) { return; } var score = 0; @@ -342,6 +386,9 @@ function updateInteractionsScore() { } function setSessionTime() { + if (!SCORM_OK) { + return; + } var currentTime = new Date(); var sessionTime; -- 2.39.5