discourse/app/assets/javascripts/discourse/widgets/post-admin-menu.js.es6
2017-10-05 17:47:52 -04:00

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');
}
});