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 / 3
0.00% covered (danger)
0.00%
0 / 1
2
 getDropdownLabel
0.00% covered (danger)
0.00%
0 / 5
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 Language;
5use MediaWiki\MediaWikiServices;
6use MediaWiki\StubObject\StubUserLang;
7
8/**
9 * VectorComponentVariants component
10 */
11class 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}