2018-02-01 23:42:56 +08:00
|
|
|
import DropdownSelectBoxComponent from "select-kit/components/dropdown-select-box";
|
|
|
|
import { default as computed } from "ember-addons/ember-computed-decorators";
|
|
|
|
import { default as Composer, REPLY, EDIT } from "discourse/models/composer";
|
|
|
|
|
|
|
|
export default DropdownSelectBoxComponent.extend({
|
|
|
|
composerController: Ember.inject.controller("composer"),
|
|
|
|
pluginApiIdentifiers: ["composer-actions"],
|
|
|
|
classNames: "composer-actions",
|
|
|
|
fullWidthOnMobile: true,
|
|
|
|
autofilterable: false,
|
|
|
|
filterable: false,
|
|
|
|
allowInitialValueMutation: false,
|
|
|
|
allowAutoSelectFirst: false,
|
|
|
|
showFullTitle: false,
|
|
|
|
|
|
|
|
computeHeaderContent() {
|
|
|
|
let content = this.baseHeaderComputedContent();
|
|
|
|
|
|
|
|
switch (this.get("action")) {
|
|
|
|
case REPLY:
|
|
|
|
content.icon = "mail-forward";
|
|
|
|
break;
|
|
|
|
case EDIT:
|
|
|
|
content.icon = "pencil";
|
|
|
|
break;
|
|
|
|
};
|
|
|
|
|
|
|
|
return content;
|
|
|
|
},
|
|
|
|
|
2018-02-02 06:07:37 +08:00
|
|
|
@computed("options", "canWhisper", "composerModel.post.username")
|
|
|
|
content(options, canWhisper, postUsername) {
|
2018-02-01 23:42:56 +08:00
|
|
|
let items = [
|
|
|
|
{
|
|
|
|
name: I18n.t("composer.composer_actions.reply_as_new_topic.label"),
|
|
|
|
description: I18n.t("composer.composer_actions.reply_as_new_topic.desc"),
|
|
|
|
icon: "plus",
|
|
|
|
id: "reply_as_new_topic"
|
|
|
|
}
|
|
|
|
];
|
|
|
|
|
|
|
|
if (postUsername && postUsername !== this.currentUser.get("username")) {
|
|
|
|
items.push({
|
|
|
|
name: I18n.t("composer.composer_actions.reply_as_private_message.label"),
|
|
|
|
description: I18n.t("composer.composer_actions.reply_as_private_message.desc"),
|
|
|
|
icon: "envelope",
|
|
|
|
id: "reply_as_private_message"
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (Ember.get(options, "postLink")) {
|
|
|
|
items.push({
|
|
|
|
name: I18n.t("composer.composer_actions.reply_to_topic.label"),
|
|
|
|
description: I18n.t("composer.composer_actions.reply_to_topic.desc"),
|
|
|
|
icon: "mail-forward",
|
|
|
|
id: "reply_to_topic"
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
if (canWhisper) {
|
2018-02-02 06:07:37 +08:00
|
|
|
items.push({
|
|
|
|
name: I18n.t("composer.composer_actions.toggle_whisper.label"),
|
|
|
|
description: I18n.t("composer.composer_actions.toggle_whisper.desc"),
|
|
|
|
icon: "eye-slash",
|
|
|
|
id: "toggle_whisper"
|
|
|
|
});
|
2018-02-01 23:42:56 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
return items;
|
|
|
|
},
|
|
|
|
|
|
|
|
_replyFromExisting(options) {
|
|
|
|
const topicTitle = this.get("composerModel.topic.title");
|
|
|
|
let url = this.get("composerModel.post.url") || this.get("composerModel.topic.url");
|
|
|
|
|
|
|
|
this.get("composerController").open(options).then(() => {
|
|
|
|
url = `${location.protocol}//${location.host}${url}`;
|
|
|
|
const link = `[${Handlebars.escapeExpression(topicTitle)}](${url})`;
|
|
|
|
this.get("composerController").get("model").prependText(`${I18n.t("post.continue_discussion", { postLink: link })}`, {new_line: true});
|
|
|
|
});
|
|
|
|
},
|
|
|
|
|
|
|
|
actions: {
|
|
|
|
onSelect(value) {
|
|
|
|
switch(value) {
|
2018-02-02 06:07:37 +08:00
|
|
|
case "toggle_whisper":
|
|
|
|
this.set("composerModel.whisper", !this.get("composerModel.whisper"));
|
2018-02-01 23:42:56 +08:00
|
|
|
break;
|
|
|
|
|
|
|
|
case "reply_to_topic":
|
|
|
|
this.set("composerModel.post", null);
|
|
|
|
this.get("composerController").save();
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "reply_as_new_topic":
|
|
|
|
const replyAsNewTopicOpts = {
|
|
|
|
action: Composer.CREATE_TOPIC,
|
|
|
|
draftKey: Composer.REPLY_AS_NEW_TOPIC_KEY,
|
|
|
|
categoryId: this.get("composerModel.topic.category.id")
|
|
|
|
};
|
|
|
|
this._replyFromExisting(replyAsNewTopicOpts);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case "reply_as_private_message":
|
|
|
|
const replyAsPrivateMsgOpts = {
|
|
|
|
action: Composer.PRIVATE_MESSAGE,
|
|
|
|
archetypeId: "private_message",
|
|
|
|
draftKey: Composer.REPLY_AS_NEW_PRIVATE_MESSAGE_KEY,
|
|
|
|
usernames: this.get("composerModel.post.username")
|
|
|
|
};
|
|
|
|
this._replyFromExisting(replyAsPrivateMsgOpts);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|