diff --git a/app/assets/javascripts/discourse/components/discourse-action-history.js.es6 b/app/assets/javascripts/discourse/components/discourse-action-history.js.es6
index 7dba3c5828c..ec38fca1ad7 100644
--- a/app/assets/javascripts/discourse/components/discourse-action-history.js.es6
+++ b/app/assets/javascripts/discourse/components/discourse-action-history.js.es6
@@ -10,20 +10,20 @@ export default Em.Component.extend(StringBuffer, {
rerenderTriggers: ['actionsHistory.@each', 'actionsHistory.users.length', 'post.deleted'],
// This was creating way too many bound ifs and subviews in the handlebars version.
- renderString: function(buffer) {
+ renderString(buffer) {
if (!this.get('emptyHistory')) {
this.get('actionsHistory').forEach(function(c) {
buffer.push("
");
- var renderActionIf = function(property, dataAttribute, text) {
+ const renderActionIf = function(property, dataAttribute, text) {
if (!c.get(property)) { return; }
buffer.push("
" + text + ".");
};
// TODO multi line expansion for flags
- var iconsHtml = "";
+ let iconsHtml = "";
if (c.get('usersExpanded')) {
- var postUrl;
+ let postUrl;
c.get('users').forEach(function(u) {
iconsHtml += "
";
if (u.post_url) {
@@ -37,7 +37,7 @@ export default Em.Component.extend(StringBuffer, {
iconsHtml += "";
});
- var key = 'post.actions.people.' + c.get('actionType.name_key');
+ 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
@@ -52,7 +52,7 @@ export default Em.Component.extend(StringBuffer, {
});
}
- var post = this.get('post');
+ const post = this.get('post');
if (post.get('deleted')) {
buffer.push("
" +
" " +
@@ -62,32 +62,34 @@ export default Em.Component.extend(StringBuffer, {
}
},
- actionTypeById: function(actionTypeId) {
+ actionTypeById(actionTypeId) {
return this.get('actionsHistory').findProperty('id', actionTypeId);
},
- click: function(e) {
- var $target = $(e.target),
- actionTypeId;
+ click(e) {
+ const $target = $(e.target);
+ let actionTypeId;
+
+ const post = this.get('post');
if (actionTypeId = $target.data('defer-flags')) {
- this.actionTypeById(actionTypeId).deferFlags();
+ this.actionTypeById(actionTypeId).deferFlags(post);
return false;
}
// User wants to know who actioned it
if (actionTypeId = $target.data('who-acted')) {
- this.actionTypeById(actionTypeId).loadUsers();
+ this.actionTypeById(actionTypeId).loadUsers(post);
return false;
}
if (actionTypeId = $target.data('act')) {
- this.get('actionsHistory').findProperty('id', actionTypeId).act();
+ this.get('actionsHistory').findProperty('id', actionTypeId).act(post);
return false;
}
if (actionTypeId = $target.data('undo')) {
- this.get('actionsHistory').findProperty('id', actionTypeId).undo();
+ this.get('actionsHistory').findProperty('id', actionTypeId).undo(post);
return false;
}
diff --git a/app/assets/javascripts/discourse/controllers/flag.js.es6 b/app/assets/javascripts/discourse/controllers/flag.js.es6
index ed47740aa03..4691318c29d 100644
--- a/app/assets/javascripts/discourse/controllers/flag.js.es6
+++ b/app/assets/javascripts/discourse/controllers/flag.js.es6
@@ -81,7 +81,8 @@ export default ObjectController.extend(ModalFunctionality, {
if (opts) params = $.extend(params, opts);
this.send('hideModal');
- postAction.act(params).then(function() {
+
+ postAction.act(this.get('model'), params).then(function() {
self.send('closeModal');
}, function(errors) {
self.send('closeModal');
diff --git a/app/assets/javascripts/discourse/controllers/topic.js.es6 b/app/assets/javascripts/discourse/controllers/topic.js.es6
index c532e55ea18..205c750075d 100644
--- a/app/assets/javascripts/discourse/controllers/topic.js.es6
+++ b/app/assets/javascripts/discourse/controllers/topic.js.es6
@@ -150,7 +150,7 @@ export default ObjectController.extend(Discourse.SelectedPostsCount, BufferedCon
toggleLike(post) {
const likeAction = post.get('actionByName.like');
if (likeAction && likeAction.get('canToggle')) {
- likeAction.toggle();
+ likeAction.toggle(post);
}
},
diff --git a/app/assets/javascripts/discourse/models/action_summary.js b/app/assets/javascripts/discourse/models/action_summary.js
index c6140dc9641..0f53c58d6f6 100644
--- a/app/assets/javascripts/discourse/models/action_summary.js
+++ b/app/assets/javascripts/discourse/models/action_summary.js
@@ -1,11 +1,3 @@
-/**
- A data model for summarizing actions a user has taken, for example liking a post.
-
- @class ActionSummary
- @extends Discourse.Model
- @namespace Discourse
- @module Discourse
-**/
Discourse.ActionSummary = Discourse.Model.extend({
// Description for the action
@@ -44,16 +36,16 @@ Discourse.ActionSummary = Discourse.Model.extend({
}
},
- toggle: function() {
+ toggle: function(post) {
if (!this.get('acted')) {
- this.act();
+ this.act(post);
} else {
- this.undo();
+ this.undo(post);
}
},
// Perform this action
- act: function(opts) {
+ act: function(post, opts) {
if (!opts) opts = {};
var action = this.get('actionType.name_key');
@@ -82,18 +74,14 @@ Discourse.ActionSummary = Discourse.Model.extend({
return Discourse.ajax("/post_actions", {
type: 'POST',
data: {
- id: this.get('flagTopic') ? this.get('flagTopic.id') : this.get('post.id'),
+ id: this.get('flagTopic') ? this.get('flagTopic.id') : post.get('id'),
post_action_type_id: this.get('id'),
message: opts.message,
take_action: opts.takeAction,
flag_topic: this.get('flagTopic') ? true : false
}
}).then(function(result) {
- var post = self.get('post');
- if (post && result && result.id === post.get('id')) {
- post.updateFromJson(result);
- }
- return post;
+ return post.updateActionsSummary(result);
}).catch(function (error) {
self.removeAction();
var message = $.parseJSON(error.responseText).errors;
@@ -102,43 +90,38 @@ Discourse.ActionSummary = Discourse.Model.extend({
},
// Undo this action
- undo: function() {
+ undo: function(post) {
this.removeAction();
// Remove our post action
- var self = this;
- return Discourse.ajax("/post_actions/" + (this.get('post.id')), {
+ return Discourse.ajax("/post_actions/" + post.get('id'), {
type: 'DELETE',
data: {
post_action_type_id: this.get('id')
}
}).then(function(result) {
- var post = self.get('post');
- if (post && result && result.id === post.get('id')) {
- post.updateFromJson(result);
- }
- return post;
+ return post.updateActionsSummary(result);
});
},
- deferFlags: function() {
+ deferFlags: function(post) {
var self = this;
return Discourse.ajax("/post_actions/defer_flags", {
type: "POST",
data: {
post_action_type_id: this.get("id"),
- id: this.get("post.id")
+ id: post.get('id')
}
}).then(function () {
self.set("count", 0);
});
},
- loadUsers: function() {
+ loadUsers: function(post) {
var self = this;
Discourse.ajax("/post_actions/users", {
data: {
- id: this.get('post.id'),
+ id: post.get('id'),
post_action_type_id: this.get('id')
}
}).then(function (result) {
diff --git a/app/assets/javascripts/discourse/models/post.js.es6 b/app/assets/javascripts/discourse/models/post.js.es6
index 350f2e3c43d..e424d8111cb 100644
--- a/app/assets/javascripts/discourse/models/post.js.es6
+++ b/app/assets/javascripts/discourse/models/post.js.es6
@@ -332,6 +332,13 @@ const Post = RestModel.extend({
if (bookmarkedTopic) {self.set("topic.bookmarked", false); }
throw e;
});
+ },
+
+ updateActionsSummary(json) {
+ if (json && json.id === this.get('id')) {
+ json = Post.munge(json);
+ this.set('actions_summary', json.actions_summary);
+ }
}
});
@@ -343,7 +350,6 @@ Post.reopenClass({
const lookup = Em.Object.create();
// this area should be optimized, it is creating way too many objects per post
json.actions_summary = json.actions_summary.map(function(a) {
- a.post = json;
a.actionType = Discourse.Site.current().postActionTypeById(a.id);
const actionSummary = Discourse.ActionSummary.create(a);
lookup[a.actionType.name_key] = actionSummary;