|
2 | 2 |
|
3 | 3 | <div> |
4 | 4 | <div v-if="footer" class="page-footer"> |
5 | | - <div class="lang-container" :style="isMobile ? { width: '40%' } : {}"> |
6 | | - <p class="prompt" v-if="!isMobile">{{ $tr('changeLanguagePrompt') }}</p> |
7 | | - <p v-for="language in footerLanguageOptions" :class="selectedLanguage.code===language.code ? 'selected' : 'choice'" @click="setAndSwitchLanguage(language)"> |
8 | | - {{ language.name }} |
9 | | - </p> |
| 5 | + <div> |
| 6 | + <ul class="language-list"> |
| 7 | + <li v-for="language in languageOptions" :class="selectedLanguage===language.code ? 'selected item' : 'choice item'" @click="setAndSwitchLanguage(language.code)"> |
| 8 | + {{ language.name }} |
| 9 | + </li> |
| 10 | + </ul> |
10 | 11 | </div> |
11 | | - <k-button style="margin-top: 0" :text="$tr('moreLanguageButtonText')" :raised="false" @click="setModalOpen"/> |
12 | 12 | </div> |
13 | 13 | <core-modal |
14 | 14 | v-if="showModal" |
15 | 15 | :title="$tr('changeLanguageModalHeader')" |
16 | 16 | @cancel="closeModal"> |
17 | 17 | <p>{{ $tr('changeLanguageSubHeader') }}</p> |
18 | | - <p v-for="language in languageOptions" :class="selectedLanguage.code===language.code ? 'selected' : 'choice'" @click="selectedLanguage=language"> |
19 | | - {{ language.name }} |
20 | | - </p> |
| 18 | + <k-radio-button |
| 19 | + v-for="language in languageOptions" |
| 20 | + class="choice" |
| 21 | + :key="language.code" |
| 22 | + :radiovalue="language.code" |
| 23 | + :value="selectedLanguage" |
| 24 | + :label="language.name" |
| 25 | + v-model="selectedLanguage" |
| 26 | + /> |
21 | 27 | <div class="footer"> |
22 | 28 | <k-button :text="$tr('cancelButtonText')" :raised="false" :disabled="disabled" @click="closeModal"/> |
23 | 29 | <k-button :text="$tr('confirmButtonText')" :primary="true" :disabled="disabled" @click="switchLanguage"/> |
|
32 | 38 |
|
33 | 39 | import coreModal from 'kolibri.coreVue.components.coreModal'; |
34 | 40 | import kButton from 'kolibri.coreVue.components.kButton'; |
| 41 | + import kRadioButton from 'kolibri.coreVue.components.kRadioButton'; |
35 | 42 | import { httpClient } from 'kolibri.client'; |
36 | 43 | import { availableLanguages, currentLanguage } from 'kolibri.utils.i18n'; |
37 | | - import responsiveWindow from 'kolibri.coreVue.mixins.responsiveWindow'; |
38 | 44 | export default { |
39 | 45 | name: 'languageSwitcherModalDialog', |
40 | | - mixins: [responsiveWindow], |
41 | | - components: { coreModal, kButton }, |
| 46 | + components: { coreModal, kButton, kRadioButton }, |
42 | 47 | $trs: { |
43 | 48 | changeLanguageModalHeader: 'Change language', |
44 | 49 | changeLanguageSubHeader: 'Select the language you want to view Kolibri in', |
45 | | - changeLanguagePrompt: 'Select language:', |
46 | | - moreLanguageButtonText: 'More languages', |
47 | 50 | cancelButtonText: 'Cancel', |
48 | 51 | confirmButtonText: 'Confirm', |
49 | 52 | }, |
|
67 | 70 | }) |
68 | 71 | .map(key => availableLanguages[key]); |
69 | 72 | }, |
70 | | - footerLanguageOptions() { |
71 | | - if (this.isMobile) { |
72 | | - return this.languageOptions.filter(lang => lang.code !== currentLanguage).slice(0, 3); |
73 | | - } |
74 | | - return this.languageOptions.slice(0, 6); |
75 | | - }, |
76 | 73 | currentLanguageName() { |
77 | 74 | return availableLanguages[currentLanguage].name; |
78 | 75 | }, |
79 | 76 | showModal() { |
80 | | - console.log(this.internalModalOpen); |
81 | 77 | return this.modalOpen || this.internalModalOpen; |
82 | 78 | }, |
83 | | - isMobile() { |
84 | | - return this.windowSize.breakpoint <= 1; |
85 | | - }, |
86 | 79 | }, |
87 | 80 | props: { |
88 | 81 | footer: { |
|
96 | 89 | }, |
97 | 90 | data: () => ({ |
98 | 91 | disabled: false, |
99 | | - selectedLanguage: availableLanguages[currentLanguage], |
| 92 | + selectedLanguage: currentLanguage, |
100 | 93 | internalModalOpen: false, |
101 | 94 | }), |
102 | 95 | methods: { |
103 | 96 | switchLanguage() { |
104 | 97 | this.disabled = true; |
105 | 98 | const path = this.Kolibri.urls['kolibri:set_language'](); |
106 | 99 | const entity = { |
107 | | - language: this.selectedLanguage.code, |
| 100 | + language: this.selectedLanguage, |
108 | 101 | }; |
109 | 102 | httpClient({ |
110 | 103 | path, |
|
113 | 106 | global.location.reload(true); |
114 | 107 | }); |
115 | 108 | }, |
116 | | - setAndSwitchLanguage(language) { |
117 | | - this.selectedLanguage = language; |
| 109 | + setAndSwitchLanguage(languageCode) { |
| 110 | + this.selectedLanguage = languageCode; |
118 | 111 | this.switchLanguage(); |
119 | 112 | }, |
120 | 113 | closeModal() { |
|
138 | 131 | h1, p |
139 | 132 | color: black |
140 | 133 |
|
141 | | - .more-button |
142 | | - float: left |
143 | | -
|
144 | | - .selected |
145 | | - font-weight: bold |
146 | | -
|
147 | 134 | .choice |
148 | 135 | color: $core-action-normal |
149 | | - text-decoration: underline $core-action-normal |
150 | | - cursor: pointer |
151 | 136 |
|
| 137 | + .selected |
| 138 | + font-weight: bold |
152 | 139 |
|
153 | 140 | .page-footer |
154 | 141 | padding-left: 32px |
155 | 142 | padding-top: 16px |
156 | 143 | padding-bottom: 16px |
157 | | - .lang-container |
158 | | - display: inline-block |
159 | | - p |
160 | | - float: left |
161 | | - padding-left: 10px |
162 | | - margin: 0 |
163 | 144 | button |
164 | 145 | float: right |
165 | 146 | position: absolute |
166 | 147 |
|
167 | 148 | .prompt |
168 | 149 | padding-right: 16px |
169 | 150 |
|
| 151 | + .language-list |
| 152 | + list-style: none |
| 153 | + margin: 0 |
| 154 | + padding: 0 |
| 155 | +
|
| 156 | + .item |
| 157 | + display: inline-block |
| 158 | + padding-top: 6px |
| 159 | + padding-right: 20px |
| 160 | +
|
170 | 161 | </style> |
0 commit comments