mirror of
https://github.com/discourse/discourse.git
synced 2025-01-29 14:03:18 +08:00
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
import { createWidget } from 'discourse/widgets/widget';
|
|
import RawHtml from 'discourse/widgets/raw-html';
|
|
import { iconNode } from 'discourse/helpers/fa-icon-node';
|
|
import { h } from 'virtual-dom';
|
|
import { actionDescriptionHtml } from 'discourse/components/small-action';
|
|
import { avatarFor } from 'discourse/widgets/post';
|
|
|
|
const icons = {
|
|
'closed.enabled': 'lock',
|
|
'closed.disabled': 'unlock-alt',
|
|
'autoclosed.enabled': 'lock',
|
|
'autoclosed.disabled': 'unlock-alt',
|
|
'archived.enabled': 'folder',
|
|
'archived.disabled': 'folder-open',
|
|
'pinned.enabled': 'thumb-tack',
|
|
'pinned.disabled': 'thumb-tack unpinned',
|
|
'pinned_globally.enabled': 'thumb-tack',
|
|
'pinned_globally.disabled': 'thumb-tack unpinned',
|
|
'visible.enabled': 'eye',
|
|
'visible.disabled': 'eye-slash',
|
|
'split_topic': 'sign-out',
|
|
'invited_user': 'plus-circle',
|
|
'invited_group': 'plus-circle',
|
|
'removed_user': 'minus-circle',
|
|
'removed_group': 'minus-circle',
|
|
'public_topic': 'comment',
|
|
'private_topic': 'envelope'
|
|
};
|
|
|
|
export function addPostSmallActionIcon(key, icon) {
|
|
icons[key] = icon;
|
|
};
|
|
|
|
export default createWidget('post-small-action', {
|
|
buildKey: attrs => `post-small-act-${attrs.id}`,
|
|
tagName: 'div.small-action.onscreen-post.clearfix',
|
|
|
|
buildId(attrs) {
|
|
return `post_${attrs.post_number}`;
|
|
},
|
|
|
|
buildClasses(attrs) {
|
|
if (attrs.deleted) { return 'deleted'; }
|
|
},
|
|
|
|
html(attrs) {
|
|
const contents = [];
|
|
|
|
if (attrs.canDelete) {
|
|
contents.push(this.attach('button', {
|
|
icon: 'times',
|
|
action: 'deletePost',
|
|
title: 'post.controls.delete'
|
|
}));
|
|
}
|
|
|
|
if (attrs.canEdit) {
|
|
contents.push(this.attach('button', {
|
|
icon: 'pencil',
|
|
action: 'editPost',
|
|
title: 'post.controls.edit'
|
|
}));
|
|
}
|
|
|
|
contents.push(avatarFor.call(this, 'small', {
|
|
template: attrs.avatar_template,
|
|
username: attrs.avatar,
|
|
url: attrs.usernameUrl
|
|
}));
|
|
|
|
const description = actionDescriptionHtml(attrs.actionCode, attrs.created_at, attrs.actionCodeWho);
|
|
contents.push(new RawHtml({ html: `<p>${description}</p>` }));
|
|
|
|
if (attrs.cooked) {
|
|
contents.push(new RawHtml({ html: `<div class='custom-message'>${attrs.cooked}</div>` }));
|
|
}
|
|
|
|
return [
|
|
h('div.topic-avatar', iconNode(icons[attrs.actionCode] || 'exclamation')),
|
|
h('div.small-action-desc', contents)
|
|
];
|
|
}
|
|
});
|