Updated GroupInfoPanel to be markdown enabled, linkable

• Updated:
- GroupInfoPanel to be markdown enabled, linkable for users, hashtags, urls
This commit is contained in:
mgabdev 2020-09-01 18:14:11 -05:00
parent d7cd258977
commit a5ae957ac5
3 changed files with 25 additions and 3 deletions

View File

@ -39,6 +39,7 @@ class GroupInfoPanel extends ImmutablePureComponent {
const isPrivate = !!group ? group.get('is_private') : false const isPrivate = !!group ? group.get('is_private') : false
const isVisible = !!group ? group.get('is_visible') : false const isVisible = !!group ? group.get('is_visible') : false
const tags = !!group ? group.get('tags') : [] const tags = !!group ? group.get('tags') : []
const descriptionHTML = !!group ? { __html: group.get('description_html') } : {}
if (noPanel) { if (noPanel) {
return ( return (
@ -56,7 +57,7 @@ class GroupInfoPanel extends ImmutablePureComponent {
</Text> </Text>
} }
<Text className={[_s.mt10, _s.py2].join(' ')} color='secondary' size='small' align='center'> <Text className={[_s.mt10, _s.py2].join(' ')} color='secondary' size='small' align='center'>
{group.get('description')} <div className={_s.dangerousContent} dangerouslySetInnerHTML={descriptionHTML} />
</Text> </Text>
<div className={[_s.d, _s.mt10, _s.flexRow, _s.jcCenter, _s.aiCenter].join(' ')}> <div className={[_s.d, _s.mt10, _s.flexRow, _s.jcCenter, _s.aiCenter].join(' ')}>
<Text color='secondary' size='small' align='center'> <Text color='secondary' size='small' align='center'>
@ -89,7 +90,7 @@ class GroupInfoPanel extends ImmutablePureComponent {
<React.Fragment> <React.Fragment>
<Text className={_s.mb5}> <Text className={_s.mb5}>
{group.get('description')} <div className={_s.dangerousContent} dangerouslySetInnerHTML={descriptionHTML} />
</Text> </Text>
<Divider isSmall /> <Divider isSmall />

View File

@ -125,6 +125,19 @@ class Formatter
html html
end end
def formatGroupDescription(raw_content)
return '' if raw_content.blank?
html = raw_content
html = format_markdown(html)
html = encode_and_link_urls(html, nil, keep_html: true)
html = html.gsub(/(?:\n\r?|\r\n?)/, '<br />')
html = html.delete("\n")
html.html_safe # rubocop:disable Rails/OutputSafety
html
end
def format_markdown(html) def format_markdown(html)
html = markdown_formatter.render(html) html = markdown_formatter.render(html)
html = html.gsub(/\n/, '<br />') html = html.gsub(/\n/, '<br />')

View File

@ -3,7 +3,7 @@
class REST::GroupSerializer < ActiveModel::Serializer class REST::GroupSerializer < ActiveModel::Serializer
include RoutingHelper include RoutingHelper
attributes :id, :title, :description, :cover_image_url, :is_archived, attributes :id, :title, :description, :description_html, :cover_image_url, :is_archived,
:member_count, :created_at, :is_private, :is_visible, :slug, :tags, :category :member_count, :created_at, :is_private, :is_visible, :slug, :tags, :category
def id def id
@ -14,6 +14,14 @@ class REST::GroupSerializer < ActiveModel::Serializer
object.group_categories_id object.group_categories_id
end end
def description
object.description
end
def description_html
Formatter.instance.formatGroupDescription(object.description).strip
end
def clean_migrated_url def clean_migrated_url
object object
.cover_image_file_name .cover_image_file_name