3 class HTMLTextField
extends HTMLFormField
{
4 protected $mPlaceholder = '';
8 * - type: HTML textfield type
9 * - size: field size in characters (defaults to 45)
10 * - placeholder/placeholder-message: set HTML placeholder attribute
11 * - spellcheck: set HTML spellcheck attribute
12 * - persistent: upon unsuccessful requests, retain the value (defaults to true, except
13 * for password fields)
15 public function __construct( $params ) {
16 parent
::__construct( $params );
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'];
26 return isset( $this->mParams
['size'] ) ?
$this->mParams
['size'] : 45;
29 function getSpellCheck() {
30 $val = isset( $this->mParams
['spellcheck'] ) ?
$this->mParams
['spellcheck'] : null;
31 if ( is_bool( $val ) ) {
32 // "spellcheck" attribute literally requires "true" or "false" to work.
33 return $val === true ?
'true' : 'false';
38 function getInputHTML( $value ) {
41 'name' => $this->mName
,
42 'size' => $this->getSize(),
45 'spellcheck' => $this->getSpellCheck(),
46 ] +
$this->getTooltipAndAccessKey() +
$this->getDataAttribs();
48 if ( $this->mClass
!== '' ) {
49 $attribs['class'] = $this->mClass
;
51 if ( $this->mPlaceholder
!== '' ) {
52 $attribs['placeholder'] = $this->mPlaceholder
;
55 # @todo Enforce pattern, step, required, readonly on the server side as
74 $attribs +
= $this->getAttributes( $allowedParams );
77 $type = $this->getType( $attribs );
78 return Html
::input( $this->mName
, $value, $type, $attribs );
81 protected function getType( &$attribs ) {
82 $type = isset( $attribs['type'] ) ?
$attribs['type'] : 'text';
83 unset( $attribs['type'] );
85 # Implement tiny differences between some field variants
86 # here, rather than creating a new class for each one which
87 # is essentially just a clone of this one.
88 if ( isset( $this->mParams
['type'] ) ) {
89 switch ( $this->mParams
['type'] ) {
95 $attribs['step'] = 'any';
102 $type = $this->mParams
['type'];
110 function getInputOOUI( $value ) {
111 $attribs = $this->getTooltipAndAccessKey();
113 if ( $this->mClass
!== '' ) {
114 $attribs['classes'] = [ $this->mClass
];
116 if ( $this->mPlaceholder
!== '' ) {
117 $attribs['placeholder'] = $this->mPlaceholder
;
120 # @todo Enforce pattern, step, required, readonly on the server side as
135 $attribs +
= OOUI\Element
::configFromHtmlAttributes(
136 $this->getAttributes( $allowedParams )
139 $type = $this->getType( $attribs );
141 return $this->getInputWidget( [
143 'name' => $this->mName
,
149 protected function getInputWidget( $params ) {
150 return new OOUI\
TextInputWidget( $params );
154 * Returns an array of data-* attributes to add to the field.
158 protected function getDataAttribs() {