Commit 7fc09da4 authored by Robert Speicher's avatar Robert Speicher

Merge branch '44587-autolinking-includes-trailing-exclamation-marks' into 'master'

Resolve "Autolinking includes trailing exclamation marks"

Closes #44587

See merge request gitlab-org/gitlab-ce!17965
parents 757da4dd 058dd193
---
title: Don't capture trailing punctuation when autolinking
merge_request: 17965
author:
type: fixed
...@@ -21,12 +21,13 @@ module Banzai ...@@ -21,12 +21,13 @@ module Banzai
# #
# See http://en.wikipedia.org/wiki/URI_scheme # See http://en.wikipedia.org/wiki/URI_scheme
# #
# The negative lookbehind ensures that users can paste a URL followed by a # The negative lookbehind ensures that users can paste a URL followed by
# period or comma for punctuation without those characters being included # punctuation without those characters being included in the generated
# in the generated link. # link. It matches the behaviour of Rinku 2.0.1:
# https://github.com/vmg/rinku/blob/v2.0.1/ext/rinku/autolink.c#L65
# #
# Rubular: http://rubular.com/r/JzPhi6DCZp # Rubular: http://rubular.com/r/nrL3r9yUiq
LINK_PATTERN = %r{([a-z][a-z0-9\+\.-]+://[^\s>]+)(?<!,|\.)} LINK_PATTERN = %r{([a-z][a-z0-9\+\.-]+://[^\s>]+)(?<!\?|!|\.|,|:)}
# Text matching LINK_PATTERN inside these elements will not be linked # Text matching LINK_PATTERN inside these elements will not be linked
IGNORE_PARENTS = %w(a code kbd pre script style).to_set IGNORE_PARENTS = %w(a code kbd pre script style).to_set
......
...@@ -122,15 +122,11 @@ describe Banzai::Filter::AutolinkFilter do ...@@ -122,15 +122,11 @@ describe Banzai::Filter::AutolinkFilter do
end end
it 'does not include trailing punctuation' do it 'does not include trailing punctuation' do
doc = filter("See #{link}.") ['.', ', ok?', '...', '?', '!', ': is that ok?'].each do |trailing_punctuation|
expect(doc.at_css('a').text).to eq link doc = filter("See #{link}#{trailing_punctuation}")
doc = filter("See #{link}, ok?")
expect(doc.at_css('a').text).to eq link
doc = filter("See #{link}...")
expect(doc.at_css('a').text).to eq link expect(doc.at_css('a').text).to eq link
end end
end
it 'includes trailing punctuation when part of a balanced pair' do it 'includes trailing punctuation when part of a balanced pair' do
described_class::PUNCTUATION_PAIRS.each do |close, open| described_class::PUNCTUATION_PAIRS.each do |close, open|
......
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