This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/controllers/preferences/interface.js.es6
Michael Howell c7d024446e Cast the numeric keys of USER_HOMES to numbers (#5322)
When converting from hard-coded functions to a map,
the key `1` got converted to `"1"`.
This broke the drop-down menu.
2017-11-17 11:01:18 +11:00

93 lines
2.4 KiB
JavaScript

import PreferencesTabController from "discourse/mixins/preferences-tab-controller";
import { setDefaultHomepage } from "discourse/lib/utilities";
import { default as computed, observes } from "ember-addons/ember-computed-decorators";
import { currentThemeKey, listThemes, previewTheme, setLocalTheme } from 'discourse/lib/theme-selector';
import { popupAjaxError } from 'discourse/lib/ajax-error';
const USER_HOMES = { 1: "latest", 2: "categories", 3: "unread", 4: "new", 5: "top" };
export default Ember.Controller.extend(PreferencesTabController, {
@computed("makeThemeDefault")
saveAttrNames(makeDefault) {
let attrs = [
'locale',
'external_links_in_new_tab',
'dynamic_favicon',
'enable_quoting',
'disable_jump_reply',
'automatically_unpin_topics',
'allow_private_messages',
'homepage_id',
];
if (makeDefault) {
attrs.push('theme_key');
}
return attrs;
},
preferencesController: Ember.inject.controller('preferences'),
makeThemeDefault: true,
@computed()
availableLocales() {
return this.siteSettings.available_locales.split('|').map(s => ({ name: s, value: s }));
},
@computed()
themeKey() {
return currentThemeKey();
},
userSelectableThemes: function(){
return listThemes(this.site);
}.property(),
@computed("userSelectableThemes")
showThemeSelector(themes) {
return themes && themes.length > 1;
},
@observes("themeKey")
themeKeyChanged() {
let key = this.get("themeKey");
previewTheme(key);
},
homeChanged() {
const siteHome = Discourse.SiteSettings.top_menu.split("|")[0].split(",")[0];
const userHome = USER_HOMES[this.get('model.user_option.homepage_id')];
setDefaultHomepage(userHome || siteHome);
},
@computed()
userSelectableHome() {
return _.map(USER_HOMES, (name, num) => {
return {name: I18n.t('filters.' + name + '.title'), value: Number(num)};
});
},
actions: {
save() {
this.set('saved', false);
const makeThemeDefault = this.get("makeThemeDefault");
if (makeThemeDefault) {
this.set('model.user_option.theme_key', this.get('themeKey'));
}
return this.get('model').save(this.get('saveAttrNames')).then(() => {
this.set('saved', true);
if (!makeThemeDefault) {
setLocalTheme(this.get('themeKey'), this.get('model.user_option.theme_key_seq'));
}
this.homeChanged();
}).catch(popupAjaxError);
}
}
});