Trabla: QuizTestIdevice SCORM page built-in javasript - where it is generated?
Example of SCORM page:
<div class="QuizTestIdevice" id="id39">
<script type="text/javascript">
<!-- //<![CDATA[
var numQuestions = 1;
var rawScore = 0;
var actualScore = 0;
var question0;
var key0 = 1;
function getAnswer()
{
doLMSSetValue("cmi.interactions.0.id","key0b39");
doLMSSetValue("cmi.interactions.0.type","choice");
doLMSSetValue("cmi.interactions.0.correct_responses.0.pattern",
"1");
for (var i=0; i < 3; i++)
{
if (document.getElementById("quizForm39").key0b39[i].checked)
{
question0 = document.getElementById("quizForm39").key0b39[i].value;
doLMSSetValue("cmi.interactions.0.student_response",question0);
break;
}
}
}
function calcRawScore(){
if (question0 == key0)
{
doLMSSetValue("cmi.interactions.0.result","correct");
rawScore++;
}
else
{
doLMSSetValue("cmi.interactions.0.result","wrong");
}
}
function calcScore2()
{
computeTime(); // the student has stopped here.
document.getElementById("quizForm39").submitB.disabled = true;
getAnswer();
calcRawScore();
actualScore = Math.round(rawScore / numQuestions * 100);
alert("Your score is " + actualScore + "%")
doLMSSetValue( "cmi.core.score.raw", actualScore+"" );
doLMSSetValue( "cmi.core.score.max", "100" );
var mode = doLMSGetValue( "cmi.core.lesson_mode" );
if ( mode != "review" && mode != "browse" ){
if ( actualScore < 100 )
{
doLMSSetValue( "cmi.core.lesson_status", "failed" );
}
else
{
doLMSSetValue( "cmi.core.lesson_status", "passed" );
}
doLMSSetValue( "cmi.core.exit", "" );
}
exitPageStatus = true;
doLMSCommit();
doLMSFinish();
}
//]]> -->
</script>
Solving:
This javascript is generated in class QuizTestBlock method renderJavascriptForScorm(self)
Sources location:
/src/exe/webui/quiztestblock.py
def renderJavascriptForScorm(self):
"""
Return an XHTML string for generating the javascript for scorm export
"""
scriptStr = '<script type="text/javascript">\n'
scriptStr += '<!-- //<![CDATA[\n'
scriptStr += "var numQuestions = "
scriptStr += unicode(len(self.questionElements))+";\n"
scriptStr += "var rawScore = 0;\n"
scriptStr += "var actualScore = 0;\n"
answerStr = """function getAnswer()
{"""
varStrs = ""
keyStrs = ""
answers = ""
rawScoreStr = """}
function calcRawScore(){\n"""
for element in self.questionElements:
i = element.index
varStr = "question" + unicode(i)
keyStr = "key" + unicode(i)
quesId = "key" + unicode(element.index) + "b" + self.id
numOption = element.getNumOption()
answers += "var key" + unicode(i) + " = "
answers += unicode(element.question.correctAns) + ";\n"
getEle = 'document.getElementById("quizForm%s")' % \
self.idevice.id
chk = '%s.%s[i].checked'% (getEle, quesId)
value = '%s.%s[i].value' % (getEle, quesId)
varStrs += "var " + varStr + ";\n"
keyStrs += "var key" + unicode(i)+ " = "
keyStrs += unicode(element.question.correctAns) + ";\n"
answerStr += """
doLMSSetValue("cmi.interactions.%s.id","%s");
doLMSSetValue("cmi.interactions.%s.type","choice");
doLMSSetValue("cmi.interactions.%s.correct_responses.0.pattern",
"%s");
""" % (unicode(i), quesId, unicode(i), unicode(i),
element.question.correctAns)
answerStr += """
for (var i=0; i < %s; i++)
{
if (%s)
{
%s = %s;
doLMSSetValue("cmi.interactions.%s.student_response",%s);
break;
}
}
""" % (numOption, chk, varStr, value, unicode(i), varStr)
rawScoreStr += """
if (%s == %s)
{
doLMSSetValue("cmi.interactions.%s.result","correct");
rawScore++;
}
else
{
doLMSSetValue("cmi.interactions.%s.result","wrong");
}""" % (varStr, keyStr, unicode(i), unicode(i))
scriptStr += varStrs
scriptStr += keyStrs
scriptStr += answerStr
scriptStr += rawScoreStr
scriptStr += """
}
function calcScore2()
{
computeTime(); // the student has stopped here.
"""
scriptStr += """
document.getElementById("quizForm%s").submitB.disabled = true;
""" % (self.idevice.id)
scriptStr += """
getAnswer();
calcRawScore();
actualScore = Math.round(rawScore / numQuestions * 100);
"""
scriptStr += 'alert("Your score is " + actualScore + "%")'
scriptStr += """
doLMSSetValue( "cmi.core.score.raw", actualScore+"" );
doLMSSetValue( "cmi.core.score.max", "100" );
var mode = doLMSGetValue( "cmi.core.lesson_mode" );
if ( mode != "review" && mode != "browse" ){
if ( actualScore < %s )
{
doLMSSetValue( "cmi.core.lesson_status", "failed" );
}
else
{
doLMSSetValue( "cmi.core.lesson_status", "passed" );
}
doLMSSetValue( "cmi.core.exit", "" );
}
exitPageStatus = true;
doLMSCommit();
doLMSFinish();
}
//]]> -->
</script>\n""" % self.idevice.passRate
return scriptStr
No comments:
Post a Comment