When converting from hard-coded functions to a map, the key `1` got converted to `"1"`. This broke the drop-down menu.
93 lines
2.4 KiB
JavaScript
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);
|
|
}
|
|
}
|
|
});
|