This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/widgets/post-admin-menu.js
2020-03-12 13:29:55 -04:00

156 lines
3.7 KiB
JavaScript

import { createWidget } from "discourse/widgets/widget";
import { h } from "virtual-dom";
import { ButtonClass } from "discourse/widgets/button";
createWidget(
"post-admin-menu-button",
jQuery.extend(ButtonClass, { tagName: "li.btn" })
);
export function buildManageButtons(attrs, currentUser, siteSettings) {
if (!currentUser) {
return [];
}
let contents = [];
if (currentUser.staff) {
contents.push({
icon: "list",
className: "btn-default",
label: "review.moderation_history",
url: `/review?topic_id=${attrs.topicId}&status=all`
});
}
if (!attrs.isWhisper && currentUser.staff) {
const buttonAtts = {
action: "togglePostType",
icon: "shield-alt",
className: "btn-default toggle-post-type"
};
if (attrs.isModeratorAction) {
buttonAtts.label = "post.controls.revert_to_regular";
} else {
buttonAtts.label = "post.controls.convert_to_moderator";
}
contents.push(buttonAtts);
}
if (currentUser.staff) {
if (attrs.noticeType) {
contents.push({
icon: "user-shield",
label: "post.controls.remove_post_notice",
action: "removeNotice",
className: "btn-default remove-notice"
});
} else {
contents.push({
icon: "user-shield",
label: "post.controls.add_post_notice",
action: "addNotice",
className: "btn-default add-notice"
});
}
}
if (attrs.canManage && attrs.hidden) {
contents.push({
icon: "far-eye",
label: "post.controls.unhide",
action: "unhidePost",
className: "btn-default unhide-post"
});
}
if (currentUser.admin) {
contents.push({
icon: "user",
label: "post.controls.change_owner",
action: "changePostOwner",
className: "btn-default change-owner"
});
}
if (attrs.user_id && currentUser.staff) {
if (siteSettings.enable_badges) {
contents.push({
icon: "certificate",
label: "post.controls.grant_badge",
action: "grantBadge",
className: "btn-default grant-badge"
});
}
if (attrs.locked) {
contents.push({
icon: "unlock",
label: "post.controls.unlock_post",
action: "unlockPost",
title: "post.controls.unlock_post_description",
className: "btn-default unlock-post"
});
} else {
contents.push({
icon: "lock",
label: "post.controls.lock_post",
action: "lockPost",
title: "post.controls.lock_post_description",
className: "btn-default lock-post"
});
}
}
if (attrs.canManage || attrs.canWiki) {
if (attrs.wiki) {
contents.push({
action: "toggleWiki",
label: "post.controls.unwiki",
icon: "far-edit",
className: "btn-default wiki wikied"
});
} else {
contents.push({
action: "toggleWiki",
label: "post.controls.wiki",
icon: "far-edit",
className: "btn-default wiki"
});
}
}
if (attrs.canManage) {
contents.push({
icon: "cog",
label: "post.controls.rebake",
action: "rebakePost",
className: "btn-default rebuild-html"
});
}
return contents;
}
export default createWidget("post-admin-menu", {
tagName: "div.post-admin-menu.popup-menu",
html() {
const contents = [];
contents.push(h("h3", I18n.t("admin_title")));
buildManageButtons(this.attrs, this.currentUser, this.siteSettings).forEach(
b => {
b.secondaryAction = "closeAdminMenu";
contents.push(this.attach("post-admin-menu-button", b));
}
);
return contents;
},
clickOutside() {
this.sendWidgetAction("closeAdminMenu");
}
});