Crisbal has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/339941 )

Change subject: Generate questions HTML via TemplateParser
......................................................................

Generate questions HTML via TemplateParser

This commit will move the generation of the Quiz's questions HTML to 
TemplateParser. Some work is still needed
here, especially it would be good to have CSS classes for the table style 
instead of inline CSS. I also added
some comments here and there especially for an unknown and undocumented feature.

Still to port to TemplateParser: Settings table, answers.
Bug: T152293

Change-Id: I557803731645f925db43166ae0d90eb1db8bdea8
---
M Quiz.class.php
A templates/Question.mustache
2 files changed, 76 insertions(+), 31 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Quiz 
refs/changes/41/339941/1

diff --git a/Quiz.class.php b/Quiz.class.php
index ff2fa0a..ea3988d 100755
--- a/Quiz.class.php
+++ b/Quiz.class.php
@@ -247,6 +247,7 @@
                        -1,
                        PREG_SPLIT_NO_EMPTY
                );
+
                $output = '';
                $questionPattern = '`(.*?[^|\}])\}[ \t]*(\n(.*)|$)`s';
                foreach ( $unparsedQuestions as $unparsedQuestion ) {
@@ -288,8 +289,18 @@
                        $this->mParser
                );
                Hooks::run( 'QuizQuestionCreated', array( $this, &$question ) );
-               $buffer = $question->parseHeader( $matches[1] );
-               if ( !array_key_exists( 3, $matches ) || trim( $matches[3] ) == 
'' ) {
+
+               // gets the question text
+               $questionText = $question->parseHeader( $matches[1] );
+
+               /*
+                       What is this block of code?
+                       The only place X !X and /X are spoken about is here
+                       https://en.wikiversity.org/wiki/Help:Quiz
+                       "A few exotic features are not yet covered, such as 
shuffle control using {X} {!X} {/X} tags."
+                       These were added in commit fb53a3b0 back in 2007, 
without any explanation and/or documentation. The commit message is actually 
unrelated.
+               */
+               if ( !array_key_exists(3, $matches ) || trim( $matches[3] ) == 
'' ) {
                        switch ( $matches[1] ) {
                                case 'X':
                                        $this->mShuffleDiv++;
@@ -313,62 +324,85 @@
                                        break;
                        }
                }
-               $output  = '<div class="question">' . "\n";
-               $output .= '<div class="header">' . "\n";
-               $output .= '<span class="questionId">' . ++$this->mQuestionId . 
'. </span>' . $buffer;
-               $output .= '</div>' . "\n";
 
-               // Store the parsed object into a buffer to determine some 
parameters before outputing it.
-               $buffer = call_user_func( array(
-                       $question,
-                       $question->mType . 'ParseObject'
-               ), $matches[3]);
-               $output .= '<table class="object" ';
-               $lState = $question->getState();
-               // Determine the side border color, title, score and the total 
of the question.
-               if ( $lState != '' ) {
+               $templateParser = new TemplateParser(  __DIR__ . '/templates' );
+
+               $this->mQuestionId++;
+
+               //this will generate the answers HTML code
+               $answers = call_user_func(
+                       array($question, $question->mType . 'ParseObject'),
+                       $matches[3]
+               );
+
+               $lState = $question->getState(); // right wrong or unanswered?
+               
+               if($lState != '') {
+                       // TODO: convert to CSS classes
                        global $wgContLang;
                        $border = $wgContLang->isRTL() ? 'border-right' : 
'border-left';
-                       $output .= 'style="' . $border . ':3px solid ' . 
self::getColor( $lState ) . '"';
+                       $tableStyle = $border . ': 3px solid ' . 
self::getColor( $lState ) . ';';
+
+                       $tableTitle = "";
+
+                       // if the question is of type=simple
                        if ( $this->mIgnoringCoef ) {
                                $question->mCoef = 1;
                        }
-
                        switch ( $lState ) {
                                case 'right':
                                        $this->mTotal += $this->mAddedPoints * 
$question->mCoef;
                                        $this->mScore += $this->mAddedPoints * 
$question->mCoef;
-                                       $output .= 'title="' . wfMessage(
+
+                                       $tableTitle = wfMessage(
                                                'quiz_points',
-                                               wfMessage( 'quiz_colorRight' 
)->text(),
+                                               wfMessage('quiz_colorRight' 
)->text(),
                                                $this->mAddedPoints * 
$question->mCoef
-                                       )->escaped() . '"';
+                                       )->escaped();
                                        break;
+
                                case 'wrong':
                                        $this->mTotal += $this->mAddedPoints * 
$question->mCoef;
                                        $this->mScore -= $this->mCutoffPoints * 
$question->mCoef;
-                                       $output .= 'title="' . wfMessage(
+                                       
+                                       $tableTitle= wfMessage(
                                                'quiz_points',
-                                               wfMessage( 'quiz_colorWrong' 
)->text(),
+                                               
wfMessage('quiz_colorWrong')->text(),
                                                -$this->mCutoffPoints * 
$question->mCoef
-                                       )->escaped() . '"';
+                                       )->escaped();
                                        break;
+
                                case 'NA':
                                        $this->mTotal += $this->mAddedPoints * 
$question->mCoef;
-                                       $output .= 'title="' . wfMessage(
+
+                                       $tableTitle = wfMessage(
                                                'quiz_points',
-                                               wfMessage( 'quiz_colorNA' 
)->text(), 0
-                                       )->escaped() . '"';
+                                               
wfMessage('quiz_colorNA')->text(),
+                                               0
+                                       )->escaped();
                                        break;
+
                                case 'error':
                                        $this->mState = 'error';
                                        break;
                        }
+
+                       $stateObject = array(
+                               'tableStyle' => $tableStyle,
+                               'tableTitle' => $tableTitle
+                       );
                }
-               $output .= '><tbody>' . "\n";
-               $output .= $buffer;
-               $output .= '</tbody></table>' . "\n";
-               $output .= '<br /></div>' . "\n";
-               return $output;
+
+               return $templateParser->processTemplate(
+                       'Question',
+                       array(
+                               'question' => array(
+                                       'id' => $this->mQuestionId,
+                                       'text' => $questionText,
+                                       'answers' => $answers
+                               ),
+                               'state' => $stateObject
+                       )
+               );
        }
 }
diff --git a/templates/Question.mustache b/templates/Question.mustache
new file mode 100644
index 0000000..14ffebb
--- /dev/null
+++ b/templates/Question.mustache
@@ -0,0 +1,11 @@
+<div class="question">
+       <div class="header">
+               <span class="questionId">{{ question.id }}</span>
+               <span class="questionText">{{ question.text }}</span>
+       </div>
+       <table class="object" style="{{ state.tableStyle }}" title="{{ 
state.tableTitle }}">
+               <tbody>
+                       {{{ question.answers }}}
+               </tbody>
+       </table>
+</div>
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/339941
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I557803731645f925db43166ae0d90eb1db8bdea8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Quiz
Gerrit-Branch: master
Gerrit-Owner: Crisbal <bld.cris...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to