mirror of
https://github.com/discourse/discourse.git
synced 2025-02-09 20:06:16 +08:00
115 lines
2.9 KiB
JavaScript
115 lines
2.9 KiB
JavaScript
import { propertyEqual } from "discourse/lib/computed";
|
|
import { bufferedProperty } from "discourse/mixins/buffered-content";
|
|
import { popupAjaxError } from "discourse/lib/ajax-error";
|
|
|
|
function updateState(state, opts) {
|
|
opts = opts || {};
|
|
|
|
return function() {
|
|
const post = this.get("post");
|
|
const args = { state };
|
|
|
|
if (opts.deleteUser) {
|
|
args.delete_user = true;
|
|
}
|
|
|
|
post
|
|
.update(args)
|
|
.then(() => {
|
|
this.sendAction("removePost", post);
|
|
})
|
|
.catch(popupAjaxError);
|
|
};
|
|
}
|
|
|
|
export default Ember.Component.extend(bufferedProperty("editables"), {
|
|
editing: propertyEqual("post", "currentlyEditing"),
|
|
editables: null,
|
|
_confirmDelete: updateState("rejected", { deleteUser: true }),
|
|
|
|
_initEditables: function() {
|
|
const post = this.get("post");
|
|
const postOptions = post.get("post_options");
|
|
|
|
this.set("editables", {});
|
|
this.set("editables.raw", post.get("raw"));
|
|
this.set("editables.category", post.get("category"));
|
|
this.set("editables.category_id", post.get("category.id"));
|
|
this.set("editables.title", postOptions.title);
|
|
this.set("editables.tags", postOptions.tags);
|
|
}.on("init"),
|
|
|
|
_categoryChanged: function() {
|
|
this.set(
|
|
"buffered.category",
|
|
Discourse.Category.findById(this.get("buffered.category_id"))
|
|
);
|
|
}.observes("buffered.category_id"),
|
|
|
|
editTitleAndCategory: function() {
|
|
return this.get("editing") && !this.get("post.topic");
|
|
}.property("editing"),
|
|
|
|
tags: function() {
|
|
return this.get("editables.tags") || this.get("post.topic.tags") || [];
|
|
}.property("editables.tags"),
|
|
|
|
showTags: function() {
|
|
return (
|
|
this.siteSettings.tagging_enabled &&
|
|
!this.get("editing") &&
|
|
this.get("tags").length > 0
|
|
);
|
|
}.property("editing", "tags"),
|
|
|
|
editTags: function() {
|
|
return (
|
|
this.siteSettings.tagging_enabled &&
|
|
this.get("editing") &&
|
|
!this.get("post.topic")
|
|
);
|
|
}.property("editing"),
|
|
|
|
actions: {
|
|
approve: updateState("approved"),
|
|
reject: updateState("rejected"),
|
|
|
|
deleteUser() {
|
|
bootbox.confirm(
|
|
I18n.t("queue.delete_prompt", {
|
|
username: this.get("post.user.username")
|
|
}),
|
|
confirmed => {
|
|
if (confirmed) {
|
|
this._confirmDelete();
|
|
}
|
|
}
|
|
);
|
|
},
|
|
|
|
edit() {
|
|
// This is stupid but pagedown cannot be on the screen twice or it will break
|
|
this.set("currentlyEditing", null);
|
|
Ember.run.scheduleOnce("afterRender", () =>
|
|
this.set("currentlyEditing", this.get("post"))
|
|
);
|
|
},
|
|
|
|
confirmEdit() {
|
|
const buffered = this.get("buffered");
|
|
|
|
this.get("post")
|
|
.update(buffered.getProperties("raw", "title", "tags", "category_id"))
|
|
.then(() => {
|
|
this.commitBuffer();
|
|
this.set("currentlyEditing", null);
|
|
});
|
|
},
|
|
|
|
cancelEdit() {
|
|
this.rollbackBuffer();
|
|
this.set("currentlyEditing", null);
|
|
}
|
|
}
|
|
});
|