Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
NamespaceInputWidget
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 4
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
2
 getNamespaceDropdownOptions
0.00% covered (danger)
0.00%
0 / 13
0.00% covered (danger)
0.00%
0 / 1
6
 getJavaScriptClassName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getConfig
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace MediaWiki\Widget;
4
5use MediaWiki\Html\Html;
6use OOUI\DropdownInputWidget;
7use OOUI\InputWidget;
8
9/**
10 * Namespace input widget. Displays a dropdown box with the choice of available namespaces.
11 *
12 * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
13 * @license MIT
14 */
15class NamespaceInputWidget extends DropdownInputWidget {
16    /** @var string */
17    protected $includeAllValue;
18    /** @var bool */
19    protected $userLang;
20    /** @var int[] */
21    protected $exclude;
22
23    /**
24     * @param array $config Configuration options
25     *   - string $config['includeAllValue'] If specified, add a "all namespaces" option to the
26     *     namespace dropdown, and use this as the input value for it
27     *   - bool $config['userLang'] Display namespaces in user language
28     *   - int[] $config['exclude'] List of namespace numbers to exclude from the selector
29     */
30    public function __construct( array $config = [] ) {
31        // Configuration initialization
32        $config['options'] = $this->getNamespaceDropdownOptions( $config );
33
34        parent::__construct( $config );
35
36        // Properties
37        $this->includeAllValue = $config['includeAllValue'] ?? null;
38        $this->userLang = $config['userLang'] ?? false;
39        $this->exclude = $config['exclude'] ?? [];
40
41        // Initialization
42        $this->addClasses( [ 'mw-widget-namespaceInputWidget' ] );
43    }
44
45    protected function getNamespaceDropdownOptions( array $config ) {
46        $namespaceOptionsParams = [
47            'all' => $config['includeAllValue'] ?? null,
48            'in-user-lang' => $config['userLang'] ?? false,
49            'exclude' => $config['exclude'] ?? null
50        ];
51        $namespaceOptions = Html::namespaceSelectorOptions( $namespaceOptionsParams );
52
53        $options = [];
54        foreach ( $namespaceOptions as $id => $name ) {
55            $options[] = [
56                'data' => (string)$id,
57                'label' => $name,
58            ];
59        }
60
61        return $options;
62    }
63
64    protected function getJavaScriptClassName() {
65        return 'mw.widgets.NamespaceInputWidget';
66    }
67
68    public function getConfig( &$config ) {
69        $config['includeAllValue'] = $this->includeAllValue;
70        $config['userLang'] = $this->userLang;
71        $config['exclude'] = $this->exclude;
72        // Skip DropdownInputWidget's getConfig(), we don't need 'options' config
73        $config['dropdown']['$overlay'] = true;
74        return InputWidget::getConfig( $config );
75    }
76}