Add data-[type]-id
attribute to reference links
This is to let us redact them later in another filter.
This commit is contained in:
parent
5fb5fd253a
commit
32e63ba7a1
15 changed files with 96 additions and 8 deletions
|
@ -57,10 +57,11 @@ module Gitlab
|
|||
|
||||
title = range.reference_title
|
||||
klass = reference_class(:commit_range)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
project_ref += '@' if project_ref
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
title="#{title}"
|
||||
class="#{klass}">#{project_ref}#{range}</a>)
|
||||
else
|
||||
|
|
|
@ -47,10 +47,11 @@ module Gitlab
|
|||
|
||||
title = escape_once(commit.link_title)
|
||||
klass = reference_class(:commit)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
project_ref += '@' if project_ref
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
title="#{title}"
|
||||
class="#{klass}">#{project_ref}#{commit.short_id}</a>)
|
||||
else
|
||||
|
|
|
@ -49,8 +49,9 @@ module Gitlab
|
|||
|
||||
title = escape_once("Issue: #{issue.title}")
|
||||
klass = reference_class(:issue)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
title="#{title}"
|
||||
class="#{klass}">#{match}</a>)
|
||||
else
|
||||
|
|
|
@ -43,8 +43,9 @@ module Gitlab
|
|||
|
||||
url = url_for_label(project, label)
|
||||
klass = reference_class(:label)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
class="#{klass}">#{render_colored_label(label)}</a>)
|
||||
else
|
||||
match
|
||||
|
|
|
@ -47,10 +47,11 @@ module Gitlab
|
|||
|
||||
title = escape_once("Merge Request: #{merge_request.title}")
|
||||
klass = reference_class(:merge_request)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
url = url_for_merge_request(merge_request, project)
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
title="#{title}"
|
||||
class="#{klass}">#{match}</a>)
|
||||
else
|
||||
|
|
|
@ -21,6 +21,22 @@ module Gitlab
|
|||
result[:references] = Hash.new { |hash, type| hash[type] = [] }
|
||||
end
|
||||
|
||||
# Returns a data attribute String to attach to a reference link
|
||||
#
|
||||
# id - Object ID
|
||||
# type - Object type (default: :project)
|
||||
#
|
||||
# Examples:
|
||||
#
|
||||
# data_attribute(1) # => "data-project-id=\"1\""
|
||||
# data_attribute(2, :user) # => "data-user-id=\"2\""
|
||||
# data_attribute(3, :group) # => "data-group-id=\"3\""
|
||||
#
|
||||
# Returns a String
|
||||
def data_attribute(id, type = :project)
|
||||
%Q(data-#{type}-id="#{id}")
|
||||
end
|
||||
|
||||
def escape_once(html)
|
||||
ERB::Util.html_escape_once(html)
|
||||
end
|
||||
|
|
|
@ -47,10 +47,11 @@ module Gitlab
|
|||
|
||||
title = escape_once("Snippet: #{snippet.title}")
|
||||
klass = reference_class(:snippet)
|
||||
data = data_attribute(project.id)
|
||||
|
||||
url = url_for_snippet(snippet, project)
|
||||
|
||||
%(<a href="#{url}"
|
||||
%(<a href="#{url}" #{data}
|
||||
title="#{title}"
|
||||
class="#{klass}">#{match}</a>)
|
||||
else
|
||||
|
|
|
@ -83,18 +83,20 @@ module Gitlab
|
|||
push_result(:user, *namespace.users)
|
||||
|
||||
url = urls.group_url(group, only_path: context[:only_path])
|
||||
data = data_attribute(namespace.id, :group)
|
||||
|
||||
text = Group.reference_prefix + group
|
||||
%(<a href="#{url}" class="#{link_class}">#{text}</a>)
|
||||
%(<a href="#{url}" #{data} class="#{link_class}">#{text}</a>)
|
||||
end
|
||||
|
||||
def link_to_user(user, namespace)
|
||||
push_result(:user, namespace.owner)
|
||||
|
||||
url = urls.user_url(user, only_path: context[:only_path])
|
||||
data = data_attribute(namespace.owner_id, :user)
|
||||
|
||||
text = User.reference_prefix + user
|
||||
%(<a href="#{url}" class="#{link_class}">#{text}</a>)
|
||||
%(<a href="#{url}" #{data} class="#{link_class}">#{text}</a>)
|
||||
end
|
||||
|
||||
def user_can_reference_group?(group)
|
||||
|
|
|
@ -80,6 +80,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("See #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path option' do
|
||||
doc = filter("See #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -76,6 +76,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("See #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path context' do
|
||||
doc = filter("See #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -73,6 +73,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("Issue #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path context' do
|
||||
doc = filter("Issue #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -30,6 +30,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("Label #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path context' do
|
||||
doc = filter("Label #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -61,6 +61,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("Merge #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path context' do
|
||||
doc = filter("Merge #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -60,6 +60,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('class')).to include 'custom'
|
||||
end
|
||||
|
||||
it 'includes a data-project-id attribute' do
|
||||
doc = filter("Snippet #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-project-id')
|
||||
expect(link.attr('data-project-id')).to eq project.id.to_s
|
||||
end
|
||||
|
||||
it 'supports an :only_path context' do
|
||||
doc = filter("Snippet #{reference}", only_path: true)
|
||||
link = doc.css('a').first.attr('href')
|
||||
|
|
|
@ -64,6 +64,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').length).to eq 1
|
||||
end
|
||||
|
||||
it 'includes a data-user-id attribute' do
|
||||
doc = filter("Hey #{reference}")
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-user-id')
|
||||
expect(link.attr('data-user-id')).to eq user.namespace.owner_id.to_s
|
||||
end
|
||||
|
||||
it 'adds to the results hash' do
|
||||
result = pipeline_result("Hey #{reference}")
|
||||
expect(result[:references][:user]).to eq [user]
|
||||
|
@ -85,6 +93,14 @@ module Gitlab::Markdown
|
|||
expect(doc.css('a').first.attr('href')).to eq urls.group_url(group)
|
||||
end
|
||||
|
||||
it 'includes a data-group-id attribute' do
|
||||
doc = filter("Hey #{reference}", current_user: user)
|
||||
link = doc.css('a').first
|
||||
|
||||
expect(link).to have_attribute('data-group-id')
|
||||
expect(link.attr('data-group-id')).to eq group.id.to_s
|
||||
end
|
||||
|
||||
it 'adds to the results hash' do
|
||||
result = pipeline_result("Hey #{reference}", current_user: user)
|
||||
expect(result[:references][:user]).to eq group.users
|
||||
|
|
Loading…
Reference in a new issue