mirror of
https://github.com/discourse/discourse.git
synced 2025-02-14 06:02:45 +08:00
100 lines
2.2 KiB
JavaScript
100 lines
2.2 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) {
|
|
if (!currentUser) {
|
|
return [];
|
|
}
|
|
|
|
let contents = [];
|
|
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 (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).forEach(b => {
|
|
contents.push(this.attach('post-admin-menu-button', b));
|
|
});
|
|
|
|
return contents;
|
|
},
|
|
|
|
clickOutside() {
|
|
this.sendWidgetAction('closeAdminMenu');
|
|
}
|
|
});
|