2018-03-04 19:04:23 -05:00
|
|
|
import computed from 'ember-addons/ember-computed-decorators';
|
|
|
|
import { categoryLinkHTML } from 'discourse/helpers/category-link';
|
|
|
|
|
2018-03-13 15:59:12 -04:00
|
|
|
const CUSTOM_TYPES = [
|
|
|
|
'bool',
|
|
|
|
'enum',
|
|
|
|
'list',
|
|
|
|
'url_list',
|
|
|
|
'host_list',
|
|
|
|
'category_list',
|
|
|
|
'value_list',
|
|
|
|
'category'
|
|
|
|
];
|
2018-03-04 19:04:23 -05:00
|
|
|
|
|
|
|
export default Ember.Mixin.create({
|
|
|
|
classNameBindings: [':row', ':setting', 'setting.overridden', 'typeClass'],
|
|
|
|
content: Ember.computed.alias('setting'),
|
|
|
|
validationMessage: null,
|
|
|
|
|
|
|
|
@computed("buffered.value", "setting.value")
|
|
|
|
dirty(bufferVal, settingVal) {
|
|
|
|
if (bufferVal === null || bufferVal === undefined) bufferVal = '';
|
|
|
|
if (settingVal === null || settingVal === undefined) settingVal = '';
|
|
|
|
|
|
|
|
return bufferVal.toString() !== settingVal.toString();
|
|
|
|
},
|
|
|
|
|
|
|
|
@computed("setting", "buffered.value")
|
|
|
|
preview(setting, value) {
|
|
|
|
// A bit hacky, but allows us to use helpers
|
|
|
|
if (setting.get('setting') === 'category_style') {
|
|
|
|
let category = this.site.get('categories.firstObject');
|
|
|
|
if (category) {
|
|
|
|
return categoryLinkHTML(category, {
|
|
|
|
categoryStyle: value
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let preview = setting.get('preview');
|
|
|
|
if (preview) {
|
|
|
|
return new Handlebars.SafeString("<div class='preview'>" + preview.replace(/\{\{value\}\}/g, value) + "</div>");
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
@computed('componentType')
|
|
|
|
typeClass(componentType) {
|
|
|
|
return componentType.replace(/\_/g, '-');
|
|
|
|
},
|
|
|
|
|
|
|
|
@computed("setting.setting")
|
|
|
|
settingName(setting) {
|
|
|
|
return setting.replace(/\_/g, ' ');
|
|
|
|
},
|
|
|
|
|
|
|
|
@computed("setting.type")
|
|
|
|
componentType(type) {
|
2018-03-13 15:59:12 -04:00
|
|
|
return CUSTOM_TYPES.indexOf(type) !== -1 ? type : 'string';
|
2018-03-04 19:04:23 -05:00
|
|
|
},
|
|
|
|
|
|
|
|
@computed("typeClass")
|
|
|
|
componentName(typeClass) {
|
|
|
|
return "site-settings/" + typeClass;
|
|
|
|
},
|
|
|
|
|
|
|
|
_watchEnterKey: function() {
|
|
|
|
const self = this;
|
|
|
|
this.$().on("keydown.setting-enter", ".input-setting-string", function (e) {
|
|
|
|
if (e.keyCode === 13) { // enter key
|
|
|
|
self._save();
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}.on('didInsertElement'),
|
|
|
|
|
|
|
|
_removeBindings: function() {
|
|
|
|
this.$().off("keydown.setting-enter");
|
|
|
|
}.on("willDestroyElement"),
|
|
|
|
|
|
|
|
_save() {
|
|
|
|
Em.warn("You should define a `_save` method", { id: "admin.mixins.setting-component" });
|
|
|
|
return Ember.RSVP.resolve();
|
|
|
|
},
|
|
|
|
|
|
|
|
actions: {
|
|
|
|
save() {
|
|
|
|
this._save().then(() => {
|
|
|
|
this.set('validationMessage', null);
|
|
|
|
this.commitBuffer();
|
|
|
|
}).catch(e => {
|
|
|
|
if (e.jqXHR.responseJSON && e.jqXHR.responseJSON.errors) {
|
|
|
|
this.set('validationMessage', e.jqXHR.responseJSON.errors[0]);
|
|
|
|
} else {
|
|
|
|
this.set('validationMessage', I18n.t('generic_error'));
|
|
|
|
}
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
resetDefault() {
|
|
|
|
this.set('buffered.value', this.get('setting.default'));
|
|
|
|
this._save();
|
|
|
|
},
|
|
|
|
|
|
|
|
cancel() {
|
|
|
|
this.rollbackBuffer();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|