Merge "HTMLForm: Handle HTMLFormFieldWithButton subclasses in OOUI forms"
[lhc/web/wiklou.git] / includes / htmlform / HTMLFormField.php
index 21526c7..1d9b255 100644 (file)
@@ -49,7 +49,7 @@ abstract class HTMLFormField {
         * Defaults to false, which getOOUI will interpret as "use the HTML version"
         *
         * @param string $value
-        * @return OOUI\Widget|false
+        * @return OOUI\\Widget|false
         */
        function getInputOOUI( $value ) {
                return false;
@@ -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.