X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fhtmlform%2FOOUIHTMLForm.php;h=49cbdee6e0f0036fde2530e488efaf1a5637aee7;hb=99a57ca021d6e2c7bb25d927d47d8657e60b48e8;hp=e47de61a4c584e3f8a25f363b1d45dd6ff28a633;hpb=2480aae0c97d822e10b50619e7b48b25c45af073;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/htmlform/OOUIHTMLForm.php b/includes/htmlform/OOUIHTMLForm.php index e47de61a4c..49cbdee6e0 100644 --- a/includes/htmlform/OOUIHTMLForm.php +++ b/includes/htmlform/OOUIHTMLForm.php @@ -145,7 +145,7 @@ class OOUIHTMLForm extends HTMLForm { [ 'class' => 'mw-htmlform-submit-buttons' ], "\n$buttons" ) . "\n"; } - protected function wrapFieldSetSection( $legend, $section, $attributes ) { + protected function wrapFieldSetSection( $legend, $section, $attributes, $isRoot ) { // to get a user visible effect, wrap the fieldset into a framed panel layout $layout = new OOUI\PanelLayout( [ 'expanded' => false, @@ -176,16 +176,22 @@ class OOUIHTMLForm extends HTMLForm { * @return string HTML */ protected function formatSection( array $fieldsHtml, $sectionName, $anyFieldHasLabel ) { - $config = [ - 'items' => $fieldsHtml, - ]; - if ( $sectionName ) { - $config['id'] = Sanitizer::escapeIdForAttribute( $sectionName ); + if ( !$fieldsHtml ) { + // Do not generate any wrappers for empty sections. Sections may be empty if they only have + // subsections, but no fields. A legend will still be added in wrapFieldSetSection(). + return ''; } - if ( is_string( $this->mWrapperLegend ) ) { - $config['label'] = $this->mWrapperLegend; + + $html = implode( '', $fieldsHtml ); + + if ( $sectionName ) { + $html = Html::rawElement( + 'div', + [ 'id' => Sanitizer::escapeIdForAttribute( $sectionName ) ], + $html + ); } - return new OOUI\FieldsetLayout( $config ); + return $html; } /** @@ -243,9 +249,8 @@ class OOUIHTMLForm extends HTMLForm { } public function getBody() { - $fieldset = parent::getBody(); - // FIXME This only works for forms with no subsections - if ( $fieldset instanceof OOUI\FieldsetLayout ) { + $html = parent::getBody(); + if ( $this->mHeader || $this->oouiErrors || $this->oouiWarnings ) { $classes = [ 'mw-htmlform-ooui-header' ]; if ( $this->oouiErrors ) { $classes[] = 'mw-htmlform-ooui-header-errors'; @@ -253,33 +258,42 @@ class OOUIHTMLForm extends HTMLForm { if ( $this->oouiWarnings ) { $classes[] = 'mw-htmlform-ooui-header-warnings'; } - if ( $this->mHeader || $this->oouiErrors || $this->oouiWarnings ) { - // if there's no header, don't create an (empty) LabelWidget, simply use a placeholder - if ( $this->mHeader ) { - $element = new OOUI\LabelWidget( [ 'label' => new OOUI\HtmlSnippet( $this->mHeader ) ] ); - } else { - $element = new OOUI\Widget( [] ); - } - $fieldset->addItems( [ - new OOUI\FieldLayout( - $element, - [ - 'align' => 'top', - 'errors' => $this->oouiErrors, - 'notices' => $this->oouiWarnings, - 'classes' => $classes, - ] - ) - ], 0 ); + // if there's no header, don't create an (empty) LabelWidget, simply use a placeholder + if ( $this->mHeader ) { + $element = new OOUI\LabelWidget( [ 'label' => new OOUI\HtmlSnippet( $this->mHeader ) ] ); + } else { + $element = new OOUI\Widget( [] ); } + $html = new OOUI\FieldLayout( + $element, + [ + 'align' => 'top', + 'errors' => $this->oouiErrors, + 'notices' => $this->oouiWarnings, + 'classes' => $classes, + ] + ) . $html; } - return $fieldset; + return $html; } public function wrapForm( $html ) { + if ( is_string( $this->mWrapperLegend ) ) { + $content = new OOUI\FieldsetLayout( [ + 'label' => $this->mWrapperLegend, + 'items' => [ + new OOUI\Widget( [ + 'content' => new OOUI\HtmlSnippet( $html ) + ] ), + ], + ] ); + } else { + $content = new OOUI\HtmlSnippet( $html ); + } + $form = new OOUI\FormLayout( $this->getFormAttributes() + [ 'classes' => [ 'mw-htmlform', 'mw-htmlform-ooui' ], - 'content' => new OOUI\HtmlSnippet( $html ), + 'content' => $content, ] ); // Include a wrapper for style, if requested.