import StringBuffer from 'discourse/mixins/string-buffer'; import { iconHTML } from 'discourse/helpers/fa-icon'; export default Ember.Component.extend(StringBuffer, { tagName: 'section', classNameBindings: [':post-actions', 'hidden'], actionsSummary: Em.computed.alias('post.actionsWithoutLikes'), emptySummary: Em.computed.empty('actionsSummary'), hidden: Em.computed.and('emptySummary', 'post.notDeleted'), rerenderTriggers: ['actionsSummary.@each', 'actionsSummary.users.length', 'post.deleted'], // This was creating way too many bound ifs and subviews in the handlebars version. renderString(buffer) { if (!this.get('emptySummary')) { this.get('actionsSummary').forEach(function(c) { buffer.push("
"); const renderActionIf = function(property, dataAttribute, text) { if (!c.get(property)) { return; } buffer.push(" " + text + "."); }; // TODO multi line expansion for flags let iconsHtml = ""; if (c.get('usersExpanded')) { let postUrl; c.get('users').forEach(function(u) { iconsHtml += ""; if (u.post_url) { postUrl = postUrl || u.post_url; } iconsHtml += Discourse.Utilities.avatarImg({ size: 'small', avatarTemplate: u.get('avatarTemplate'), title: u.get('username') }); iconsHtml += ""; }); let key = 'post.actions.people.' + c.get('actionType.name_key'); if (postUrl) { key = key + "_with_url"; } // TODO postUrl might be uninitialized? pick a good default buffer.push(" " + I18n.t(key, { icons: iconsHtml, postUrl: postUrl}) + "."); } renderActionIf('usersCollapsed', 'who-acted', c.get('description')); renderActionIf('can_undo', 'undo', I18n.t("post.actions.undo." + c.get('actionType.name_key'))); renderActionIf('can_defer_flags', 'defer-flags', I18n.t("post.actions.defer_flags", { count: c.count })); buffer.push("
"); }); } const post = this.get('post'); if (post.get('deleted')) { buffer.push("
" + iconHTML('fa-trash-o') + ' ' + Discourse.Utilities.tinyAvatar(post.get('postDeletedBy.avatar_template'), {title: post.get('postDeletedBy.username')}) + Discourse.Formatter.autoUpdatingRelativeAge(new Date(post.get('postDeletedAt'))) + "
"); } }, actionTypeById(actionTypeId) { return this.get('actionsSummary').findProperty('id', actionTypeId); }, click(e) { const $target = $(e.target); let actionTypeId; const post = this.get('post'); if (actionTypeId = $target.data('defer-flags')) { this.actionTypeById(actionTypeId).deferFlags(post); return false; } // User wants to know who actioned it if (actionTypeId = $target.data('who-acted')) { this.actionTypeById(actionTypeId).loadUsers(post); return false; } if (actionTypeId = $target.data('undo')) { this.get('actionsSummary').findProperty('id', actionTypeId).undo(post); return false; } return false; } });