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