X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fhtmlform%2FHTMLButtonField.php;h=b4849e551863c018ea482ae0566ef47d9a12b258;hp=56a23ad20b2d4f446d92d032fa2983c2af7d81ad;hb=b892e4691db28cc8f3e14abf1929d4be546b0ead;hpb=69e3367224c003163fcc7cce0142b584f13a744e diff --git a/includes/htmlform/HTMLButtonField.php b/includes/htmlform/HTMLButtonField.php index 56a23ad20b..b4849e5518 100644 --- a/includes/htmlform/HTMLButtonField.php +++ b/includes/htmlform/HTMLButtonField.php @@ -5,18 +5,57 @@ * click handling code in JavaScript. Use a HTMLSubmitField if you merely * wish to add a submit button to a form. * + * Additional recognized configuration parameters include: + * - flags: OOUI flags for the button, see OOUI\\FlaggedElement + * - buttonlabel-message: Message to use for the button display text, instead + * of the value from 'default'. Overrides 'buttonlabel' and 'buttonlabel-raw'. + * - buttonlabel: Text to display for the button display text, instead + * of the value from 'default'. Overrides 'buttonlabel-raw'. + * - buttonlabel-raw: HTMLto display for the button display text, instead + * of the value from 'default'. + * + * Note that the buttonlabel parameters are not supported on IE6 and IE7 due to + * bugs in those browsers. If detected, they will be served buttons using the + * value of 'default' as the button label. + * * @since 1.22 */ class HTMLButtonField extends HTMLFormField { protected $buttonType = 'button'; + protected $buttonLabel = null; /** @var array $mFlags Flags to add to OOUI Button widget */ protected $mFlags = array(); public function __construct( $info ) { $info['nodata'] = true; - if ( isset( $info['flags'] ) ) + if ( isset( $info['flags'] ) ) { $this->mFlags = $info['flags']; + } + + # Generate the label from a message, if possible + if ( isset( $info['buttonlabel-message'] ) ) { + $msgInfo = $info['buttonlabel-message']; + + if ( is_array( $msgInfo ) ) { + $msg = array_shift( $msgInfo ); + } else { + $msg = $msgInfo; + $msgInfo = array(); + } + + $this->buttonLabel = $this->msg( $msg, $msgInfo )->parse(); + } elseif ( isset( $info['buttonlabel'] ) ) { + if ( $info['buttonlabel'] === ' ' ) { + // Apparently some things set   directly and in an odd format + $this->buttonLabel = ' '; + } else { + $this->buttonLabel = htmlspecialchars( $info['buttonlabel'] ); + } + } elseif ( isset( $info['buttonlabel-raw'] ) ) { + $this->buttonLabel = $info['buttonlabel-raw']; + } + parent::__construct( $info ); } @@ -28,7 +67,7 @@ class HTMLButtonField extends HTMLFormField { ) { $prefix = 'mw-ui-'; // add mw-ui-button separately, so the descriptor doesn't need to set it - $flags .= ' ' . $prefix.'button'; + $flags .= ' ' . $prefix . 'button'; } foreach ( $this->mFlags as $flag ) { $flags .= ' ' . $prefix . $flag; @@ -36,25 +75,35 @@ class HTMLButtonField extends HTMLFormField { $attr = array( 'class' => 'mw-htmlform-submit ' . $this->mClass . $flags, 'id' => $this->mID, + 'type' => $this->buttonType, + 'name' => $this->mName, + 'value' => $value, ) + $this->getAttributes( array( 'disabled', 'tabindex' ) ); - return Html::input( $this->mName, $value, $this->buttonType, $attr ); + if ( $this->isBadIE() ) { + return Html::element( 'input', $attr ); + } else { + return Html::rawElement( 'button', $attr, $this->buttonLabel ?: htmlspecialchars( $value ) ); + } } /** * Get the OOUI widget for this field. * @param string $value - * @return OOUI\\ButtonInputWidget + * @return OOUI\ButtonInputWidget */ public function getInputOOUI( $value ) { return new OOUI\ButtonInputWidget( array( 'name' => $this->mName, 'value' => $value, - 'label' => $value, + 'label' => !$this->isBadIE() && $this->buttonLabel + ? new OOUI\HtmlSnippet( $this->buttonLabel ) + : $value, 'type' => $this->buttonType, 'classes' => array( 'mw-htmlform-submit', $this->mClass ), 'id' => $this->mID, 'flags' => $this->mFlags, + 'useInputTag' => $this->isBadIE(), ) + $this->getAttributes( array( 'disabled', 'tabindex' ), array( 'tabindex' => 'tabIndex' ) ) ); } @@ -73,4 +122,15 @@ class HTMLButtonField extends HTMLFormField { public function validate( $value, $alldata ) { return true; } + + /** + * IE<8 has bugs with