]> scripts.mit.edu Git - autoinstalls/mediawiki.git/blob - includes/htmlform/fields/HTMLTextAreaField.php
MediaWiki 1.30.2
[autoinstalls/mediawiki.git] / includes / htmlform / fields / HTMLTextAreaField.php
1 <?php
2
3 class HTMLTextAreaField extends HTMLFormField {
4         const DEFAULT_COLS = 80;
5         const DEFAULT_ROWS = 25;
6
7         protected $mPlaceholder = '';
8
9         /**
10          * @param array $params
11          *   - cols, rows: textarea size
12          *   - placeholder/placeholder-message: set HTML placeholder attribute
13          *   - spellcheck: set HTML spellcheck attribute
14          */
15         public function __construct( $params ) {
16                 parent::__construct( $params );
17
18                 if ( isset( $params['placeholder-message'] ) ) {
19                         $this->mPlaceholder = $this->getMessage( $params['placeholder-message'] )->parse();
20                 } elseif ( isset( $params['placeholder'] ) ) {
21                         $this->mPlaceholder = $params['placeholder'];
22                 }
23         }
24
25         public function getCols() {
26                 return isset( $this->mParams['cols'] ) ? $this->mParams['cols'] : static::DEFAULT_COLS;
27         }
28
29         public function getRows() {
30                 return isset( $this->mParams['rows'] ) ? $this->mParams['rows'] : static::DEFAULT_ROWS;
31         }
32
33         public function getSpellCheck() {
34                 $val = isset( $this->mParams['spellcheck'] ) ? $this->mParams['spellcheck'] : null;
35                 if ( is_bool( $val ) ) {
36                         // "spellcheck" attribute literally requires "true" or "false" to work.
37                         return $val === true ? 'true' : 'false';
38                 }
39                 return null;
40         }
41
42         public function getInputHTML( $value ) {
43                 $attribs = [
44                                 'id' => $this->mID,
45                                 'cols' => $this->getCols(),
46                                 'rows' => $this->getRows(),
47                                 'spellcheck' => $this->getSpellCheck(),
48                         ] + $this->getTooltipAndAccessKey();
49
50                 if ( $this->mClass !== '' ) {
51                         $attribs['class'] = $this->mClass;
52                 }
53                 if ( $this->mPlaceholder !== '' ) {
54                         $attribs['placeholder'] = $this->mPlaceholder;
55                 }
56
57                 $allowedParams = [
58                         'tabindex',
59                         'disabled',
60                         'readonly',
61                         'required',
62                         'autofocus'
63                 ];
64
65                 $attribs += $this->getAttributes( $allowedParams );
66                 return Html::textarea( $this->mName, $value, $attribs );
67         }
68
69         function getInputOOUI( $value ) {
70                 if ( isset( $this->mParams['cols'] ) ) {
71                         throw new Exception( "OOUIHTMLForm does not support the 'cols' parameter for textareas" );
72                 }
73
74                 $attribs = $this->getTooltipAndAccessKeyOOUI();
75
76                 if ( $this->mClass !== '' ) {
77                         $attribs['classes'] = [ $this->mClass ];
78                 }
79                 if ( $this->mPlaceholder !== '' ) {
80                         $attribs['placeholder'] = $this->mPlaceholder;
81                 }
82
83                 $allowedParams = [
84                         'tabindex',
85                         'disabled',
86                         'readonly',
87                         'required',
88                         'autofocus',
89                 ];
90
91                 $attribs += OOUI\Element::configFromHtmlAttributes(
92                         $this->getAttributes( $allowedParams )
93                 );
94
95                 return new OOUI\TextInputWidget( [
96                         'id' => $this->mID,
97                         'name' => $this->mName,
98                         'multiline' => true,
99                         'value' => $value,
100                         'rows' => $this->getRows(),
101                 ] + $attribs );
102         }
103 }