mediawiki: hotfix InputWidget.php so prefs work. (initial copy)

Signed-off-by: Kevin Fenzi <kevin@scrye.com>
This commit is contained in:
Kevin Fenzi 2019-06-28 01:15:44 +00:00
parent f48e0a9543
commit 842b87353c

View file

@ -0,0 +1,172 @@
<?php
namespace OOUI;
require "/usr/share/php/OOUI/mixins/AccessKeyedElement.php";
/**
* Base class for input widgets.
*
* @abstract
*/
class InputWidget extends Widget {
use FlaggedElement;
use TabIndexedElement;
use TitledElement;
use AccessKeyedElement;
/* Properties */
/**
* Input element.
*
* @var Tag
*/
protected $input;
/**
* Input value.
*
* @var string
*/
protected $value = '';
/**
* @param array $config Configuration options
* @param string $config['name'] HTML input name (default: '')
* @param string $config['value'] Input value (default: '')
* @param string $config['dir'] The directionality of the input (ltr/rtl)
* @param string $config['inputId'] The value of the inputs HTML `id` attribute.
* @param-taint $config escapes_html
*/
public function __construct( array $config = [] ) {
// Parent constructor
parent::__construct( $config );
// Properties
$this->input = $this->getInputElement( $config );
// Traits
$this->initializeFlaggedElement( array_merge( $config, [ 'flagged' => $this ] ) );
$this->initializeTabIndexedElement(
array_merge( $config, [ 'tabIndexed' => $this->input ] ) );
$this->initializeTitledElement(
array_merge( $config, [ 'titled' => $this->input ] ) );
$this->initializeAccessKeyedElement(
array_merge( $config, [ 'accessKeyed' => $this->input ] ) );
// Initialization
if ( isset( $config['name'] ) ) {
$this->input->setAttributes( [ 'name' => $config['name'] ] );
}
if ( $this->isDisabled() ) {
$this->input->setAttributes( [ 'disabled' => 'disabled' ] );
}
$this
->addClasses( [ 'oo-ui-inputWidget' ] )
->appendContent( $this->input );
$this->input->addClasses( [ 'oo-ui-inputWidget-input' ] );
$this->setValue( $config['value'] ?? null );
if ( isset( $config['dir'] ) ) {
$this->setDir( $config['dir'] );
}
if ( isset( $config['inputId'] ) ) {
$this->setInputId( $config['inputId'] );
}
}
/**
* Get input element.
*
* @param array $config Configuration options
* @return Tag Input element
*/
protected function getInputElement( $config ) {
return new Tag( 'input' );
}
/**
* Get the value of the input.
*
* @return string Input value
*/
public function getValue() {
return $this->value;
}
/**
* Set the directionality of the input.
*
* @param string $dir Text directionality: 'ltr', 'rtl' or 'auto'
* @return $this
*/
public function setDir( $dir ) {
$this->input->setAttributes( [ 'dir' => $dir ] );
return $this;
}
/**
* Set the value of the input.
*
* @param string $value New value
* @return $this
*/
public function setValue( $value ) {
$this->value = $this->cleanUpValue( $value );
$this->input->setValue( $this->value );
return $this;
}
/**
* Clean up incoming value.
*
* Ensures value is a string, and converts null to empty string.
*
* @param string $value Original value
* @return string Cleaned up value
*/
protected function cleanUpValue( $value ) {
if ( $value === null ) {
return '';
} else {
return (string)$value;
}
}
public function setDisabled( $state ) {
parent::setDisabled( $state );
if ( isset( $this->input ) ) {
if ( $this->isDisabled() ) {
$this->input->setAttributes( [ 'disabled' => 'disabled' ] );
} else {
$this->input->removeAttributes( [ 'disabled' ] );
}
}
return $this;
}
/**
* Set the 'id' attribute of the `<input>` element.
*
* @param string $id The ID of the input element
* @return $this
*/
public function setInputId( $id ) {
$this->input->setAttributes( [ 'id' => $id ] );
return $this;
}
public function getConfig( &$config ) {
$name = $this->input->getAttribute( 'name' );
if ( $name !== null ) {
$config['name'] = $name;
}
if ( $this->value !== '' ) {
$config['value'] = $this->value;
}
$id = $this->input->getAttribute( 'id' );
if ( $id !== null ) {
$config['inputId'] = $id;
}
return parent::getConfig( $config );
}
}