X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;ds=sidebyside;f=includes%2Fhtmlform%2FHTMLForm.php;h=08fa0a91eff096775bd190a89c308abcb4fe8f4b;hb=0a138f1acf224675f1a70eff8eea63c8d70a17dc;hp=47200d9b51720d5fa4aff8095948b7c680302d53;hpb=6b1a173f07f1a04188735f4688ce6335da14c3b7;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/htmlform/HTMLForm.php b/includes/htmlform/HTMLForm.php index 47200d9b51..08fa0a91ef 100644 --- a/includes/htmlform/HTMLForm.php +++ b/includes/htmlform/HTMLForm.php @@ -76,10 +76,10 @@ * 'size' -- the length of text fields * 'filter-callback -- a function name to give you the chance to * massage the inputted value before it's processed. - * @see HTMLForm::filter() + * @see HTMLFormField::filter() * 'validation-callback' -- a function name to give you the chance * to impose extra validation on the field input. - * @see HTMLForm::validate() + * @see HTMLFormField::validate() * 'name' -- By default, the 'name' attribute of the input field * is "wp{$fieldname}". If you want a different name * (eg one without the "wp" prefix), specify it here and @@ -167,7 +167,7 @@ class HTMLForm extends ContextSource { protected $mFieldTree; protected $mShowReset = false; protected $mShowSubmit = true; - protected $mSubmitFlag = 'constructive'; + protected $mSubmitFlags = array( 'constructive', 'primary' ); protected $mSubmitCallback; protected $mValidationErrorMessage; @@ -710,6 +710,21 @@ class HTMLForm extends ContextSource { return $this; } + /** + * Get header text. + * + * @param string|null $section The section to get the header text for + * @since 1.26 + * @return string + */ + function getHeaderText( $section = null ) { + if ( is_null( $section ) ) { + return $this->mHeader; + } else { + return isset( $this->mSectionHeaders[$section] ) ? $this->mSectionHeaders[$section] : ''; + } + } + /** * Add footer text, inside the form. * @@ -750,6 +765,21 @@ class HTMLForm extends ContextSource { return $this; } + /** + * Get footer text. + * + * @param string|null $section The section to get the footer text for + * @since 1.26 + * @return string + */ + function getFooterText( $section = null ) { + if ( is_null( $section ) ) { + return $this->mFooter; + } else { + return isset( $this->mSectionFooters[$section] ) ? $this->mSectionFooters[$section] : ''; + } + } + /** * Add text to the end of the display. * @@ -868,15 +898,15 @@ class HTMLForm extends ContextSource { # For good measure (it is the default) $this->getOutput()->preventClickjacking(); $this->getOutput()->addModules( 'mediawiki.htmlform' ); + $this->getOutput()->addModuleStyles( 'mediawiki.htmlform.styles' ); $html = '' . $this->getErrors( $submitResult ) - // In OOUI forms, we handle mHeader elsewhere. FIXME This is horrible. - . ( $this->getDisplayFormat() === 'ooui' ? '' : $this->mHeader ) + . $this->getHeaderText() . $this->getBody() . $this->getHiddenFields() . $this->getButtons() - . $this->mFooter; + . $this->getFooterText(); $html = $this->wrapForm( $html ); @@ -975,7 +1005,10 @@ class HTMLForm extends ContextSource { $attribs['class'] = array( 'mw-htmlform-submit' ); if ( $useMediaWikiUIEverywhere ) { - array_push( $attribs['class'], 'mw-ui-button', 'mw-ui-' . $this->mSubmitFlag ); + foreach ( $this->mSubmitFlags as $flag ) { + array_push( $attribs['class'], 'mw-ui-' . $flag ); + } + array_push( $attribs['class'], 'mw-ui-button' ); } $buttons .= Xml::submitButton( $this->getSubmitText(), $attribs ) . "\n"; @@ -1102,7 +1135,7 @@ class HTMLForm extends ContextSource { * @since 1.24 */ public function setSubmitDestructive() { - $this->mSubmitFlag = 'destructive'; + $this->mSubmitFlags = array( 'destructive', 'primary' ); } /** @@ -1110,7 +1143,7 @@ class HTMLForm extends ContextSource { * @since 1.25 */ public function setSubmitProgressive() { - $this->mSubmitFlag = 'progressive'; + $this->mSubmitFlags = array( 'progressive', 'primary' ); } /** @@ -1299,11 +1332,14 @@ class HTMLForm extends ContextSource { * @return HTMLForm $this for chaining calls (since 1.20) */ public function setMethod( $method = 'post' ) { - $this->mMethod = $method; + $this->mMethod = strtolower( $method ); return $this; } + /** + * @return string Always lowercase + */ public function getMethod() { return $this->mMethod; } @@ -1327,7 +1363,7 @@ class HTMLForm extends ContextSource { &$hasUserVisibleFields = false ) { $displayFormat = $this->getDisplayFormat(); - $html = ''; + $html = array(); $subsectionHtml = ''; $hasLabel = false; @@ -1339,7 +1375,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 !== '' ) { @@ -1366,12 +1402,9 @@ class HTMLForm extends ContextSource { $legend = $this->getLegend( $key ); - if ( isset( $this->mSectionHeaders[$key] ) ) { - $section = $this->mSectionHeaders[$key] . $section; - } - if ( isset( $this->mSectionFooters[$key] ) ) { - $section .= $this->mSectionFooters[$key]; - } + $section = $this->getHeaderText( $key ) . + $section . + $this->getFooterText( $key ); $attributes = array(); if ( $fieldsetIDPrefix ) { @@ -1385,45 +1418,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 ) { @@ -1436,6 +1431,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 */