Merge "Add semantic tags to license info text"
[lhc/web/wiklou.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 protected $mUseEditFont = false;
9
10 /**
11 * @param array $params
12 * - cols, rows: textarea size
13 * - placeholder/placeholder-message: set HTML placeholder attribute
14 * - spellcheck: set HTML spellcheck attribute
15 * - useeditfont: add CSS classes to use the same font as the wikitext editor
16 */
17 public function __construct( $params ) {
18 parent::__construct( $params );
19
20 if ( isset( $params['placeholder-message'] ) ) {
21 $this->mPlaceholder = $this->getMessage( $params['placeholder-message'] )->text();
22 } elseif ( isset( $params['placeholder'] ) ) {
23 $this->mPlaceholder = $params['placeholder'];
24 }
25
26 if ( isset( $params['useeditfont'] ) ) {
27 $this->mUseEditFont = $params['useeditfont'];
28 }
29 }
30
31 public function getCols() {
32 return isset( $this->mParams['cols'] ) ? $this->mParams['cols'] : static::DEFAULT_COLS;
33 }
34
35 public function getRows() {
36 return isset( $this->mParams['rows'] ) ? $this->mParams['rows'] : static::DEFAULT_ROWS;
37 }
38
39 public function getSpellCheck() {
40 $val = isset( $this->mParams['spellcheck'] ) ? $this->mParams['spellcheck'] : null;
41 if ( is_bool( $val ) ) {
42 // "spellcheck" attribute literally requires "true" or "false" to work.
43 return $val === true ? 'true' : 'false';
44 }
45 return null;
46 }
47
48 public function getInputHTML( $value ) {
49 $classes = [];
50
51 $attribs = [
52 'id' => $this->mID,
53 'cols' => $this->getCols(),
54 'rows' => $this->getRows(),
55 'spellcheck' => $this->getSpellCheck(),
56 ] + $this->getTooltipAndAccessKey();
57
58 if ( $this->mClass !== '' ) {
59 array_push( $classes, $this->mClass );
60 }
61 if ( $this->mUseEditFont ) {
62 // The following classes can be used here:
63 // * mw-editfont-monospace
64 // * mw-editfont-sans-serif
65 // * mw-editfont-serif
66 array_push(
67 $classes,
68 'mw-editfont-' . $this->mParent->getUser()->getOption( 'editfont' )
69 );
70 $this->mParent->getOutput()->addModuleStyles( 'mediawiki.editfont.styles' );
71 }
72 if ( $this->mPlaceholder !== '' ) {
73 $attribs['placeholder'] = $this->mPlaceholder;
74 }
75 if ( count( $classes ) ) {
76 $attribs['class'] = implode( ' ', $classes );
77 }
78
79 $allowedParams = [
80 'tabindex',
81 'disabled',
82 'readonly',
83 'required',
84 'autofocus'
85 ];
86
87 $attribs += $this->getAttributes( $allowedParams );
88 return Html::textarea( $this->mName, $value, $attribs );
89 }
90
91 function getInputOOUI( $value ) {
92 $classes = [];
93
94 if ( isset( $this->mParams['cols'] ) ) {
95 throw new Exception( "OOUIHTMLForm does not support the 'cols' parameter for textareas" );
96 }
97
98 $attribs = $this->getTooltipAndAccessKeyOOUI();
99
100 if ( $this->mClass !== '' ) {
101 array_push( $classes, $this->mClass );
102 }
103 if ( $this->mUseEditFont ) {
104 // The following classes can be used here:
105 // * mw-editfont-monospace
106 // * mw-editfont-sans-serif
107 // * mw-editfont-serif
108 array_push(
109 $classes,
110 'mw-editfont-' . $this->mParent->getUser()->getOption( 'editfont' )
111 );
112 $this->mParent->getOutput()->addModuleStyles( 'mediawiki.editfont.styles' );
113 }
114 if ( $this->mPlaceholder !== '' ) {
115 $attribs['placeholder'] = $this->mPlaceholder;
116 }
117 if ( count( $classes ) ) {
118 $attribs['classes'] = $classes;
119 }
120
121 $allowedParams = [
122 'tabindex',
123 'disabled',
124 'readonly',
125 'required',
126 'autofocus',
127 ];
128
129 $attribs += OOUI\Element::configFromHtmlAttributes(
130 $this->getAttributes( $allowedParams )
131 );
132
133 return new OOUI\MultilineTextInputWidget( [
134 'id' => $this->mID,
135 'name' => $this->mName,
136 'value' => $value,
137 'rows' => $this->getRows(),
138 ] + $attribs );
139 }
140 }