241 lines
6.4 KiB
JavaScript
241 lines
6.4 KiB
JavaScript
|
|
// JavaScript Document
|
||
|
|
var startDate = 0;
|
||
|
|
var debug = false;
|
||
|
|
pipwerks.debug.isActive = debug;
|
||
|
|
pipwerks.SCORM.handleExitMode = false; // super importante para el LMS de succesFactor
|
||
|
|
/*
|
||
|
|
Se especifica la version de scorm a usar, se esta usando el warpper de pipwerks
|
||
|
|
*/
|
||
|
|
pipwerks.SCORM.version = "1.2";
|
||
|
|
var unloaded = false;
|
||
|
|
/**
|
||
|
|
* Descripción funcion que se encargar de enviar los datos al lms
|
||
|
|
* @method unloadHandler
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
function unloadHandler() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
if (!unloaded) {
|
||
|
|
var tiempo = computeTime();
|
||
|
|
pipwerks.SCORM.set("cmi.core.session_time", tiempo);
|
||
|
|
pipwerks.SCORM.save(); //save all data that has already been sent
|
||
|
|
pipwerks.SCORM.quit(); //close the SCORM API connection properly
|
||
|
|
unloaded = true;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Descripción: Obtiene la ultima pantalla visitada
|
||
|
|
* @method getLocation
|
||
|
|
* @return visitada
|
||
|
|
*/
|
||
|
|
function getLocation() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
var visitada = eval(pipwerks.SCORM.get("cmi.core.lesson_location")) || 0;
|
||
|
|
return visitada;
|
||
|
|
} else {
|
||
|
|
if (sessionStorage.getItem("offlinemp.intentos")) {
|
||
|
|
return Number(sessionStorage.getItem("offlinemp.intentos"));
|
||
|
|
}else{
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Descripción: Envia al LMS la pantlla actual o visitada
|
||
|
|
* @return
|
||
|
|
* @method setLocation
|
||
|
|
* @param loc es un string con el valor de la pantalla a guardar
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
function setLocation(loc) {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
scorm = pipwerks.SCORM;
|
||
|
|
if (scorm.connection.isActive) {
|
||
|
|
var current = getLocation() || 0;
|
||
|
|
if (Number(current) < Number(loc)) {
|
||
|
|
var success = pipwerks.SCORM.set("cmi.core.lesson_location", loc);
|
||
|
|
pipwerks.SCORM.save(); //save all data that has already been sent
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
sessionStorage.setItem("offlinemp.intentos", loc);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Descripción: Envia al LMS la calificación reportada por el sco
|
||
|
|
* @return
|
||
|
|
* @method setScore
|
||
|
|
* @param score es un string con el valor calificacion en porcentaje
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
function setScore(score) {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
if( score >= getScore() ){
|
||
|
|
pipwerks.SCORM.set("cmi.core.score.raw", score);
|
||
|
|
pipwerks.SCORM.save();
|
||
|
|
}
|
||
|
|
}else{
|
||
|
|
if( score >= getScore() ){
|
||
|
|
sessionStorage.setItem("offlinemp.score", score);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function getScore() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
var currentScore = pipwerks.SCORM.get("cmi.core.score.raw") || 0;
|
||
|
|
if (currentScore == "") {
|
||
|
|
currentScore = 0;
|
||
|
|
}
|
||
|
|
return Number(currentScore);
|
||
|
|
} else {
|
||
|
|
if (sessionStorage.getItem("offlinemp.score")) {
|
||
|
|
return Number(sessionStorage.getItem("offlinemp.score"));
|
||
|
|
}else{
|
||
|
|
return 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Descripción: Inica el conteo del tiempo en el sco
|
||
|
|
* @return
|
||
|
|
* @method startTimer
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
function startTimer() {
|
||
|
|
startDate = new Date().getTime();
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Descripción: calucla el tiempo que el usuario permance en el sco
|
||
|
|
* @method computeTime
|
||
|
|
* @return formattedTime
|
||
|
|
*/
|
||
|
|
function computeTime() {
|
||
|
|
var formattedTime = "00:00:00.0";
|
||
|
|
if (startDate != 0) {
|
||
|
|
var currentDate = new Date().getTime();
|
||
|
|
var elapsedSeconds = ((currentDate - startDate) / 1000);
|
||
|
|
formattedTime = convertTotalSeconds(elapsedSeconds);
|
||
|
|
}
|
||
|
|
return formattedTime;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Descripción: convierte el tiempo en segundos
|
||
|
|
* @method convertTotalSeconds
|
||
|
|
* @param ts de tipo time
|
||
|
|
* @return rtnVal
|
||
|
|
*/
|
||
|
|
function convertTotalSeconds(ts) {
|
||
|
|
var Sec = (ts % 60);
|
||
|
|
ts -= Sec;
|
||
|
|
var tmp = (ts % 3600);
|
||
|
|
ts -= tmp;
|
||
|
|
if ((ts % 3600) != 0) var Hour = "00";
|
||
|
|
else var Hour = "" + (ts / 3600);
|
||
|
|
if ((tmp % 60) != 0) var Min = "00";
|
||
|
|
else var Min = "" + (tmp / 60);
|
||
|
|
Sec = "" + Sec
|
||
|
|
Sec = Sec.substring(0, Sec.indexOf("."))
|
||
|
|
if (Hour.length < 2) Hour = "0" + Hour;
|
||
|
|
if (Min.length < 2) Min = "0" + Min;
|
||
|
|
if (Sec.length < 2) Sec = "0" + Sec;
|
||
|
|
var rtnVal = Hour + ":" + Min + ":" + Sec;
|
||
|
|
return rtnVal;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Descripción: envia al lms valores para guardar en suspend_data
|
||
|
|
* @return
|
||
|
|
* @method setSuspendData
|
||
|
|
* @param data de tipo string
|
||
|
|
* @return
|
||
|
|
*/
|
||
|
|
function setSuspendData(data) {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
var success = pipwerks.SCORM.set("cmi.suspend_data", data);
|
||
|
|
pipwerks.SCORM.save();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
/**
|
||
|
|
* Descripción: obtiene el valores del lms para suspend_data
|
||
|
|
* @method getSuspendData
|
||
|
|
* @return CallExpression
|
||
|
|
*/
|
||
|
|
function getSuspendData() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
var _data = pipwerks.SCORM.get("cmi.suspend_data");
|
||
|
|
if (_data == "") {
|
||
|
|
return null;
|
||
|
|
} else {
|
||
|
|
return _data;
|
||
|
|
}
|
||
|
|
|
||
|
|
} else {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Description
|
||
|
|
* @method getStudentName
|
||
|
|
* @return CallExpression
|
||
|
|
*/
|
||
|
|
function getStudentName() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
var student_name = pipwerks.SCORM.get("cmi.core.student_name");
|
||
|
|
if (!student_name) {
|
||
|
|
student_name = "";
|
||
|
|
}
|
||
|
|
return student_name;
|
||
|
|
} else {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
cmi.core.lesson_status - indicates SCO completion -
|
||
|
|
returns one of the following: "passed", "completed", "failed", "incomplete",
|
||
|
|
"browsed", or "not attempted"
|
||
|
|
*/
|
||
|
|
function getLessonStatus() {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
return pipwerks.SCORM.get("cmi.core.lesson_status");
|
||
|
|
} else {
|
||
|
|
return "";
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
function setLessonStatus(status) {
|
||
|
|
if (pipwerks.SCORM.connection.isActive) {
|
||
|
|
pipwerks.SCORM.set("cmi.core.lesson_status", status);
|
||
|
|
pipwerks.SCORM.save(); //save all data that has already been sent
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
function iniciarScorm() {
|
||
|
|
var success = pipwerks.SCORM.init();
|
||
|
|
var status = "";
|
||
|
|
startTimer();
|
||
|
|
if (success) {
|
||
|
|
status = pipwerks.SCORM.get("cmi.core.lesson_status");
|
||
|
|
if (!(status.localeCompare("completed") == 0 || status.localeCompare("passed") == 0)) {
|
||
|
|
success = pipwerks.SCORM.set("cmi.core.lesson_status", "incomplete");
|
||
|
|
if (success) {
|
||
|
|
pipwerks.SCORM.save();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
//window.addEventListener("load", iniciarScorm);
|
||
|
|
window.addEventListener("beforeunload", unloadHandler);
|
||
|
|
window.addEventListener("unload", unloadHandler);
|