mirror of
https://github.com/discourse/discourse.git
synced 2025-01-29 14:03:18 +08:00
43 lines
1.3 KiB
JavaScript
43 lines
1.3 KiB
JavaScript
import { createWidget } from 'discourse/widgets/widget';
|
|
import { iconNode } from 'discourse/helpers/fa-icon-node';
|
|
import { h } from 'virtual-dom';
|
|
import { escapeExpression } from 'discourse/lib/utilities';
|
|
|
|
function renderIcon(name, key, canAct) {
|
|
const iconArgs = key === 'unpinned' ? { 'class': 'unpinned' } : null,
|
|
icon = iconNode(name, iconArgs);
|
|
|
|
const attributes = { title: escapeExpression(I18n.t(`topic_statuses.${key}.help`)) };
|
|
return h(`${canAct ? 'a' : 'span'}.topic-status`, attributes, icon);
|
|
}
|
|
|
|
export default createWidget('topic-status', {
|
|
tagName: 'div.topic-statuses',
|
|
|
|
html(attrs) {
|
|
const topic = attrs.topic;
|
|
const canAct = this.currentUser && !attrs.disableActions;
|
|
|
|
const result = [];
|
|
const renderIconIf = (conditionProp, name, key) => {
|
|
if (!topic.get(conditionProp)) { return; }
|
|
result.push(renderIcon(name, key, canAct));
|
|
};
|
|
|
|
renderIconIf('is_warning', 'envelope', 'warning');
|
|
|
|
if (topic.get('closed') && topic.get('archived')) {
|
|
renderIcon('lock', 'locked_and_archived');
|
|
} else {
|
|
renderIconIf('closed', 'lock', 'locked');
|
|
renderIconIf('archived', 'lock', 'archived');
|
|
}
|
|
|
|
renderIconIf('pinned', 'thumb-tack', 'pinned');
|
|
renderIconIf('unpinned', 'thumb-tack', 'unpinned');
|
|
renderIconIf('invisible', 'eye-slash', 'invisible');
|
|
|
|
return result;
|
|
}
|
|
});
|