/*
Manages the summary for all the objects on the page
*/
summaryObjects = {
questions:[],
answerCounter: 0,
correctCount: 0,
closeFrameElement: window.parent.document.querySelector('.close'),
enterPage: function ()
{
summaryObjects.updateSummary();
},
updateSummary: function (question)
{
$("[multipliable-ref='summary']").each(function ()
{
var summary = {
id: $(this).attr("cmxid"),
multiple: false,
answers: [], passed: false,
countsInStats: $(this).attr("counts-in-statistics") == "true",
element:$(this)
};
var container = $("
");
$(this).html("").append(container);
var questionHeader = $("
" + $(this).html() + "
");
container.append( questionHeader );
if ( summaryObjects.testPassed() ) {
var correctFeedbackText = $(this).attr("correct-feedback-text").trim();
if (correctFeedbackText != "")
{
var correctFeedbackElement = $("
" + correctFeedbackText + "
");
container.append(correctFeedbackElement)
if ( summaryObjects.closeFrameElement ) {
var closeButtonElement = $("");
correctFeedbackElement.append(closeButtonElement);
closeButtonElement.click(summaryObjects.closeButtonClicked);
}
summary.closeButtonElement = closeButtonElement;
//Scorm12Adapter.lmsAdapter.LMSSetValue("cmi.core.lesson_status", "completed");
//question.correctFeedbackElement = correctFeedbackElement;
}
} else {
var wrongFeedbackElement = $("");
var scoreTextElement = $(this).attr("score-text").trim();
var restartButtonText = $(this).attr("restart-button").trim();
//var scoreText = "Du fick " + summaryObjects.correctCount + "/" + summaryObjects.answerCounter + " rätt." ;
var scoreText = scoreTextElement + " " + summaryObjects.correctCount + "/" + summaryObjects.answerCounter;
wrongFeedbackElement.append($("
" + scoreText + "
"));
// Render feedback text for not answering correct on all questions
var wrongFeedbackText = $(this).attr("wrong-feedback-text").trim();
if (wrongFeedbackText != "")
{
wrongFeedbackElement.append($("
" + wrongFeedbackText + "
"));
}
if (restartButtonText != "")
{
var restartButtonElement = $("");
wrongFeedbackElement.append(restartButtonElement);
restartButtonElement.click(summaryObjects.restartButtonClicked);
summary.restartButtonElement = restartButtonElement;
}
container.append( wrongFeedbackElement );
}
});
},
checkAnswers: function (question)
{
summaryObjects.correctCount = 0;
var questions = questionObjects.questions;
summaryObjects.answerCounter = questions.length;
//Go through all questions and the answers to calculate score
questions.forEach(function (question)
{
question.answers.forEach(function (answer)
{
if ( answer.correct && answer.selected )
{
summaryObjects.correctCount++;
}
});
});
},
checkForAllCompleted: function ()
{
var allDone = true;
questionObjects.questions.forEach(function (obj)
{
//if (obj.countsInStats && obj.status != "completed")
if ( obj.countsInStats && !obj.status )
allDone = false;
});
summaryObjects.updateSummary();
return allDone;
},
resetQuestions: function ()
{
var questions = questionObjects.questions;
//Go through all questions and the answers to calculate score
questions.forEach(function (question)
{
question.passed = false;
question.status = null;
question.element.find(".answer.selected").removeClass('selected');
question.answers.forEach(function (answer)
{
answer.selected = false;
answer.passed = false;
});
});
},
restartButtonClicked: function ()
{
//Reset submitted questions
summaryObjects.resetQuestions();
//Navigate back to the first question to restart
var firstQuestion = questionObjects.questions[0];
var groupId = firstQuestion.element.closest(".group").attr("id");
allObjects.navigate("firstobject", groupId);
},
closeButtonClicked: function ()
{
//Invoke close frame button in parent if available
if ( summaryObjects.closeFrameElement ) {
summaryObjects.closeFrameElement.click();
}
},
testPassed: function ()
{
summaryObjects.checkAnswers();
if ( summaryObjects.answerCounter == summaryObjects.correctCount ) {
return true
} else {
return false
}
},
isNullOrEmpty: function (str)
{
return (str == null || str.trim() == "");
},
parseNumber: function (valueString, defaultValue)
{
if (isNaN(parseInt(valueString)))
return defaultValue;
else
return parseInt(valueString);
},
};