2019-09-15 14:16:32 +02:00
|
|
|
import Backbone from 'backbone';
|
|
|
|
import { Features } from 'util/features';
|
|
|
|
import { Locale } from 'util/locale';
|
2016-08-21 23:12:49 +02:00
|
|
|
|
2019-09-08 12:53:05 +02:00
|
|
|
const appleThemes = {
|
|
|
|
macdark: 'setGenThemeMacDark'
|
|
|
|
};
|
|
|
|
|
2019-09-15 08:11:11 +02:00
|
|
|
const extraThemes = Features.isMac || Features.isiOS ? appleThemes : {};
|
2019-09-08 12:53:05 +02:00
|
|
|
|
2016-08-21 23:12:49 +02:00
|
|
|
const SettingsManager = {
|
|
|
|
neutralLocale: null,
|
2017-01-29 10:04:18 +01:00
|
|
|
activeLocale: 'en',
|
2016-08-21 23:12:49 +02:00
|
|
|
|
2017-02-19 10:29:18 +01:00
|
|
|
allLocales: {
|
2017-05-05 20:27:06 +02:00
|
|
|
'en': 'English',
|
|
|
|
'de-DE': 'Deutsch',
|
2017-05-05 20:27:52 +02:00
|
|
|
'fr-FR': 'Français'
|
2017-02-19 10:29:18 +01:00
|
|
|
},
|
|
|
|
|
2017-02-21 22:05:18 +01:00
|
|
|
allThemes: {
|
|
|
|
fb: 'setGenThemeFb',
|
|
|
|
db: 'setGenThemeDb',
|
|
|
|
sd: 'setGenThemeSd',
|
|
|
|
sl: 'setGenThemeSl',
|
|
|
|
wh: 'setGenThemeWh',
|
|
|
|
te: 'setGenThemeTe',
|
2019-09-08 09:12:15 +02:00
|
|
|
hc: 'setGenThemeHc',
|
2019-09-08 12:53:05 +02:00
|
|
|
...extraThemes
|
2017-02-21 22:05:18 +01:00
|
|
|
},
|
|
|
|
|
2019-08-16 23:05:39 +02:00
|
|
|
customLocales: {},
|
2017-02-19 10:29:18 +01:00
|
|
|
|
2019-08-18 10:17:09 +02:00
|
|
|
setBySettings(settings) {
|
2016-05-15 09:57:29 +02:00
|
|
|
if (settings.get('theme')) {
|
|
|
|
this.setTheme(settings.get('theme'));
|
|
|
|
}
|
2019-03-31 13:55:00 +02:00
|
|
|
this.setFontSize(settings.get('fontSize'));
|
2017-01-31 07:50:28 +01:00
|
|
|
const locale = settings.get('locale');
|
2017-02-01 22:27:08 +01:00
|
|
|
try {
|
|
|
|
if (locale) {
|
|
|
|
this.setLocale(settings.get('locale'));
|
|
|
|
} else {
|
2017-01-29 10:04:18 +01:00
|
|
|
this.setLocale(this.getBrowserLocale());
|
2017-02-01 22:27:08 +01:00
|
|
|
}
|
|
|
|
} catch (ex) {}
|
2016-05-15 09:57:29 +02:00
|
|
|
},
|
|
|
|
|
2019-08-18 10:17:09 +02:00
|
|
|
setTheme(theme) {
|
2016-07-17 13:30:38 +02:00
|
|
|
_.forEach(document.body.classList, cls => {
|
2015-10-31 07:18:24 +01:00
|
|
|
if (/^th\-/.test(cls)) {
|
|
|
|
document.body.classList.remove(cls);
|
|
|
|
}
|
|
|
|
});
|
2016-07-24 19:11:25 +02:00
|
|
|
document.body.classList.add(this.getThemeClass(theme));
|
2017-01-31 07:50:28 +01:00
|
|
|
const metaThemeColor = document.head.querySelector('meta[name=theme-color]');
|
2016-04-03 11:32:38 +02:00
|
|
|
if (metaThemeColor) {
|
|
|
|
metaThemeColor.content = window.getComputedStyle(document.body).backgroundColor;
|
|
|
|
}
|
2016-05-15 09:57:29 +02:00
|
|
|
},
|
|
|
|
|
2019-08-18 10:17:09 +02:00
|
|
|
getThemeClass(theme) {
|
2016-07-24 19:11:25 +02:00
|
|
|
return 'th-' + theme;
|
|
|
|
},
|
|
|
|
|
2019-08-18 10:17:09 +02:00
|
|
|
setFontSize(fontSize) {
|
2019-09-15 08:11:11 +02:00
|
|
|
const defaultFontSize = Features.isMobile ? 14 : 12;
|
2019-08-16 23:05:39 +02:00
|
|
|
document.documentElement.style.fontSize = defaultFontSize + (fontSize || 0) * 2 + 'px';
|
2016-08-21 23:12:49 +02:00
|
|
|
},
|
|
|
|
|
2017-01-29 10:04:18 +01:00
|
|
|
setLocale(loc) {
|
|
|
|
if (!loc || loc === this.activeLocale) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
let localeValues;
|
|
|
|
if (loc !== 'en') {
|
2017-02-19 10:29:18 +01:00
|
|
|
if (this.customLocales[loc]) {
|
|
|
|
localeValues = this.customLocales[loc];
|
|
|
|
} else {
|
2019-09-15 08:49:41 +02:00
|
|
|
localeValues = require('../../locales/' + loc + '.json');
|
2017-02-19 10:29:18 +01:00
|
|
|
}
|
2017-01-29 10:04:18 +01:00
|
|
|
}
|
2016-08-21 23:12:49 +02:00
|
|
|
if (!this.neutralLocale) {
|
|
|
|
this.neutralLocale = _.clone(Locale);
|
|
|
|
}
|
2017-01-29 10:04:18 +01:00
|
|
|
_.extend(Locale, this.neutralLocale, localeValues);
|
|
|
|
this.activeLocale = loc;
|
|
|
|
Backbone.trigger('set-locale', loc);
|
|
|
|
},
|
|
|
|
|
2019-08-18 10:17:09 +02:00
|
|
|
getBrowserLocale() {
|
2019-08-16 23:05:39 +02:00
|
|
|
const language = (navigator.languages && navigator.languages[0]) || navigator.language;
|
2017-02-02 21:49:27 +01:00
|
|
|
if (language && language.lastIndexOf('en', 0) === 0) {
|
|
|
|
return 'en';
|
|
|
|
}
|
|
|
|
return language;
|
2015-10-31 07:18:24 +01:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2019-09-15 14:16:32 +02:00
|
|
|
export { SettingsManager };
|