wiki.techinc.nl/includes/widget/ComplexNamespaceInputWidget.php
Umherirrender aed646001c htmlform: Add missing documentation to class properties
Add doc-typehints to class properties found by the PropertyDocumentation
sniff to improve the documentation.

Once the sniff is enabled it avoids that new code is missing type
declarations. This is focused on documentation and does not change code.

Change-Id: I1f306a3925d6768209a06e70082598b2f70cd319
2024-09-14 11:49:05 +00:00

130 lines
3.7 KiB
PHP

<?php
namespace MediaWiki\Widget;
use OOUI\CheckboxInputWidget;
use OOUI\Exception;
use OOUI\FieldLayout;
use OOUI\Widget;
/**
* Namespace input widget. Displays a dropdown box with the choice of available namespaces, plus two
* checkboxes to include associated namespace or to invert selection.
*
* @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
* @license MIT
*/
class ComplexNamespaceInputWidget extends Widget {
/** @var array */
protected $config;
/** @var NamespaceInputWidget */
protected $namespace;
/** @var CheckboxInputWidget|null */
protected $associated = null;
/** @var FieldLayout|null */
protected $associatedLabel = null;
/** @var CheckboxInputWidget|null */
protected $invert = null;
/** @var FieldLayout|null */
protected $invertLabel = null;
/**
* @param array $config Configuration options
* - array $config['namespace'] Configuration for the NamespaceInputWidget
* dropdown with list of namespaces
* - string $config['namespace']['includeAllValue'] If specified,
* add an "all namespaces" option to the dropdown, and use this as the input value for it
* - array|null $config['invert'] Configuration for the "invert selection"
* CheckboxInputWidget. If null, the checkbox will not be generated.
* - array|null $config['associated'] Configuration for the "include associated namespace"
* CheckboxInputWidget. If null, the checkbox will not be generated.
* - array $config['invertLabel'] Configuration for the FieldLayout with label
* wrapping the "invert selection" checkbox
* - string $config['invertLabel']['label'] Label text for the label
* - array $config['associatedLabel'] Configuration for the FieldLayout with label
* wrapping the "include associated namespace" checkbox
* - string $config['associatedLabel']['label'] Label text for the label
*
* @throws Exception
*/
public function __construct( array $config = [] ) {
// Configuration initialization
$config = array_merge(
[
// Config options for nested widgets
'namespace' => [],
'invert' => [],
'invertLabel' => [],
'associated' => [],
'associatedLabel' => [],
],
$config
);
parent::__construct( $config );
// Properties
$this->config = $config;
$this->namespace = new NamespaceInputWidget( $config['namespace'] );
if ( $config['associated'] !== null ) {
$this->associated = new CheckboxInputWidget( array_merge(
[ 'value' => '1' ],
$config['associated']
) );
// TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
$this->associatedLabel = new FieldLayout(
$this->associated,
array_merge(
[ 'align' => 'inline' ],
$config['associatedLabel']
)
);
}
if ( $config['invert'] !== null ) {
$this->invert = new CheckboxInputWidget( array_merge(
[ 'value' => '1' ],
$config['invert']
) );
// TODO Should use a LabelWidget? But they don't work like HTML <label>s yet
$this->invertLabel = new FieldLayout(
$this->invert,
array_merge(
[ 'align' => 'inline' ],
$config['invertLabel']
)
);
}
// Initialization
$this
->addClasses( [ 'mw-widget-complexNamespaceInputWidget' ] )
->appendContent( $this->namespace, $this->associatedLabel, $this->invertLabel );
}
protected function getJavaScriptClassName() {
return 'mw.widgets.ComplexNamespaceInputWidget';
}
public function getConfig( &$config ) {
$config = array_merge(
$config,
array_intersect_key(
$this->config,
array_fill_keys(
[
'namespace',
'invert',
'invertLabel',
'associated',
'associatedLabel'
],
true
)
)
);
$config['namespace']['dropdown']['$overlay'] = true;
return parent::getConfig( $config );
}
}