discourse/app/assets/javascripts/discourse/widgets/topic-status.js.es6

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