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