diff --git a/app/assets/javascripts/discourse/components/expand-post.js.es6 b/app/assets/javascripts/discourse/components/expand-post.js.es6
new file mode 100644
index 00000000000..957750e92f2
--- /dev/null
+++ b/app/assets/javascripts/discourse/components/expand-post.js.es6
@@ -0,0 +1,19 @@
+import { ajax } from 'discourse/lib/ajax';
+
+export default Ember.Component.extend({
+ tagName: '',
+
+ actions: {
+ expandItem() {
+ const item = this.get('item');
+ const topicId = item.get('topic_id');
+ const postNumber = item.get('post_number');
+
+ return ajax(`/posts/by_number/${topicId}/${postNumber}.json`).then(result => {
+ item.set('truncated', false);
+ item.set('excerpt', result.cooked);
+ });
+ }
+ }
+});
+
diff --git a/app/assets/javascripts/discourse/components/stream-item.js.es6 b/app/assets/javascripts/discourse/components/stream-item.js.es6
index e205f50a3f5..26d1e6f8e5a 100644
--- a/app/assets/javascripts/discourse/components/stream-item.js.es6
+++ b/app/assets/javascripts/discourse/components/stream-item.js.es6
@@ -1,22 +1,8 @@
import { propertyEqual } from 'discourse/lib/computed';
import { actionDescription } from "discourse/components/small-action";
-import { ajax } from 'discourse/lib/ajax';
export default Ember.Component.extend({
classNameBindings: [":item", "item.hidden", "item.deleted:deleted", "moderatorAction"],
moderatorAction: propertyEqual("item.post_type", "site.post_types.moderator_action"),
actionDescription: actionDescription("item.action_code", "item.created_at", "item.username"),
-
- actions: {
- expandItem() {
- const item = this.get('item');
- const topicId = item.get('topic_id');
- const postNumber = item.get('post_number');
-
- return ajax(`/posts/by_number/${topicId}/${postNumber}.json`).then(result => {
- item.set('truncated', false);
- item.set('excerpt', result.cooked);
- });
- }
- }
});
diff --git a/app/assets/javascripts/discourse/templates/components/expand-post.hbs b/app/assets/javascripts/discourse/templates/components/expand-post.hbs
new file mode 100644
index 00000000000..4d3192668d1
--- /dev/null
+++ b/app/assets/javascripts/discourse/templates/components/expand-post.hbs
@@ -0,0 +1,5 @@
+{{#if item.truncated}}
+
+ {{fa-icon "chevron-down"}}
+
+{{/if}}
diff --git a/app/assets/javascripts/discourse/templates/components/group-post.hbs b/app/assets/javascripts/discourse/templates/components/group-post.hbs
index 09ac259ce27..bd7f867e86f 100644
--- a/app/assets/javascripts/discourse/templates/components/group-post.hbs
+++ b/app/assets/javascripts/discourse/templates/components/group-post.hbs
@@ -2,6 +2,7 @@
- {{{unbound post.excerpt}}}
+ {{{post.excerpt}}}
diff --git a/app/assets/javascripts/discourse/templates/components/stream-item.hbs b/app/assets/javascripts/discourse/templates/components/stream-item.hbs
index 71c2bb9e333..ea3c9dcec98 100644
--- a/app/assets/javascripts/discourse/templates/components/stream-item.hbs
+++ b/app/assets/javascripts/discourse/templates/components/stream-item.hbs
@@ -1,11 +1,7 @@
{{avatar item imageSize="large" extraClasses="actor" ignoreTitle="true"}}
{{format-date item.created_at}}
- {{#if item.truncated}}
-
- {{fa-icon "chevron-down"}}
-
- {{/if}}
+ {{expand-post item=item}}
{{topic-status topic=item disableActions=true}}
{{{item.title}}}
diff --git a/app/serializers/admin_user_action_serializer.rb b/app/serializers/admin_user_action_serializer.rb
index 6d776de23dc..0cc58aa27a6 100644
--- a/app/serializers/admin_user_action_serializer.rb
+++ b/app/serializers/admin_user_action_serializer.rb
@@ -1,4 +1,7 @@
+require_relative 'post_item_excerpt'
+
class AdminUserActionSerializer < ApplicationSerializer
+ include PostItemExcerpt
attributes(
:id,
@@ -13,7 +16,6 @@ class AdminUserActionSerializer < ApplicationSerializer
:title,
:category_id,
:truncated,
- :excerpt,
:hidden,
:moderator_action,
:deleted,
@@ -23,18 +25,10 @@ class AdminUserActionSerializer < ApplicationSerializer
:action_type
)
- def truncated
- true
- end
-
def post_id
object.id
end
- def include_truncated?
- object.excerpt != object.cooked
- end
-
def deleted
deleted_at.present?
end
diff --git a/app/serializers/group_post_serializer.rb b/app/serializers/group_post_serializer.rb
index 1fb6305e59a..99a06f55340 100644
--- a/app/serializers/group_post_serializer.rb
+++ b/app/serializers/group_post_serializer.rb
@@ -1,10 +1,15 @@
+require_relative 'post_item_excerpt'
+
class GroupPostSerializer < ApplicationSerializer
+ include PostItemExcerpt
+
attributes :id,
- :excerpt,
:created_at,
:title,
:url,
- :category
+ :category,
+ :post_number,
+ :topic_id
has_one :user, serializer: GroupPostUserSerializer, embed: :object
has_one :topic, serializer: BasicTopicSerializer, embed: :object
diff --git a/app/serializers/post_item_excerpt.rb b/app/serializers/post_item_excerpt.rb
new file mode 100644
index 00000000000..be74db9bdf9
--- /dev/null
+++ b/app/serializers/post_item_excerpt.rb
@@ -0,0 +1,25 @@
+module PostItemExcerpt
+
+ def self.included(base)
+ base.attributes(:excerpt, :truncated)
+ end
+
+ def cooked
+ @cooked ||= object.cooked || PrettyText.cook(object.raw)
+ end
+
+ def excerpt
+ return nil unless cooked
+ @excerpt ||= PrettyText.excerpt(cooked, 300, keep_emoji_images: true)
+ end
+
+ def truncated
+ true
+ end
+
+ def include_truncated?
+ cooked.length > 300
+ end
+
+end
+
diff --git a/app/serializers/user_action_serializer.rb b/app/serializers/user_action_serializer.rb
index 2db30ca9077..81b2cb2fe60 100644
--- a/app/serializers/user_action_serializer.rb
+++ b/app/serializers/user_action_serializer.rb
@@ -1,9 +1,10 @@
+require_relative 'post_item_excerpt'
+
class UserActionSerializer < ApplicationSerializer
+ include PostItemExcerpt
attributes :action_type,
:created_at,
- :excerpt,
- :truncated,
:avatar_template,
:acting_avatar_template,
:slug,
@@ -30,22 +31,6 @@ class UserActionSerializer < ApplicationSerializer
:closed,
:archived
- def cooked
- @cooked ||= object.cooked || PrettyText.cook(object.raw)
- end
-
- def excerpt
- return nil unless cooked
- @excerpt ||= PrettyText.excerpt(cooked, 300, keep_emoji_images: true)
- end
-
- def truncated
- true
- end
-
- def include_truncated?
- cooked.length > 300
- end
def avatar_template
User.avatar_template(object.username, object.uploaded_avatar_id)