From a7a90d3697603f8f5183d9ea408269c38c6400b5 Mon Sep 17 00:00:00 2001 From: Florian Date: Thu, 16 Jul 2015 19:59:59 +0200 Subject: [PATCH] HTMLForm: Handle HTMLFormFieldWithButton subclasses in OOUI forms MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Example usages in: * I47a8649208279a4090623a3088112fcff9abc4d3 (Special:Watchlist) * I2b3524e61efc618aa2b7484134bba562d5f9011c (Special:Export) Change-Id: I9050c4a09cbb841ad26ca01a25f706227e35e3be Co-Authored-By: Florian Co-Authored-By: Bartosz Dziewoński --- includes/htmlform/HTMLFormField.php | 17 +++++++++++++++-- includes/htmlform/HTMLFormFieldWithButton.php | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/includes/htmlform/HTMLFormField.php b/includes/htmlform/HTMLFormField.php index 21526c77a8..6f2971bdc1 100644 --- a/includes/htmlform/HTMLFormField.php +++ b/includes/htmlform/HTMLFormField.php @@ -582,13 +582,14 @@ abstract class HTMLFormField { $fieldType = get_class( $this ); $helpText = $this->getHelpText(); - $field = new OOUI\FieldLayout( $inputField, array( + $config = array( 'classes' => array( "mw-htmlform-field-$fieldType", $this->mClass, $errorClass ), 'align' => $this->getLabelAlignOOUI(), 'label' => $this->getLabel(), 'help' => $helpText !== null ? new OOUI\HtmlSnippet( $helpText ) : null, 'infusable' => $infusable, - ) ); + ); + $field = $this->getFieldLayoutOOUI( $inputField, $config ); return $field . $errors; } @@ -601,6 +602,18 @@ abstract class HTMLFormField { return 'top'; } + /** + * Get a FieldLayout (or subclass thereof) to wrap this field in when using OOUI output. + * @return OOUI\FieldLayout|OOUI\ActionFieldLayout + */ + protected function getFieldLayoutOOUI( $inputField, $config ) { + if ( isset( $this->mClassWithButton ) ) { + $buttonWidget = $this->mClassWithButton->getInputOOUI( '' ); + return new OOUI\ActionFieldLayout( $inputField, $buttonWidget, $config ); + } + return new OOUI\FieldLayout( $inputField, $config ); + } + /** * Get the complete raw fields for the input, including help text, * labels, and whatever. diff --git a/includes/htmlform/HTMLFormFieldWithButton.php b/includes/htmlform/HTMLFormFieldWithButton.php index 113bb4b937..6b02c49d43 100644 --- a/includes/htmlform/HTMLFormFieldWithButton.php +++ b/includes/htmlform/HTMLFormFieldWithButton.php @@ -18,6 +18,9 @@ class HTMLFormFieldWithButton extends HTMLFormField { /** @var string $mButtonType Value for the button in this field */ protected $mButtonValue; + /** @var string $mButtonType Value for the button in this field */ + protected $mButtonFlags = array( 'primary', 'progressive' ); + public function __construct( $info ) { if ( isset( $info['buttonclass'] ) ) { $this->mButtonClass = $info['buttonclass']; @@ -34,6 +37,9 @@ class HTMLFormFieldWithButton extends HTMLFormField { if ( isset( $info['buttontype'] ) ) { $this->mButtonType = $info['buttontype']; } + if ( isset( $info['buttonflags'] ) ) { + $this->mButtonFlags = $info['buttonflags']; + } parent::__construct( $info ); } @@ -46,6 +52,16 @@ class HTMLFormFieldWithButton extends HTMLFormField { return Html::input( $this->mButtonName, $this->mButtonValue, $this->mButtonType, $attr ); } + public function getInputOOUI( $value ) { + return new OOUI\ButtonInputWidget( array( + 'name' => $this->mButtonName, + 'value' => $this->mButtonValue, + 'type' => $this->mButtonType, + 'label' => $this->mButtonValue, + 'flags' => $this->mButtonFlags, + ) ); + } + /** * Combines the passed element with a button. * @param String $element Element to combine the button with. -- 2.20.1