Merge "mw.htmlform: Fields hidden with 'hide-if' should be disabled"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 18 Dec 2016 12:56:11 +0000 (12:56 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 18 Dec 2016 12:56:11 +0000 (12:56 +0000)
1  2 
includes/htmlform/fields/HTMLFormFieldCloner.php

@@@ -96,6 -96,17 +96,17 @@@ class HTMLFormFieldCloner extends HTMLF
                        } else {
                                $info['id'] = Sanitizer::escapeId( "{$this->mID}--$key--$fieldname" );
                        }
+                       // Copy the hide-if rules to "child" fields, so that the JavaScript code handling them
+                       // (resources/src/mediawiki/htmlform/hide-if.js) doesn't have to handle nested fields.
+                       if ( $this->mHideIf ) {
+                               if ( isset( $info['hide-if'] ) ) {
+                                       // Hide child field if either its rules say it's hidden, or parent's rules say it's hidden
+                                       $info['hide-if'] = [ 'OR', $info['hide-if'], $this->mHideIf ];
+                               } else {
+                                       // Hide child field if parent's rules say it's hidden
+                                       $info['hide-if'] = $this->mHideIf;
+                               }
+                       }
                        $field = HTMLForm::loadInputFromParameters( $name, $info, $this->mParent );
                        $fields[$fieldname] = $field;
                }
                        && $this->mParams['required'] !== false
                        && !$values
                ) {
 -                      return $this->msg( 'htmlform-cloner-required' )->parseAsBlock();
 +                      return $this->msg( 'htmlform-cloner-required' );
                }
  
                if ( isset( $values['nonjs'] ) ) {