Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 48 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
HTMLSelectField | |
0.00% |
0 / 47 |
|
0.00% |
0 / 5 |
240 | |
0.00% |
0 / 1 |
validate | |
0.00% |
0 / 7 |
|
0.00% |
0 / 1 |
12 | |||
getInputHTML | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
20 | |||
getInputOOUI | |
0.00% |
0 / 16 |
|
0.00% |
0 / 1 |
12 | |||
getInputCodex | |
0.00% |
0 / 12 |
|
0.00% |
0 / 1 |
20 | |||
shouldInfuseOOUI | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\HTMLForm\Field; |
4 | |
5 | use MediaWiki\HTMLForm\HTMLFormField; |
6 | use XmlSelect; |
7 | |
8 | /** |
9 | * A select dropdown field. Basically a wrapper for Xmlselect class |
10 | * |
11 | * @stable to extend |
12 | */ |
13 | class HTMLSelectField extends HTMLFormField { |
14 | |
15 | /** |
16 | * @inheritDoc |
17 | * @stable to override |
18 | */ |
19 | public function validate( $value, $alldata ) { |
20 | $p = parent::validate( $value, $alldata ); |
21 | |
22 | if ( $p !== true ) { |
23 | return $p; |
24 | } |
25 | |
26 | $validOptions = HTMLFormField::flattenOptions( $this->getOptions() ); |
27 | |
28 | if ( in_array( strval( $value ), $validOptions, true ) ) { |
29 | return true; |
30 | } else { |
31 | return $this->msg( 'htmlform-select-badoption' ); |
32 | } |
33 | } |
34 | |
35 | /** |
36 | * @inheritDoc |
37 | * @stable to override |
38 | */ |
39 | public function getInputHTML( $value ) { |
40 | $select = new XmlSelect( $this->mName, $this->mID, strval( $value ) ); |
41 | |
42 | if ( !empty( $this->mParams['disabled'] ) ) { |
43 | $select->setAttribute( 'disabled', 'disabled' ); |
44 | } |
45 | |
46 | $allowedParams = [ 'tabindex', 'size' ]; |
47 | $customParams = $this->getAttributes( $allowedParams ); |
48 | foreach ( $customParams as $name => $value ) { |
49 | $select->setAttribute( $name, $value ); |
50 | } |
51 | |
52 | if ( $this->mClass !== '' ) { |
53 | $select->setAttribute( 'class', $this->mClass ); |
54 | } |
55 | |
56 | $select->addOptions( $this->getOptions() ); |
57 | |
58 | return $select->getHTML(); |
59 | } |
60 | |
61 | /** |
62 | * @inheritDoc |
63 | * @stable to override |
64 | */ |
65 | public function getInputOOUI( $value ) { |
66 | $disabled = false; |
67 | $allowedParams = [ 'tabindex' ]; |
68 | $attribs = \OOUI\Element::configFromHtmlAttributes( |
69 | $this->getAttributes( $allowedParams ) |
70 | ); |
71 | |
72 | if ( $this->mClass !== '' ) { |
73 | $attribs['classes'] = [ $this->mClass ]; |
74 | } |
75 | |
76 | if ( !empty( $this->mParams['disabled'] ) ) { |
77 | $disabled = true; |
78 | } |
79 | |
80 | return new \OOUI\DropdownInputWidget( [ |
81 | 'name' => $this->mName, |
82 | 'id' => $this->mID, |
83 | 'options' => $this->getOptionsOOUI(), |
84 | 'value' => strval( $value ), |
85 | 'disabled' => $disabled, |
86 | ] + $attribs ); |
87 | } |
88 | |
89 | public function getInputCodex( $value, $hasErrors ) { |
90 | $select = new XmlSelect( $this->mName, $this->mID, strval( $value ) ); |
91 | |
92 | if ( !empty( $this->mParams['disabled'] ) ) { |
93 | $select->setAttribute( 'disabled', 'disabled' ); |
94 | } |
95 | |
96 | $allowedParams = [ 'tabindex', 'size' ]; |
97 | $customParams = $this->getAttributes( $allowedParams ); |
98 | foreach ( $customParams as $name => $value ) { |
99 | $select->setAttribute( $name, $value ); |
100 | } |
101 | |
102 | // TODO: Add support for error class once it's implemented in the Codex CSS-only Select. |
103 | $selectClass = 'cdx-select'; |
104 | $selectClass .= $this->mClass !== '' ? ' ' . $this->mClass : ''; |
105 | $select->setAttribute( 'class', $selectClass ); |
106 | |
107 | $select->addOptions( $this->getOptions() ); |
108 | |
109 | return $select->getHTML(); |
110 | } |
111 | |
112 | /** |
113 | * @inheritDoc |
114 | * @stable to override |
115 | */ |
116 | protected function shouldInfuseOOUI() { |
117 | return true; |
118 | } |
119 | } |
120 | |
121 | /** @deprecated class alias since 1.42 */ |
122 | class_alias( HTMLSelectField::class, 'HTMLSelectField' ); |