Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 5
CRAP
0.00% covered (danger)
0.00%
0 / 1
VectorComponentVariants
0.00% covered (danger)
0.00%
0 / 23
0.00% covered (danger)
0.00%
0 / 5
42
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getDropdownLabel
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 getDropdownData
0.00% covered (danger)
0.00%
0 / 8
0.00% covered (danger)
0.00%
0 / 1
6
 getMenuDropdownData
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getTemplateData
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2namespace MediaWiki\Skins\Vector\Components;
3
4use MediaWiki\Language\Language;
5use MediaWiki\Languages\LanguageConverterFactory;
6use MediaWiki\StubObject\StubUserLang;
7
8/**
9 * VectorComponentVariants component
10 */
11class VectorComponentVariants implements VectorComponent {
12    private LanguageConverterFactory $languageConverterFactory;
13    /** @var array */
14    private $menuData;
15    /** @var Language|StubUserLang */
16    private $pageLang;
17    /** @var string */
18    private $ariaLabel;
19
20    /**
21     * @param LanguageConverterFactory $languageConverterFactory
22     * @param array $menuData
23     * @param Language|StubUserLang $pageLang
24     * @param string $ariaLabel
25     */
26    public function __construct(
27        LanguageConverterFactory $languageConverterFactory,
28        array $menuData,
29        $pageLang,
30        string $ariaLabel
31    ) {
32        $this->languageConverterFactory = $languageConverterFactory;
33        $this->menuData = $menuData;
34        $this->pageLang = $pageLang;
35        $this->ariaLabel = $ariaLabel;
36    }
37
38    /**
39     * Use the selected variant for the dropdown label
40     */
41    private function getDropdownLabel(): string {
42        $converter = $this->languageConverterFactory->getLanguageConverter( $this->pageLang );
43        return $this->pageLang->getVariantname(
44            $converter->getPreferredVariant()
45        );
46    }
47
48    /**
49     * Get the variants dropdown data
50     * @return array
51     */
52    private function getDropdownData() {
53        $dropdown = new VectorComponentDropdown(
54            'vector-variants-dropdown',
55            $this->getDropdownLabel(),
56            // Hide dropdown if menu is empty
57            $this->menuData[ 'is-empty' ] ? 'emptyPortlet' : ''
58        );
59        $dropdownData = $dropdown->getTemplateData();
60        $dropdownData['aria-label'] = $this->ariaLabel;
61        return $dropdownData;
62    }
63
64    /**
65     * Get the variants menu data
66     * @return array
67     */
68    private function getMenuDropdownData() {
69        // Remove label from variants menu
70        $this->menuData['label'] = null;
71        $menu = new VectorComponentMenu( $this->menuData );
72        return $menu->getTemplateData();
73    }
74
75    /**
76     * @inheritDoc
77     */
78    public function getTemplateData(): array {
79        return [
80            'data-variants-dropdown' => $this->getDropdownData(),
81            'data-variants-menu' => $this->getMenuDropdownData()
82        ];
83    }
84}