import { iconHTML } from "discourse-common/lib/icon-library"; import { bufferedRender } from "discourse-common/lib/buffered-render"; import { escapeExpression } from "discourse/lib/utilities"; import TopicStatusIcons from "discourse/helpers/topic-status-icons"; import computed from "ember-addons/ember-computed-decorators"; export default Ember.Component.extend( bufferedRender({ classNames: ["topic-statuses"], rerenderTriggers: [ "topic.archived", "topic.closed", "topic.pinned", "topic.visible", "topic.unpinned", "topic.is_warning" ], click(e) { // only pin unpin for now if (this.canAct && $(e.target).hasClass("d-icon-thumbtack")) { const topic = this.topic; topic.get("pinned") ? topic.clearPin() : topic.rePin(); } return false; }, @computed("disableActions") canAct(disableActions) { return Discourse.User.current() && !disableActions; }, buildBuffer(buffer) { const canAct = this.canAct; const topic = this.topic; if (!topic) { return; } TopicStatusIcons.render(topic, function(name, key) { const actionable = ["pinned", "unpinned"].includes(key) && canAct; const title = escapeExpression(I18n.t(`topic_statuses.${key}.help`)), startTag = actionable ? "a href" : "span", endTag = actionable ? "a" : "span", iconArgs = key === "unpinned" ? { class: "unpinned" } : null, icon = iconHTML(name, iconArgs); buffer.push( `<${startTag} title='${title}' class='topic-status'>${icon}` ); }); } }) );