Merge "HTMLForm: Handle HTMLFormFieldWithButton subclasses in OOUI forms"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 23 Jul 2015 02:18:59 +0000 (02:18 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 23 Jul 2015 02:18:59 +0000 (02:18 +0000)
includes/htmlform/HTMLFormField.php
includes/htmlform/HTMLFormFieldWithButton.php

index b26b45d..1d9b255 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.