Completed
Branch master (d58858)
by
unknown
28:23
created

HTMLTextAreaField::__construct()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 9
Code Lines 6

Duplication

Lines 9
Ratio 100 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 9
loc 9
rs 9.6666
cc 3
eloc 6
nc 3
nop 1
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 View Code Duplication
	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
	function getCols() {
26
		return isset( $this->mParams['cols'] ) ? $this->mParams['cols'] : static::DEFAULT_COLS;
27
	}
28
29
	function getRows() {
30
		return isset( $this->mParams['rows'] ) ? $this->mParams['rows'] : static::DEFAULT_ROWS;
31
	}
32
33 View Code Duplication
	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
	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->getTooltipAndAccessKey();
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
}
104