Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 51 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
MathTestInputForm | |
0.00% |
0 / 51 |
|
0.00% |
0 / 3 |
182 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 19 |
|
0.00% |
0 / 1 |
2 | |||
addOptions | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
42 | |||
processInput | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
42 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\Math\Widget; |
4 | |
5 | use MediaWiki\Extension\Math\MathConfig; |
6 | use MediaWiki\Extension\Math\Render\RendererFactory; |
7 | use MediaWiki\Extension\Math\SpecialMathStatus; |
8 | use MediaWiki\HTMLForm\OOUIHTMLForm; |
9 | |
10 | class MathTestInputForm extends OOUIHTMLForm { |
11 | |
12 | private SpecialMathStatus $specialPage; |
13 | private array $modes; |
14 | private RendererFactory $rendererFactory; |
15 | |
16 | public function __construct( SpecialMathStatus $specialPage, array $modes, RendererFactory $rendererFactory ) { |
17 | $this->specialPage = $specialPage; |
18 | $this->modes = $modes; |
19 | $this->rendererFactory = $rendererFactory; |
20 | $formDescriptor = [ |
21 | 'tex' => [ |
22 | 'type' => 'text' |
23 | ], |
24 | 'type' => [ |
25 | 'type' => 'radio', |
26 | 'options' => [ 'tex', 'chem' ] |
27 | ], |
28 | 'display' => [ |
29 | 'type' => 'radio', |
30 | 'options' => [ 'default', 'inline', 'block' ] |
31 | ] |
32 | ]; |
33 | $this->addOptions( $formDescriptor ); |
34 | parent::__construct( $formDescriptor, $specialPage->getContext() ); |
35 | $this->setSubmitCallback( [ $this, 'processInput' ] ); |
36 | } |
37 | |
38 | private function addOptions( array &$form ): void { |
39 | static $elements = [ 'label', 'help' ]; |
40 | static $optionLabelPrefix = [ |
41 | 'display' => 'math-visualeditor-mwlatexinspector-display-', |
42 | 'type' => 'math-form-type-' |
43 | ]; |
44 | foreach ( $form as $key => $control ) { |
45 | foreach ( $elements as $element ) { |
46 | $msg = "math-form-$key-$element"; |
47 | if ( wfMessage( $msg )->exists() ) { |
48 | $form[$key]["$element-message"] = $msg; |
49 | } |
50 | } |
51 | if ( isset( $control[ 'options' ] ) ) { |
52 | $options = []; |
53 | foreach ( $control['options'] as $value ) { |
54 | // Messages that can be used here: |
55 | // * math-form-type-tex |
56 | // * math-form-type-chem |
57 | $txt = wfMessage( $optionLabelPrefix[$key] . $value )->parse(); |
58 | $options[$txt] = $value; |
59 | } |
60 | $form[$key]['options'] = $options; |
61 | } |
62 | } |
63 | } |
64 | |
65 | public function processInput( $formData ) { |
66 | $out = $this->specialPage->getOutput(); |
67 | foreach ( $this->modes as $mode => $modeName ) { |
68 | $out->wrapWikiMsg( '=== $1 ===', $modeName ); |
69 | $out->addWikiMsgArray( 'math-test-start', [ $modeName ] ); |
70 | |
71 | $options = [ |
72 | 'type' => $formData['type'] |
73 | ]; |
74 | if ( $formData['display'] !== 'default' ) { |
75 | $options['display'] = $formData['display']; |
76 | } |
77 | $renderer = $this->rendererFactory->getRenderer( $formData['tex'], $options, $mode ); |
78 | if ( ( $mode === MathConfig::MODE_SOURCE || $renderer->checkTeX() ) |
79 | && $renderer->render() ) { |
80 | $html = $renderer->getHtmlOutput(); |
81 | } else { |
82 | $html = $renderer->getLastError(); |
83 | } |
84 | $out->addHTML( $html ); |
85 | $out->addWikiMsgArray( 'math-test-end', [ $modeName ] ); |
86 | |
87 | } |
88 | } |
89 | } |