HTMLForm: Handle HTMLFormFieldWithButton subclasses in OOUI forms
authorFlorian <florian.schmidt.welzow@t-online.de>
Thu, 16 Jul 2015 17:59:59 +0000 (19:59 +0200)
committerKunal Mehta <legoktm@gmail.com>
Thu, 23 Jul 2015 02:08:19 +0000 (19:08 -0700)
Example usages in:
* I47a8649208279a4090623a3088112fcff9abc4d3 (Special:Watchlist)
* I2b3524e61efc618aa2b7484134bba562d5f9011c (Special:Export)

Change-Id: I9050c4a09cbb841ad26ca01a25f706227e35e3be
Co-Authored-By: Florian <florian.schmidt.welzow@t-online.de>
Co-Authored-By: Bartosz DziewoƄski <matma.rex@gmail.com>
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php

index 21526c7..6f2971b 100644 (file)
@@ -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.
index 113bb4b..6b02c49 100644 (file)
@@ -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.