/** This view renders a menu below a post. It uses buffered rendering for performance. @class PostMenuView @extends Discourse.View @namespace Discourse @module Discourse **/ Discourse.PostMenuView = Discourse.View.extend({ tagName: 'section', classNames: ['post-menu-area', 'clearfix'], render: function(buffer) { var post = this.get('post'); this.renderReplies(post, buffer); buffer.push(""); }, // Delegate click actions click: function(e) { var $target = $(e.target); var action = $target.data('action') || $target.parent().data('action'); if (!action) return; var handler = this["click" + action.capitalize()]; if (!handler) return; handler.call(this); }, // Trigger re-rendering needsToRender: function() { this.rerender(); }.observes('post.deleted_at', 'post.flagsAvailable.@each', 'post.url', 'post.bookmarked', 'post.reply_count', 'post.showRepliesBelow', 'post.can_delete'), // Replies Button renderReplies: function(post, buffer) { if (!post.get('showRepliesBelow')) return; var reply_count = post.get('reply_count'); buffer.push(""); }, clickReplies: function() { this.get('postView').showReplies(); }, // Delete button renderDelete: function(post, buffer) { if (post.get('post_number') === 1 && this.get('controller.content.can_delete')) { buffer.push(""); return; } // Show the correct button (undo or delete) if (post.get('deleted_at')) { if (post.get('can_recover')) { buffer.push(""); } } else if (post.get('can_delete')) { buffer.push(""); } }, clickDeleteTopic: function() { this.get('controller').deleteTopic(); }, clickRecover: function() { this.get('controller').recoverPost(this.get('post')); }, clickDelete: function() { this.get('controller').deletePost(this.get('post')); }, // Like button renderLike: function(post, buffer) { if (!post.get('actionByName.like.can_act')) return; buffer.push(""); }, clickLike: function() { var likeAction = this.get('post.actionByName.like'); if (likeAction) likeAction.act(); }, // Flag button renderFlag: function(post, buffer) { if (!this.present('post.flagsAvailable')) return; buffer.push(""); }, clickFlag: function() { this.get('controller').send('showFlags', this.get('post')); }, // Edit button renderEdit: function(post, buffer) { if (!post.get('can_edit')) return; buffer.push(""); }, clickEdit: function() { this.get('controller').editPost(this.get('post')); }, // Share button renderShare: function(post, buffer) { buffer.push(""); }, // Reply button renderReply: function(post, buffer) { if (!this.get('controller.content.can_create_post')) return; buffer.push(""); }, clickReply: function() { this.get('controller').replyToPost(this.get('post')); }, // Bookmark button renderBookmark: function(post, buffer) { if (!Discourse.User.current()) return; var icon = 'bookmark'; if (!this.get('post.bookmarked')) { icon += '-empty'; } buffer.push(""); }, clickBookmark: function() { this.get('post').toggleProperty('bookmarked'); } });