eXeLearning: QuizTestIdevice SCORM page built-in javasript

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