keeweb/app/scripts/comp/settings-manager.js

74 lines
2.1 KiB
JavaScript
Raw Normal View History

2015-10-31 07:18:24 +01:00
'use strict';
2016-08-24 21:18:18 +02:00
const Backbone = require('backbone');
2017-01-30 21:26:31 +01:00
const Locale = require('./../util/locale');
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
setBySettings: function(settings) {
if (settings.get('theme')) {
this.setTheme(settings.get('theme'));
}
if (settings.get('fontSize')) {
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) {}
},
2015-10-31 07:18:24 +01:00
setTheme: function(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]');
if (metaThemeColor) {
metaThemeColor.content = window.getComputedStyle(document.body).backgroundColor;
}
},
2016-07-24 19:11:25 +02:00
getThemeClass: function(theme) {
return 'th-' + theme;
},
setFontSize: function(fontSize) {
document.documentElement.style.fontSize = fontSize ? (12 + fontSize * 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') {
localeValues = require('../locales/' + loc + '.json');
}
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);
},
getBrowserLocale: function() {
2017-01-31 07:50:28 +01: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
}
};
2016-08-21 23:12:49 +02:00
module.exports = SettingsManager;