wiki.techinc.nl/includes/htmlform/HTMLCheckField.php
Bartosz Dziewoński ee5af95167 HTMLForm: Use OOUI\Element::configFromHtmlAttributes instead of rolling our own
Depends on I0e5c956b9358b510c8473b1cfe6465ea1b5c07ef in OOjs UI.

This mostly reverts dd04b31052 and parts
of e85bd04bcd.

In addition to cleanup, it fixes bugs in HTMLFormFieldWithButton
(which did not add some attributes in OOUI mode) and HTMLMultiSelectField
(which did not do the mapping, losing some attributes in OOUI mode).

Change-Id: I0d1a5288e9edb73a0c3a8431feca9fcc67b72b6a
2016-03-09 00:08:05 +00:00

131 lines
3.1 KiB
PHP

<?php
/**
* A checkbox field
*/
class HTMLCheckField extends HTMLFormField {
function getInputHTML( $value ) {
global $wgUseMediaWikiUIEverywhere;
if ( !empty( $this->mParams['invert'] ) ) {
$value = !$value;
}
$attr = $this->getTooltipAndAccessKey();
$attr['id'] = $this->mID;
$attr += $this->getAttributes( [ 'disabled', 'tabindex' ] );
if ( $this->mClass !== '' ) {
$attr['class'] = $this->mClass;
}
$attrLabel = [ 'for' => $this->mID ];
if ( isset( $attr['title'] ) ) {
// propagate tooltip to label
$attrLabel['title'] = $attr['title'];
}
$chkLabel = Xml::check( $this->mName, $value, $attr ) .
'&#160;' .
Html::rawElement( 'label', $attrLabel, $this->mLabel );
if ( $wgUseMediaWikiUIEverywhere || $this->mParent instanceof VFormHTMLForm ) {
$chkLabel = Html::rawElement(
'div',
[ 'class' => 'mw-ui-checkbox' ],
$chkLabel
);
}
return $chkLabel;
}
/**
* Get the OOUI version of this field.
* @since 1.26
* @param string $value
* @return OOUI\CheckboxInputWidget The checkbox widget.
*/
public function getInputOOUI( $value ) {
if ( !empty( $this->mParams['invert'] ) ) {
$value = !$value;
}
$attr = $this->getTooltipAndAccessKey();
$attr['id'] = $this->mID;
$attr['name'] = $this->mName;
$attr += OOUI\Element::configFromHtmlAttributes(
$this->getAttributes( [ 'disabled', 'tabindex' ] )
);
if ( $this->mClass !== '' ) {
$attr['classes'] = [ $this->mClass ];
}
$attr['selected'] = $value;
$attr['value'] = '1'; // Nasty hack, but needed to make this work
return new OOUI\CheckboxInputWidget( $attr );
}
/**
* For a checkbox, the label goes on the right hand side, and is
* added in getInputHTML(), rather than HTMLFormField::getRow()
*
* ...unless OOUI is being used, in which case we actually return
* the label here.
*
* @return string
*/
function getLabel() {
if ( $this->mParent instanceof OOUIHTMLForm ) {
return $this->mLabel;
} elseif (
$this->mParent instanceof HTMLForm &&
$this->mParent->getDisplayFormat() === 'div'
) {
return '';
} else {
return '&#160;';
}
}
/**
* Get label alignment when generating field for OOUI.
* @return string 'left', 'right', 'top' or 'inline'
*/
protected function getLabelAlignOOUI() {
return 'inline';
}
/**
* checkboxes don't need a label.
* @return bool
*/
protected function needsLabel() {
return false;
}
/**
* @param WebRequest $request
*
* @return string
*/
function loadDataFromRequest( $request ) {
$invert = isset( $this->mParams['invert'] ) && $this->mParams['invert'];
// GetCheck won't work like we want for checks.
// Fetch the value in either one of the two following case:
// - we have a valid token (form got posted or GET forged by the user)
// - checkbox name has a value (false or true), ie is not null
if ( $request->getCheck( 'wpEditToken' ) || $request->getVal( $this->mName ) !== null ) {
return $invert
? !$request->getBool( $this->mName )
: $request->getBool( $this->mName );
} else {
return $this->getDefault();
}
}
}