diff options
Diffstat (limited to 'www/wiki/includes/htmlform/fields/HTMLTextAreaField.php')
-rw-r--r-- | www/wiki/includes/htmlform/fields/HTMLTextAreaField.php | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/www/wiki/includes/htmlform/fields/HTMLTextAreaField.php b/www/wiki/includes/htmlform/fields/HTMLTextAreaField.php new file mode 100644 index 00000000..3370e4af --- /dev/null +++ b/www/wiki/includes/htmlform/fields/HTMLTextAreaField.php @@ -0,0 +1,140 @@ +<?php + +class HTMLTextAreaField extends HTMLFormField { + const DEFAULT_COLS = 80; + const DEFAULT_ROWS = 25; + + protected $mPlaceholder = ''; + protected $mUseEditFont = false; + + /** + * @param array $params + * - cols, rows: textarea size + * - placeholder/placeholder-message: set HTML placeholder attribute + * - spellcheck: set HTML spellcheck attribute + * - useeditfont: add CSS classes to use the same font as the wikitext editor + */ + public function __construct( $params ) { + parent::__construct( $params ); + + if ( isset( $params['placeholder-message'] ) ) { + $this->mPlaceholder = $this->getMessage( $params['placeholder-message'] )->text(); + } elseif ( isset( $params['placeholder'] ) ) { + $this->mPlaceholder = $params['placeholder']; + } + + if ( isset( $params['useeditfont'] ) ) { + $this->mUseEditFont = $params['useeditfont']; + } + } + + public function getCols() { + return isset( $this->mParams['cols'] ) ? $this->mParams['cols'] : static::DEFAULT_COLS; + } + + public function getRows() { + return isset( $this->mParams['rows'] ) ? $this->mParams['rows'] : static::DEFAULT_ROWS; + } + + public function getSpellCheck() { + $val = isset( $this->mParams['spellcheck'] ) ? $this->mParams['spellcheck'] : null; + if ( is_bool( $val ) ) { + // "spellcheck" attribute literally requires "true" or "false" to work. + return $val === true ? 'true' : 'false'; + } + return null; + } + + public function getInputHTML( $value ) { + $classes = []; + + $attribs = [ + 'id' => $this->mID, + 'cols' => $this->getCols(), + 'rows' => $this->getRows(), + 'spellcheck' => $this->getSpellCheck(), + ] + $this->getTooltipAndAccessKey(); + + if ( $this->mClass !== '' ) { + array_push( $classes, $this->mClass ); + } + if ( $this->mUseEditFont ) { + // The following classes can be used here: + // * mw-editfont-monospace + // * mw-editfont-sans-serif + // * mw-editfont-serif + array_push( + $classes, + 'mw-editfont-' . $this->mParent->getUser()->getOption( 'editfont' ) + ); + $this->mParent->getOutput()->addModuleStyles( 'mediawiki.editfont.styles' ); + } + if ( $this->mPlaceholder !== '' ) { + $attribs['placeholder'] = $this->mPlaceholder; + } + if ( count( $classes ) ) { + $attribs['class'] = implode( ' ', $classes ); + } + + $allowedParams = [ + 'tabindex', + 'disabled', + 'readonly', + 'required', + 'autofocus' + ]; + + $attribs += $this->getAttributes( $allowedParams ); + return Html::textarea( $this->mName, $value, $attribs ); + } + + function getInputOOUI( $value ) { + $classes = []; + + if ( isset( $this->mParams['cols'] ) ) { + throw new Exception( "OOUIHTMLForm does not support the 'cols' parameter for textareas" ); + } + + $attribs = $this->getTooltipAndAccessKeyOOUI(); + + if ( $this->mClass !== '' ) { + array_push( $classes, $this->mClass ); + } + if ( $this->mUseEditFont ) { + // The following classes can be used here: + // * mw-editfont-monospace + // * mw-editfont-sans-serif + // * mw-editfont-serif + array_push( + $classes, + 'mw-editfont-' . $this->mParent->getUser()->getOption( 'editfont' ) + ); + $this->mParent->getOutput()->addModuleStyles( 'mediawiki.editfont.styles' ); + } + if ( $this->mPlaceholder !== '' ) { + $attribs['placeholder'] = $this->mPlaceholder; + } + if ( count( $classes ) ) { + $attribs['classes'] = $classes; + } + + $allowedParams = [ + 'tabindex', + 'disabled', + 'readonly', + 'required', + 'autofocus', + ]; + + $attribs += OOUI\Element::configFromHtmlAttributes( + $this->getAttributes( $allowedParams ) + ); + + return new OOUI\MultilineTextInputWidget( [ + 'id' => $this->mID, + 'name' => $this->mName, + 'value' => $value, + 'rows' => $this->getRows(), + ] + $attribs ); + } +} |