From: Bartosz DziewoƄski Date: Tue, 28 Jul 2015 22:05:08 +0000 (+0200) Subject: HTMLForm: Move section formatting OOUI-specific code to OOUIHTMLForm X-Git-Tag: 1.31.0-rc.0~10318 X-Git-Url: http://git.cyclocoop.org/%24image?a=commitdiff_plain;h=40abd65b24da7bc47f59b6814db8d3970c28cc1f;p=lhc%2Fweb%2Fwiklou.git HTMLForm: Move section formatting OOUI-specific code to OOUIHTMLForm * Introduce a new helper function formatSection() and override it in OOUIHTMLForm. * Bonus: Properly construct the form's FieldsetLayout, thanks to I860a96858c4fcac62d63b46e35a9153f22c0a9c9. * Bonus: Don't pass silly HTMLForm's classes which don't make sense in OOUI mode. Change-Id: I91af6efa8762e9676efea532381292e221255862 --- diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index da58f20d24..946fc72c2d 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -1333,7 +1333,7 @@ class HTMLForm extends ContextSource { &$hasUserVisibleFields = false ) { $displayFormat = $this->getDisplayFormat(); - $html = ''; + $html = array(); $subsectionHtml = ''; $hasLabel = false; @@ -1345,7 +1345,7 @@ class HTMLForm extends ContextSource { $v = empty( $value->mParams['nodata'] ) ? $this->mFieldData[$key] : $value->getDefault(); - $html .= $value->$getFieldHtmlMethod( $v ); + $html[] = $value->$getFieldHtmlMethod( $v ); $labelValue = trim( $value->getLabel() ); if ( $labelValue != ' ' && $labelValue !== '' ) { @@ -1391,45 +1391,7 @@ class HTMLForm extends ContextSource { } } - if ( $displayFormat !== 'raw' ) { - $classes = array(); - - if ( !$hasLabel ) { // Avoid strange spacing when no labels exist - $classes[] = 'mw-htmlform-nolabel'; - } - - $attribs = array( - 'class' => implode( ' ', $classes ), - ); - - if ( $sectionName ) { - $attribs['id'] = Sanitizer::escapeId( $sectionName ); - } - - if ( $displayFormat === 'table' ) { - $html = Html::rawElement( 'table', - $attribs, - Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n"; - } elseif ( $displayFormat === 'inline' ) { - $html = Html::rawElement( 'span', $attribs, "\n$html\n" ); - } elseif ( $displayFormat === 'ooui' ) { - $config = array( - 'classes' => $classes, - ); - if ( $sectionName ) { - $config['id'] = Sanitizer::escapeId( $sectionName ); - } - if ( is_string( $this->mWrapperLegend ) ) { - $config['label'] = $this->mWrapperLegend; - } - $fieldset = new OOUI\FieldsetLayout( $config ); - // Ewww. We should pass this as $config['items'], but there might be string snippets. - $fieldset->group->appendContent( new OOUI\HtmlSnippet( $html ) ); - $html = $fieldset; - } else { - $html = Html::rawElement( 'div', $attribs, "\n$html\n" ); - } - } + $html = $this->formatSection( $html, $sectionName, $hasLabel ); if ( $subsectionHtml ) { if ( $this->mSubSectionBeforeFields ) { @@ -1442,6 +1404,46 @@ class HTMLForm extends ContextSource { } } + /** + * Put a form section together from the individual fields' HTML, merging it and wrapping. + * @param array $fieldsHtml + * @param string $sectionName + * @param bool $anyFieldHasLabel + * @return string HTML + */ + protected function formatSection( array $fieldsHtml, $sectionName, $anyFieldHasLabel ) { + $displayFormat = $this->getDisplayFormat(); + $html = implode( '', $fieldsHtml ); + + if ( $displayFormat === 'raw' ) { + return $html; + } + + $classes = array(); + + if ( !$anyFieldHasLabel ) { // Avoid strange spacing when no labels exist + $classes[] = 'mw-htmlform-nolabel'; + } + + $attribs = array( + 'class' => implode( ' ', $classes ), + ); + + if ( $sectionName ) { + $attribs['id'] = Sanitizer::escapeId( $sectionName ); + } + + if ( $displayFormat === 'table' ) { + return Html::rawElement( 'table', + $attribs, + Html::rawElement( 'tbody', array(), "\n$html\n" ) ) . "\n"; + } elseif ( $displayFormat === 'inline' ) { + return Html::rawElement( 'span', $attribs, "\n$html\n" ); + } else { + return Html::rawElement( 'div', $attribs, "\n$html\n" ); + } + } + /** * Construct the form fields from the Descriptor array */ diff --git a/includes/htmlform/OOUIHTMLForm.php b/includes/htmlform/OOUIHTMLForm.php index b5547f64ca..fed32d0d4a 100644 --- a/includes/htmlform/OOUIHTMLForm.php +++ b/includes/htmlform/OOUIHTMLForm.php @@ -104,6 +104,26 @@ class OOUIHTMLForm extends HTMLForm { return $html; } + /** + * Put a form section together from the individual fields' HTML, merging it and wrapping. + * @param OOUI\\FieldLayout[] $fieldsHtml + * @param string $sectionName + * @param bool $anyFieldHasLabel Unused + * @return string HTML + */ + protected function formatSection( array $fieldsHtml, $sectionName, $anyFieldHasLabel ) { + $config = array( + 'items' => $fieldsHtml, + ); + if ( $sectionName ) { + $config['id'] = Sanitizer::escapeId( $sectionName ); + } + if ( is_string( $this->mWrapperLegend ) ) { + $config['label'] = $this->mWrapperLegend; + } + return new OOUI\FieldsetLayout( $config ); + } + /** * @param string|array|Status $errors * @return string