Commit 3e29936a authored by Eric Eastwood's avatar Eric Eastwood

Fix first line markdown helper for user profile activity stream

Fix https://gitlab.com/gitlab-org/gitlab-ce/issues/29425
parent ffcddb29
...@@ -165,8 +165,8 @@ module EventsHelper ...@@ -165,8 +165,8 @@ module EventsHelper
sanitize( sanitize(
text, text,
tags: %w(a img b pre code p span), tags: %w(a img gl-emoji b pre code p span),
attributes: Rails::Html::WhiteListSanitizer.allowed_attributes + ['style'] attributes: Rails::Html::WhiteListSanitizer.allowed_attributes + ['style', 'data-name', 'data-unicode-version']
) )
end end
......
...@@ -172,7 +172,7 @@ module GitlabMarkdownHelper ...@@ -172,7 +172,7 @@ module GitlabMarkdownHelper
# text hasn't already been truncated, then append "..." to the node contents # text hasn't already been truncated, then append "..." to the node contents
# and return true. Otherwise return false. # and return true. Otherwise return false.
def truncate_if_block(node, truncated) def truncate_if_block(node, truncated)
if node.element? && node.description.block? && !truncated if node.element? && node.description&.block? && !truncated
node.inner_html = "#{node.inner_html}..." if node.next_sibling node.inner_html = "#{node.inner_html}..." if node.next_sibling
true true
else else
......
...@@ -152,9 +152,8 @@ describe GitlabMarkdownHelper do ...@@ -152,9 +152,8 @@ describe GitlabMarkdownHelper do
end end
describe '#first_line_in_markdown' do describe '#first_line_in_markdown' do
let(:text) { "@#{user.username}, can you look at this?\nHello world\n"}
it 'truncates Markdown properly' do it 'truncates Markdown properly' do
text = "@#{user.username}, can you look at this?\nHello world\n"
actual = first_line_in_markdown(text, 100, project: project) actual = first_line_in_markdown(text, 100, project: project)
doc = Nokogiri::HTML.parse(actual) doc = Nokogiri::HTML.parse(actual)
...@@ -169,6 +168,23 @@ describe GitlabMarkdownHelper do ...@@ -169,6 +168,23 @@ describe GitlabMarkdownHelper do
expect(doc.content).to eq "@#{user.username}, can you look at this?..." expect(doc.content).to eq "@#{user.username}, can you look at this?..."
end end
it 'truncates Markdown with emoji properly' do
text = "foo :wink:\nbar :grinning:"
actual = first_line_in_markdown(text, 100, project: project)
doc = Nokogiri::HTML.parse(actual)
# Make sure we didn't create invalid markup
# But also account for the 2 errors caused by the unknown `gl-emoji` elements
expect(doc.errors.length).to eq(2)
expect(doc.css('gl-emoji').length).to eq(2)
expect(doc.css('gl-emoji')[0].attr('data-name')).to eq 'wink'
expect(doc.css('gl-emoji')[1].attr('data-name')).to eq 'grinning'
expect(doc.content).to eq "foo 😉\nbar 😀"
end
end end
describe '#cross_project_reference' do describe '#cross_project_reference' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment