X-Git-Url: http://git.cyclocoop.org/?a=blobdiff_plain;f=includes%2Fhtmlform%2Ffields%2FHTMLSelectAndOtherField.php;h=354432bb28c3bc1bd2e982dbdec5e1f47c2420c0;hb=d3a30a3c58dfa795f4d236f23a99b64d094e6337;hp=cdb8f5b909603bce4b80c717cf6244252d73fd6b;hpb=716814a5d501efcc99b09fbb7e26caaf9a395d26;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/htmlform/fields/HTMLSelectAndOtherField.php b/includes/htmlform/fields/HTMLSelectAndOtherField.php index cdb8f5b909..354432bb28 100644 --- a/includes/htmlform/fields/HTMLSelectAndOtherField.php +++ b/includes/htmlform/fields/HTMLSelectAndOtherField.php @@ -47,6 +47,10 @@ class HTMLSelectAndOtherField extends HTMLSelectField { $textAttribs['class'][] = $this->mClass; } + if ( isset( $this->mParams['maxlength-unit'] ) ) { + $textAttribs['data-mw-maxlength-unit'] = $this->mParams['maxlength-unit']; + } + $allowedParams = [ 'required', 'autofocus', @@ -54,6 +58,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField { 'disabled', 'tabindex', 'maxlength', // gets dynamic with javascript, see mediawiki.htmlform.js + 'maxlength-unit', // 'bytes' or 'codepoints', see mediawiki.htmlform.js ]; $textAttribs += $this->getAttributes( $allowedParams ); @@ -73,9 +78,6 @@ class HTMLSelectAndOtherField extends HTMLSelectField { # TextInput $textAttribs = [ 'name' => $this->mName . '-other', - 'size' => $this->getSize(), - 'class' => [ 'mw-htmlform-select-and-other-field' ], - 'data-id-select' => $this->mID . '-select', 'value' => $value[2], ]; @@ -117,11 +119,22 @@ class HTMLSelectAndOtherField extends HTMLSelectField { $dropdownInputAttribs['classes'] = [ $this->mClass ]; } + $disabled = false; + if ( isset( $this->mParams[ 'disabled' ] ) && $this->mParams[ 'disabled' ] ) { + $disabled = true; + } + return $this->getInputWidget( [ 'id' => $this->mID, + 'disabled' => $disabled, 'textinput' => $textAttribs, 'dropdowninput' => $dropdownInputAttribs, 'or' => false, + 'required' => $this->mParams[ 'required' ] ?? false, + 'classes' => [ 'mw-htmlform-select-and-other-field' ], + 'data' => [ + 'maxlengthUnit' => $this->mParams['maxlength-unit'] ?? 'bytes' + ], ] ); } @@ -129,10 +142,39 @@ class HTMLSelectAndOtherField extends HTMLSelectField { return new MediaWiki\Widget\SelectWithInputWidget( $params ); } + /** + * @inheritDoc + */ + public function getDefault() { + $default = parent::getDefault(); + + // Default values of empty form + $final = ''; + $list = 'other'; + $text = ''; + + if ( $default !== null ) { + $final = $default; + // Assume the default is a text value, with the 'other' option selected. + // Then check if that assumption is correct, and update $list and $text if not. + $text = $final; + foreach ( $this->mFlatOptions as $option ) { + $match = $option . $this->msg( 'colon-separator' )->inContentLanguage()->text(); + if ( strpos( $final, $match ) === 0 ) { + $list = $option; + $text = substr( $final, strlen( $match ) ); + break; + } + } + } + + return [ $final, $list, $text ]; + } + /** * @param WebRequest $request * - * @return array("","",""] */ public function loadDataFromRequest( $request ) { if ( $request->getCheck( $this->mName ) ) { @@ -151,26 +193,13 @@ class HTMLSelectAndOtherField extends HTMLSelectField { } else { $final = $list . $this->msg( 'colon-separator' )->inContentLanguage()->text() . $text; } - } else { - $final = $this->getDefault(); - - $list = 'other'; - $text = $final; - foreach ( $this->mFlatOptions as $option ) { - $match = $option . $this->msg( 'colon-separator' )->inContentLanguage()->text(); - if ( strpos( $text, $match ) === 0 ) { - $list = $option; - $text = substr( $text, strlen( $match ) ); - break; - } - } + return [ $final, $list, $text ]; } - - return [ $final, $list, $text ]; + return $this->getDefault(); } public function getSize() { - return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 45; + return $this->mParams['size'] ?? 45; } public function validate( $value, $alldata ) { @@ -185,7 +214,7 @@ class HTMLSelectAndOtherField extends HTMLSelectField { if ( isset( $this->mParams['required'] ) && $this->mParams['required'] !== false - && $value[1] === '' + && $value[0] === '' ) { return $this->msg( 'htmlform-required' ); }