mirror of
https://github.com/discourse/discourse.git
synced 2024-12-01 11:53:44 +08:00
b9abd7dc9e
This feature can be enabled by choosing a destination for the `shared drafts category` site setting. * Staff members can create shared drafts, choosing a destination category for the topic when it is published. * Shared Drafts can be viewed in their category, or above the topic list for the destination category where it will end up. * When the shared draft is ready, it can be published to the appropriate category by clicking a button on the topic view. * When published, Drafts change their timestamps to the current time, and any edits to the original post are removed.
108 lines
2.7 KiB
JavaScript
108 lines
2.7 KiB
JavaScript
import computed from 'ember-addons/ember-computed-decorators';
|
|
import { categoryLinkHTML } from 'discourse/helpers/category-link';
|
|
|
|
const CUSTOM_TYPES = [
|
|
'bool',
|
|
'enum',
|
|
'list',
|
|
'url_list',
|
|
'host_list',
|
|
'category_list',
|
|
'value_list',
|
|
'category'
|
|
];
|
|
|
|
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) {
|
|
return CUSTOM_TYPES.indexOf(type) !== -1 ? type : 'string';
|
|
},
|
|
|
|
@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();
|
|
}
|
|
}
|
|
});
|