Skip to content

Commit ad7d35b

Browse files
committed
feat(app): clean-up language setup
1 parent e7fc7af commit ad7d35b

8 files changed

Lines changed: 40 additions & 44 deletions

File tree

src/components/main/dashboard/dashboard.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@ import template from './dashboard.html';
33

44
const DashboardComponent = { controller, template };
55

6-
function controller($state, $window, WikiService, localStorageService) {
6+
function controller($mdToast, $state, $window, WikiService, langService) {
77
const vm = this;
8-
vm.languages = localStorageService.get('languages') || ['en', 'de'];
8+
vm.languages = langService.getUserLanguages();
99
vm.loading = false;
1010
vm.saveLanguages = saveLanguages;
1111

1212
function saveLanguages() {
13-
if (vm.languages.includes('en')) {
14-
vm.languages.push('en');
15-
}
16-
localStorageService.set('languages', vm.languages.filter(lang => lang));
17-
$state.reload();
13+
langService.setUserLanguages(vm.languages.filter(lang => lang))
14+
.then(() => {
15+
$mdToast.show($mdToast.simple().textContent('Languages saved!').hideDelay(3000));
16+
$state.reload();
17+
});
1818
}
1919
}
2020

src/components/main/list/list.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@ import '../../../images/marker.png';
44

55
const ListComponent = { controller, template };
66

7-
function controller($state, $stateParams, $timeout, leafletData, localStorageService, mapService, WikiService, wikidata) {
7+
function controller($state, $stateParams, $timeout, langService, leafletData, localStorageService, mapService, WikiService, wikidata) {
88
const vm = this;
99
const icon = mapService.getMapIcon();
1010
const id = $stateParams.id.includes('Q') ? $stateParams.id : `Q${$stateParams.id}`;
11+
const langs = langService.getUserLanguages();
1112

1213
vm.filters = {};
1314
vm.image = [];
15+
vm.lang = langs[0];
1416
vm.map = mapService.getMapInstance({ center: { lat: 49.4967, lng: 12.4805, zoom: 4 } });
1517
vm.listParams = {};
1618

@@ -19,11 +21,6 @@ function controller($state, $stateParams, $timeout, leafletData, localStorageSer
1921
return;
2022
}
2123

22-
let langs = $stateParams.lang ? [$stateParams.lang] : [];
23-
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
24-
vm.lang = langs[0];
25-
wikidata.setLanguages(langs);
26-
2724
init();
2825

2926
function getImage(image) {

src/components/main/main.js

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,8 @@ import pack from '../../../package.json';
44

55
const MainComponent = { controller, template };
66

7-
function controller(wikidata, $state, $stateParams, localStorageService) {
7+
function controller() {
88
const vm = this;
9-
10-
let langs = $stateParams.lang ? [$stateParams.lang] : [];
11-
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
12-
13-
vm.lang = langs[0];
14-
wikidata.setLanguages(langs);
15-
16-
vm.goToItem = item => $state.go('main.object', { id: item.title.substring(1) });
17-
vm.querySearch = text => wikidata.getSearch(text);
18-
vm.search = {};
199
}
2010

2111
export default () => {

src/components/main/map/map.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,10 @@ import template from './map.html';
33

44
const MapComponent = { controller, template };
55

6-
function controller($location, $scope, $state, $stateParams, $timeout, leafletData, localStorageService, mapService, wikidata) {
6+
function controller($location, $scope, $state, $stateParams, $timeout, langService, leafletData, localStorageService, mapService, wikidata) {
77
const vm = this;
88
const icon = mapService.getMapIcon();
9+
const langs = langService.getUserLanguages();
910

1011
// bindings
1112

@@ -17,10 +18,6 @@ function controller($location, $scope, $state, $stateParams, $timeout, leafletDa
1718

1819
// activate
1920

20-
let langs = $stateParams.lang ? [$stateParams.lang] : [];
21-
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
22-
wikidata.setLanguages(langs);
23-
2421
$scope.$on('centerUrlHash', (event, centerHash) => {
2522
$location.search({ c: centerHash });
2623
});

src/components/main/monument/monument.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,13 @@ function controller($http, $q, $sce, $stateParams, $timeout, $window, localStora
1010
const vm = this;
1111
const icon = mapService.getMapIcon();
1212
const id = $stateParams.id.includes('Q') ? $stateParams.id : `Q${$stateParams.id}`;
13+
const langs = langService.getUserLanguages();
1314

1415
vm.getCommonsLink = getCommonsLink;
1516
vm.image = [];
17+
vm.lang = langs[0];
1618
vm.map = {};
1719

18-
let langs = $stateParams.lang ? [$stateParams.lang] : [];
19-
langs = langs.concat(localStorageService.get('languages') || ['en', 'de']);
20-
21-
vm.lang = langs[0];
22-
wikidata.setLanguages(langs);
2320
getWikidata();
2421

2522
// functions

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ function stateConfig($stateProvider, $urlRouterProvider) {
7979
resolve: {},
8080
})
8181
.state('main.object', {
82-
url: '/object/:id?lang',
82+
url: '/object/:id',
8383
template: '<mo-monument></mo-monument>',
8484
resolve: {},
8585
})

src/services/lang.service.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
const LangService = function () {
1+
const LangService = function ($q, localStorageService) {
22
const service = {
33
getNativeLanguages,
4+
getUserLanguages,
5+
setUserLanguages,
46
};
57

68
const languagesList = {
@@ -19,7 +21,7 @@ const LangService = function () {
1921
Q902: ['bn'],
2022
Q244: ['en'],
2123
Q184: ['ru', 'be'],
22-
Q31: ['fr', 'de', 'nl'],
24+
Q31: ['nl', 'fr', 'de'],
2325
Q242: ['en'],
2426
Q962: ['fr'],
2527
Q917: ['dz'],
@@ -194,6 +196,7 @@ const LangService = function () {
194196
Q953: ['en'],
195197
Q954: ['en'],
196198
};
199+
let userLanguages = [];
197200

198201
return service;
199202

@@ -202,6 +205,23 @@ const LangService = function () {
202205
function getNativeLanguages(code) {
203206
return languagesList[code];
204207
}
208+
209+
function getUserLanguages() {
210+
if (userLanguages.length) { return userLanguages; }
211+
212+
const ls = localStorageService.get('languages');
213+
const def = navigator.language || navigator.userLanguage;
214+
215+
userLanguages = ls || [def];
216+
if (!userLanguages.includes('en')) { userLanguages.push('en'); }
217+
return userLanguages;
218+
}
219+
220+
function setUserLanguages(langs) {
221+
localStorageService.set('languages', langs);
222+
userLanguages = langs;
223+
return $q.when(true);
224+
}
205225
};
206226

207227
export default () => {

src/services/wikidata.service.js

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,18 @@
1-
const wdService = function ($http) {
1+
const wdService = function ($http, $q, langService) {
22
const service = {
33
get,
44
getById,
55
getLabels,
66
getRecursive,
77
getSearch,
88
getSPARQL,
9-
setLanguages,
109
};
1110

1211
const defaultParams = {
1312
action: 'wbgetentities',
1413
format: 'json',
1514
props: ['info', 'labels', 'aliases', 'descriptions', 'claims', 'datatype', 'sitelinks'],
16-
languages: ['en'],
15+
languages: langService.getUserLanguages(),
1716
callback: 'JSON_CALLBACK',
1817
};
1918

@@ -103,10 +102,6 @@ const wdService = function ($http) {
103102
return result;
104103
}
105104

106-
function setLanguages(languages) {
107-
defaultParams.languages = languages;
108-
}
109-
110105
function simplifyAliases(aliases) {
111106
return mapValues(aliases, lang => lang.map(alias => alias.value));
112107
}

0 commit comments

Comments
 (0)