original_string: public function countdown_timer(quiz_attempt $attemptobj, $timenow) {
  
          $timeleft = $attemptobj->get_time_left_display($timenow);
          if ($timeleft !== false) {
              $ispreview = $attemptobj->is_preview();
              $timerstartvalue = $timeleft;
              if (!$ispreview) {
                  // Make sure the timer starts just above zero. If $timeleft was <= 0, then
                  // this will just have the effect of causing the quiz to be submitted immediately.
                  $timerstartvalue = max($timerstartvalue, 1);
              }
              $this->initialise_timer($timerstartvalue, $ispreview);
          }
  
          return html_writer::tag('div', get_string('timeleft', 'quiz') . ' ' .
                  html_writer::tag('span', '', array('id' => 'quiz-time-left')),
                  array('id' => 'quiz-timer', 'role' => 'timer',
                      'aria-atomic' => 'true', 'aria-relevant' => 'text'));
      }
code: public function countdown_timer(quiz_attempt $attemptobj, $timenow) {
  
          $timeleft = $attemptobj->get_time_left_display($timenow);
          if ($timeleft !== false) {
              $ispreview = $attemptobj->is_preview();
              $timerstartvalue = $timeleft;
              if (!$ispreview) {
                  // Make sure the timer starts just above zero. If $timeleft was <= 0, then
                  // this will just have the effect of causing the quiz to be submitted immediately.
                  $timerstartvalue = max($timerstartvalue, 1);
              }
              $this->initialise_timer($timerstartvalue, $ispreview);
          }
  
          return html_writer::tag('div', get_string('timeleft', 'quiz') . ' ' .
                  html_writer::tag('span', '', array('id' => 'quiz-time-left')),
                  array('id' => 'quiz-timer', 'role' => 'timer',
                      'aria-atomic' => 'true', 'aria-relevant' => 'text'));
      }
code_tokens: public function countdown_timer ( quiz_attempt $ attemptobj , $ timenow ) { $ timeleft = $ attemptobj -> get_time_left_display ( $ timenow ) ; if ( $ timeleft !== false ) { $ ispreview = $ attemptobj -> is_preview ( ) ; $ timerstartvalue = $ timeleft ; if ( ! $ ispreview ) { // Make sure the timer starts just above zero. If $timeleft was <= 0, then // this will just have the effect of causing the quiz to be submitted immediately. $ timerstartvalue = max ( $ timerstartvalue , 1 ) ; } $ this -> initialise_timer ( $ timerstartvalue , $ ispreview ) ; } return html_writer :: tag ( 'div' , get_string ( 'timeleft' , 'quiz' ) . ' ' . html_writer :: tag ( 'span' , '' , array ( 'id' => 'quiz-time-left' ) ) , array ( 'id' => 'quiz-timer' , 'role' => 'timer' , 'aria-atomic' => 'true' , 'aria-relevant' => 'text' ) ) ; }
docstring: Return the HTML of the quiz timer.
  @return string HTML content.
docstring_tokens: Return the HTML of the quiz timer .