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.es6
2018-06-15 17:03:24 +02:00

133 lines
2.9 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",
click() {
this.sendWidgetAction("closeAdminMenu");
return this.sendWidgetAction(this.attrs.action);
}
})
);
export function buildManageButtons(attrs, currentUser, siteSettings) {
if (!currentUser) {
return [];
}
let contents = [];
if (currentUser.staff) {
contents.push({
icon: "list",
label: "admin.flags.moderation_history",
action: "showModerationHistory"
});
}
if (!attrs.isWhisper && currentUser.staff) {
const buttonAtts = {
action: "togglePostType",
icon: "shield",
className: "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 (attrs.canManage) {
contents.push({
icon: "cog",
label: "post.controls.rebake",
action: "rebakePost",
className: "rebuild-html"
});
if (attrs.hidden) {
contents.push({
icon: "eye",
label: "post.controls.unhide",
action: "unhidePost",
className: "unhide-post"
});
}
}
if (currentUser.admin) {
contents.push({
icon: "user",
label: "post.controls.change_owner",
action: "changePostOwner",
className: "change-owner"
});
}
if (currentUser.staff) {
if (siteSettings.enable_badges) {
contents.push({
icon: "certificate",
label: "post.controls.grant_badge",
action: "grantBadge",
className: "grant-badge"
});
}
const action = attrs.locked ? "unlock" : "lock";
contents.push({
icon: action,
label: `post.controls.${action}_post`,
action: `${action}Post`,
title: `post.controls.${action}_post_description`,
className: `${action}-post`
});
}
if (attrs.canManage || attrs.canWiki) {
if (attrs.wiki) {
contents.push({
action: "toggleWiki",
label: "post.controls.unwiki",
icon: "pencil-square-o",
className: "wiki wikied"
});
} else {
contents.push({
action: "toggleWiki",
label: "post.controls.wiki",
icon: "pencil-square-o",
className: "wiki"
});
}
}
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 => {
contents.push(this.attach("post-admin-menu-button", b));
}
);
return contents;
},
clickOutside() {
this.sendWidgetAction("closeAdminMenu");
}
});