133 lines
2.9 KiB
JavaScript
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");
|
|
}
|
|
});
|