Fix HTML entities being parsed in GFM
Also fixes the spec so that it actually tests the thing it says it's testing. Hooray! Closes #1308
This commit is contained in:
parent
85def2d625
commit
d993f66642
2 changed files with 17 additions and 6 deletions
|
@ -26,13 +26,13 @@ module Gitlab
|
||||||
# => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" />
|
# => "<img alt=\":trollface:\" class=\"emoji\" src=\"/images/trollface.png" title=\":trollface:\" />
|
||||||
module Markdown
|
module Markdown
|
||||||
REFERENCE_PATTERN = %r{
|
REFERENCE_PATTERN = %r{
|
||||||
([^\w&;])? # Prefix (1)
|
(\W)? # Prefix (1)
|
||||||
( # Reference (2)
|
( # Reference (2)
|
||||||
@([\w\._]+) # User name (3)
|
@([\w\._]+) # User name (3)
|
||||||
|[#!$](\d+) # Issue/MR/Snippet ID (4)
|
|[#!$](\d+) # Issue/MR/Snippet ID (4)
|
||||||
|([\h]{6,40}) # Commit ID (5)
|
|([\h]{6,40}) # Commit ID (5)
|
||||||
)
|
)
|
||||||
([^\w&;])? # Suffix (6)
|
(\W)? # Suffix (6)
|
||||||
}x.freeze
|
}x.freeze
|
||||||
|
|
||||||
EMOJI_PATTERN = %r{(:(\S+):)}.freeze
|
EMOJI_PATTERN = %r{(:(\S+):)}.freeze
|
||||||
|
@ -84,6 +84,13 @@ module Gitlab
|
||||||
#
|
#
|
||||||
# Returns parsed text
|
# Returns parsed text
|
||||||
def parse(text)
|
def parse(text)
|
||||||
|
parse_references(text) if @project
|
||||||
|
parse_emoji(text)
|
||||||
|
|
||||||
|
text
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_references(text)
|
||||||
# parse reference links
|
# parse reference links
|
||||||
text.gsub!(REFERENCE_PATTERN) do |match|
|
text.gsub!(REFERENCE_PATTERN) do |match|
|
||||||
prefix = $1 || ''
|
prefix = $1 || ''
|
||||||
|
@ -91,13 +98,18 @@ module Gitlab
|
||||||
identifier = $3 || $4 || $5
|
identifier = $3 || $4 || $5
|
||||||
suffix = $6 || ''
|
suffix = $6 || ''
|
||||||
|
|
||||||
if ref_link = reference_link(reference, identifier)
|
# Avoid HTML entities
|
||||||
|
if prefix.ends_with?('&') || suffix.starts_with?(';')
|
||||||
|
match
|
||||||
|
elsif ref_link = reference_link(reference, identifier)
|
||||||
prefix + ref_link + suffix
|
prefix + ref_link + suffix
|
||||||
else
|
else
|
||||||
match
|
match
|
||||||
end
|
end
|
||||||
end if @project
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_emoji(text)
|
||||||
# parse emoji
|
# parse emoji
|
||||||
text.gsub!(EMOJI_PATTERN) do |match|
|
text.gsub!(EMOJI_PATTERN) do |match|
|
||||||
if valid_emoji?($2)
|
if valid_emoji?($2)
|
||||||
|
@ -106,8 +118,6 @@ module Gitlab
|
||||||
match
|
match
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
text
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Private: Checks if an emoji icon exists in the image asset directory
|
# Private: Checks if an emoji icon exists in the image asset directory
|
||||||
|
|
|
@ -31,6 +31,7 @@ describe GitlabMarkdownHelper do
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should not touch HTML entities" do
|
it "should not touch HTML entities" do
|
||||||
|
@project.issues.stub(:where).with(id: '39').and_return([issue])
|
||||||
actual = expected = "We'll accept good pull requests."
|
actual = expected = "We'll accept good pull requests."
|
||||||
gfm(actual).should == expected
|
gfm(actual).should == expected
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in a new issue