setShowEmptyLabel( false ); parent::__construct( $info ); if ( isset( $info['flags'] ) ) { $this->mFlags = $info['flags']; } if ( isset( $info['formnovalidate'] ) ) { $this->mFormnovalidate = $info['formnovalidate']; } # Generate the label from a message, if possible if ( isset( $info['buttonlabel-message'] ) ) { $this->buttonLabel = $this->getMessage( $info['buttonlabel-message'] )->parse(); } elseif ( isset( $info['buttonlabel'] ) ) { if ( $info['buttonlabel'] === ' ' || $info['buttonlabel'] === "\u{00A0}" ) { // Apparently some things set   directly and in an odd format $this->buttonLabel = "\u{00A0}"; } else { $this->buttonLabel = htmlspecialchars( $info['buttonlabel'] ); } } elseif ( isset( $info['buttonlabel-raw'] ) ) { $this->buttonLabel = $info['buttonlabel-raw']; } } public function getInputHTML( $value ) { $flags = ''; $prefix = 'mw-htmlform-'; if ( $this->mParent instanceof VFormHTMLForm ) { $prefix = 'mw-ui-'; // add mw-ui-button separately, so the descriptor doesn't need to set it $flags .= ' ' . $prefix . 'button'; } foreach ( $this->mFlags as $flag ) { $flags .= ' ' . $prefix . $flag; } $attr = [ 'class' => 'mw-htmlform-submit ' . $this->mClass . $flags, 'id' => $this->mID, 'type' => $this->buttonType, 'name' => $this->mName, 'value' => $this->getDefault(), 'formnovalidate' => $this->mFormnovalidate, ] + $this->getAttributes( [ 'disabled', 'tabindex' ] ); return Html::rawElement( 'button', $attr, $this->buttonLabel ?: htmlspecialchars( $this->getDefault() ) ); } /** * Get the OOUI widget for this field. * @stable to override * @param string $value * @return \OOUI\ButtonInputWidget */ public function getInputOOUI( $value ) { return new \OOUI\ButtonInputWidget( [ 'name' => $this->mName, 'value' => $this->getDefault(), 'label' => $this->buttonLabel ? new \OOUI\HtmlSnippet( $this->buttonLabel ) : $this->getDefault(), 'type' => $this->buttonType, 'classes' => [ 'mw-htmlform-submit', $this->mClass ], 'id' => $this->mID, 'flags' => $this->mFlags, ] + \OOUI\Element::configFromHtmlAttributes( $this->getAttributes( [ 'disabled', 'tabindex' ] ) ) ); } public function getInputCodex( $value, $hasErrors ) { $flags = $this->mFlags; $buttonLabel = $this->buttonLabel ?: htmlspecialchars( $this->getDefault() ); $buttonClasses = [ 'mw-htmlform-submit', 'cdx-button', $this->mClass ]; $buttonAttribs = [ 'class' => $buttonClasses, 'id' => $this->mID, 'type' => $this->buttonType, 'name' => $this->mName, 'value' => $this->getDefault(), 'formnovalidate' => $this->mFormnovalidate, ] + $this->getAttributes( [ 'disabled', 'tabindex' ] ); return static::buildCodexComponent( $flags, $buttonLabel, $buttonAttribs ); } /** * Build the markup of the Codex component * * @param array $flags The button's flag classes. * @param string $buttonLabel The button's label attribute. * @param array $attribs The button's list of attributes. * @return string Raw HTML. */ public static function buildCodexComponent( $flags, $buttonLabel, $attribs ) { $flagClasses = []; $flagClassMap = [ 'progressive' => 'cdx-button--action-progressive', 'destructive' => 'cdx-button--action-destructive', 'primary' => 'cdx-button--weight-primary', 'quiet' => 'cdx-button--weight-quiet', ]; foreach ( $flags as $flag ) { if ( isset( $flagClassMap[$flag] ) ) { $flagClasses[] = $flagClassMap[$flag]; } } $buttonClassesAndFlags = array_merge( $attribs[ 'class' ], $flagClasses ); $attribs['class'] = $buttonClassesAndFlags; $buttonHtml = Html::rawElement( 'button', $attribs, $buttonLabel ); return $buttonHtml; } /** * @inheritDoc * @stable to override */ protected function needsLabel() { return false; } /** * Button cannot be invalid * @stable to override * * @param string $value * @param array $alldata * * @return bool|string|Message */ public function validate( $value, $alldata ) { return true; } } /** @deprecated class alias since 1.42 */ class_alias( HTMLButtonField::class, 'HTMLButtonField' );