diff --git a/app/assets/javascripts/project_users_select.js.coffee b/app/assets/javascripts/project_users_select.js.coffee
index a7fec96040..382f9b3799 100644
--- a/app/assets/javascripts/project_users_select.js.coffee
+++ b/app/assets/javascripts/project_users_select.js.coffee
@@ -43,7 +43,7 @@
avatar = avatar.replace('%{hash}', md5(user.email))
avatar = avatar.replace('%{size}', '24')
else
- avatar = gon.relative_url_root + "/assets/no_avatar.png"
+ avatar = gon.relative_url_root + "#{image_path('no_avatar.png')}"
if user.id == ''
avatarMarkup = ''
diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee
index cab9f6271e..da66a4ba7f 100644
--- a/app/assets/javascripts/users_select.js.coffee
+++ b/app/assets/javascripts/users_select.js.coffee
@@ -7,7 +7,7 @@ $ ->
avatar = avatar.replace('%{hash}', md5(user.email))
avatar = avatar.replace('%{size}', '24')
else
- avatar = gon.relative_url_root + "/assets/no_avatar.png"
+ avatar = gon.relative_url_root + "#{image_path('no_avatar.png')}"
"
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 198ca76545..32010701e4 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -71,7 +71,7 @@ module ApplicationHelper
size = 40 if size.nil? || size <= 0
if !Gitlab.config.gravatar.enabled || user_email.blank?
- '/assets/no_avatar.png'
+ image_path('no_avatar.png')
else
gravatar_url = request.ssl? || gitlab_config.https ? Gitlab.config.gravatar.ssl_url : Gitlab.config.gravatar.plain_url
user_email.strip!
diff --git a/app/helpers/gitlab_markdown_helper.rb b/app/helpers/gitlab_markdown_helper.rb
index b8891d801a..db5b4eacd1 100644
--- a/app/helpers/gitlab_markdown_helper.rb
+++ b/app/helpers/gitlab_markdown_helper.rb
@@ -19,7 +19,7 @@ module GitlabMarkdownHelper
escape_once(body)
end
- gfm_body = gfm(escaped_body, html_options)
+ gfm_body = gfm(escaped_body, @project, html_options)
gfm_body.gsub!(%r{
.*?}m) do |match|
"#{match}#{link_to("", url, html_options)[0..-5]}" # "".length +1
diff --git a/app/helpers/issues_helper.rb b/app/helpers/issues_helper.rb
index 7c58908165..2031519c32 100644
--- a/app/helpers/issues_helper.rb
+++ b/app/helpers/issues_helper.rb
@@ -13,76 +13,80 @@ module IssuesHelper
OpenStruct.new(id: 0, title: 'None (backlog)', name: 'Unassigned')
end
- def url_for_project_issues
- return "" if @project.nil?
+ def url_for_project_issues(project = @project)
+ return '' if project.nil?
- if @project.used_default_issues_tracker? || !external_issues_tracker_enabled?
- project_issues_path(@project)
+ if project.used_default_issues_tracker? || !external_issues_tracker_enabled?
+ project_issues_path(project)
else
- url = Gitlab.config.issues_tracker[@project.issues_tracker]["project_url"]
- url.gsub(':project_id', @project.id.to_s)
- .gsub(':issues_tracker_id', @project.issues_tracker_id.to_s)
+ url = Gitlab.config.issues_tracker[project.issues_tracker]['project_url']
+ url.gsub(':project_id', project.id.to_s).
+ gsub(':issues_tracker_id', project.issues_tracker_id.to_s)
end
end
- def url_for_new_issue
- return "" if @project.nil?
+ def url_for_new_issue(project = @project)
+ return '' if project.nil?
- if @project.used_default_issues_tracker? || !external_issues_tracker_enabled?
- url = new_project_issue_path project_id: @project
+ if project.used_default_issues_tracker? || !external_issues_tracker_enabled?
+ url = new_project_issue_path project_id: project
else
- url = Gitlab.config.issues_tracker[@project.issues_tracker]["new_issue_url"]
- url.gsub(':project_id', @project.id.to_s)
- .gsub(':issues_tracker_id', @project.issues_tracker_id.to_s)
+ issues_tracker = Gitlab.config.issues_tracker[project.issues_tracker]
+ url = issues_tracker['new_issue_url']
+ url.gsub(':project_id', project.id.to_s).
+ gsub(':issues_tracker_id', project.issues_tracker_id.to_s)
end
end
- def url_for_issue(issue_iid)
- return "" if @project.nil?
+ def url_for_issue(issue_iid, project = @project)
+ return '' if project.nil?
- if @project.used_default_issues_tracker? || !external_issues_tracker_enabled?
- url = project_issue_url project_id: @project, id: issue_iid
+ if project.used_default_issues_tracker? || !external_issues_tracker_enabled?
+ url = project_issue_url project_id: project, id: issue_iid
else
- url = Gitlab.config.issues_tracker[@project.issues_tracker]["issues_url"]
- url.gsub(':id', issue_iid.to_s)
- .gsub(':project_id', @project.id.to_s)
- .gsub(':issues_tracker_id', @project.issues_tracker_id.to_s)
+ url = Gitlab.config.issues_tracker[project.issues_tracker]['issues_url']
+ url.gsub(':id', issue_iid.to_s).
+ gsub(':project_id', project.id.to_s).
+ gsub(':issues_tracker_id', project.issues_tracker_id.to_s)
end
end
- def title_for_issue(issue_iid)
- return "" if @project.nil?
+ def title_for_issue(issue_iid, project = @project)
+ return '' if project.nil?
- if @project.used_default_issues_tracker? && issue = @project.issues.where(iid: issue_iid).first
- issue.title
- else
- ""
+ if project.used_default_issues_tracker?
+ issue = project.issues.where(iid: issue_iid).first
+ return issue.title if issue
end
+
+ ''
end
# Checks if issues_tracker setting exists in gitlab.yml
def external_issues_tracker_enabled?
- if Gitlab.config.issues_tracker && Gitlab.config.issues_tracker.values.any?
- true
- else
- false
- end
+ Gitlab.config.issues_tracker && Gitlab.config.issues_tracker.values.any?
end
def bulk_update_milestone_options
- options_for_select(["None (backlog)"]) + options_from_collection_for_select(project_active_milestones, "id", "title", params[:milestone_id])
+ options_for_select(['None (backlog)']) +
+ options_from_collection_for_select(project_active_milestones, 'id',
+ 'title', params[:milestone_id])
end
- def bulk_update_assignee_options
- options_for_select(["None (unassigned)"]) + options_from_collection_for_select(@project.team.members, "id", "name", params[:assignee_id])
+ def bulk_update_assignee_options(project = @project)
+ options_for_select(['None (unassigned)']) +
+ options_from_collection_for_select(project.team.members, 'id',
+ 'name', params[:assignee_id])
end
- def assignee_options object
- options_from_collection_for_select(@project.team.members.sort_by(&:name), 'id', 'name', object.assignee_id)
+ def assignee_options(object, project = @project)
+ options_from_collection_for_select(project.team.members.sort_by(&:name),
+ 'id', 'name', object.assignee_id)
end
def milestone_options object
- options_from_collection_for_select(object.project.milestones.active, 'id', 'title', object.milestone_id)
+ options_from_collection_for_select(object.project.milestones.active,
+ 'id', 'title', object.milestone_id)
end
def issue_box_class(item)
diff --git a/app/views/events/_commit.html.haml b/app/views/events/_commit.html.haml
index 135320da57..0e03e116e7 100644
--- a/app/views/events/_commit.html.haml
+++ b/app/views/events/_commit.html.haml
@@ -2,4 +2,4 @@
.commit-row-title
= link_to commit[:id][0..8], project_commit_path(project, commit[:id]), class: "commit_short_id", alt: ''
- = gfm event_commit_title(commit[:message])
+ = gfm event_commit_title(commit[:message]), project
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index 1072728af2..486454793b 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -26,11 +26,11 @@
- if @merge_request.closed?
= link_to 'Reopen', project_merge_request_path(@project, @merge_request, merge_request: {state_event: :reopen }), method: :put, class: "btn btn-grouped btn-reopen reopen-mr-link", title: "Close merge request"
- .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
- = render "projects/notes/notes_with_form"
.diffs.tab-content
- if current_page?(action: 'diffs')
= render "projects/merge_requests/show/diffs"
+ .notes.tab-content.voting_notes#notes{ class: (controller.action_name == 'show') ? "" : "hide" }
+ = render "projects/notes/notes_with_form"
.status
:javascript
diff --git a/lib/gitlab/markdown.rb b/lib/gitlab/markdown.rb
index dca3d7a7be..73a149621c 100644
--- a/lib/gitlab/markdown.rb
+++ b/lib/gitlab/markdown.rb
@@ -33,10 +33,9 @@ module Gitlab
# Public: Parse the provided text with GitLab-Flavored Markdown
#
# text - the source text
+ # project - extra options for the reference links as given to link_to
# html_options - extra options for the reference links as given to link_to
- #
- # Note: reference links will only be generated if @project is set
- def gfm(text, html_options = {})
+ def gfm(text, project = @project, html_options = {})
return text if text.nil?
# Duplicate the string so we don't alter the original, then call to_str
@@ -56,14 +55,19 @@ module Gitlab
# TODO: add popups with additional information
- text = parse(text)
+ text = parse(text, project)
# Insert pre block extractions
text.gsub!(/\{gfm-extraction-(\h{32})\}/) do
insert_piece($1)
end
- sanitize text.html_safe, attributes: ActionView::Base.sanitized_allowed_attributes + %w(id class), tags: ActionView::Base.sanitized_allowed_tags + %w(table tr td th)
+ allowed_attributes = ActionView::Base.sanitized_allowed_attributes
+ allowed_tags = ActionView::Base.sanitized_allowed_tags
+
+ sanitize text.html_safe,
+ attributes: allowed_attributes + %w(id class),
+ tags: allowed_tags + %w(table tr td th)
end
private
@@ -84,11 +88,9 @@ module Gitlab
#
# text - Text to parse
#
- # Note: reference links will only be generated if @project is set
- #
# Returns parsed text
- def parse(text)
- parse_references(text) if @project
+ def parse(text, project = @project)
+ parse_references(text, project) if project
parse_emoji(text)
text
@@ -110,7 +112,7 @@ module Gitlab
TYPES = [:user, :issue, :merge_request, :snippet, :commit].freeze
- def parse_references(text)
+ def parse_references(text, project = @project)
# parse reference links
text.gsub!(REFERENCE_PATTERN) do |match|
prefix = $~[:prefix]
@@ -123,7 +125,7 @@ module Gitlab
# Avoid HTML entities
if prefix && suffix && prefix[0] == '&' && suffix[-1] == ';'
match
- elsif ref_link = reference_link(type, identifier)
+ elsif ref_link = reference_link(type, identifier, project)
"#{prefix}#{ref_link}#{suffix}"
else
match
@@ -153,7 +155,7 @@ module Gitlab
#
# Returns boolean
def valid_emoji?(emoji)
- Emoji.find_by_name emoji
+ Emoji.find_by_name(emoji)
end
# Private: Dispatches to a dedicated processing method based on reference
@@ -162,52 +164,77 @@ module Gitlab
# identifier - Object identifier (Issue ID, SHA hash, etc.)
#
# Returns string rendered by the processing method
- def reference_link(type, identifier)
- send("reference_#{type}", identifier)
+ def reference_link(type, identifier, project = @project)
+ send("reference_#{type}", identifier, project)
end
- def reference_user(identifier)
- if user = User.find_by_username(identifier)
- link_to("@#{identifier}", user_url(identifier), html_options.merge(class: "gfm gfm-team_member #{html_options[:class]}"))
+ def reference_user(identifier, project = @project)
+ if user = User.find_by(username: identifier)
+ options = html_options.merge(
+ class: "gfm gfm-team_member #{html_options[:class]}"
+ )
+ link_to("@#{identifier}", user_url(identifier), options)
end
end
- def reference_issue(identifier)
- if @project.used_default_issues_tracker? || !external_issues_tracker_enabled?
- if @project.issue_exists? identifier
- url = url_for_issue(identifier)
+ def reference_issue(identifier, project = @project)
+ if project.used_default_issues_tracker? || !external_issues_tracker_enabled?
+ if project.issue_exists? identifier
+ url = url_for_issue(identifier, project)
title = title_for_issue(identifier)
+ options = html_options.merge(
+ title: "Issue: #{title}",
+ class: "gfm gfm-issue #{html_options[:class]}"
+ )
- link_to("##{identifier}", url, html_options.merge(title: "Issue: #{title}", class: "gfm gfm-issue #{html_options[:class]}"))
+ link_to("##{identifier}", url, options)
end
- else
- reference_jira_issue(identifier) if @project.issues_tracker == "jira"
+ elsif project.issues_tracker == 'jira'
+ reference_jira_issue(identifier, project)
end
end
- def reference_merge_request(identifier)
- if merge_request = @project.merge_requests.where(iid: identifier).first
- link_to("!#{identifier}", project_merge_request_url(@project, merge_request), html_options.merge(title: "Merge Request: #{merge_request.title}", class: "gfm gfm-merge_request #{html_options[:class]}"))
+ def reference_merge_request(identifier, project = @project)
+ if merge_request = project.merge_requests.find_by(iid: identifier)
+ options = html_options.merge(
+ title: "Merge Request: #{merge_request.title}",
+ class: "gfm gfm-merge_request #{html_options[:class]}"
+ )
+ url = project_merge_request_url(project, merge_request)
+ link_to("!#{identifier}", url, options)
end
end
- def reference_snippet(identifier)
- if snippet = @project.snippets.where(id: identifier).first
- link_to("$#{identifier}", project_snippet_url(@project, snippet), html_options.merge(title: "Snippet: #{snippet.title}", class: "gfm gfm-snippet #{html_options[:class]}"))
+ def reference_snippet(identifier, project = @project)
+ if snippet = project.snippets.find_by(id: identifier)
+ options = html_options.merge(
+ title: "Snippet: #{snippet.title}",
+ class: "gfm gfm-snippet #{html_options[:class]}"
+ )
+ link_to("$#{identifier}", project_snippet_url(project, snippet),
+ options)
end
end
- def reference_commit(identifier)
- if @project.valid_repo? && commit = @project.repository.commit(identifier)
- link_to(identifier, project_commit_url(@project, commit), html_options.merge(title: commit.link_title, class: "gfm gfm-commit #{html_options[:class]}"))
+ def reference_commit(identifier, project = @project)
+ if project.valid_repo? && commit = project.repository.commit(identifier)
+ options = html_options.merge(
+ title: commit.link_title,
+ class: "gfm gfm-commit #{html_options[:class]}"
+ )
+ link_to(identifier, project_commit_url(project, commit), options)
end
end
- def reference_jira_issue(identifier)
+ def reference_jira_issue(identifier, project = @project)
url = url_for_issue(identifier)
title = Gitlab.config.issues_tracker[@project.issues_tracker]["title"]
- link_to("#{identifier}", url, html_options.merge(title: "Issue in #{title}", class: "gfm gfm-issue #{html_options[:class]}"))
+ options = html_options.merge(
+ title: "Issue in #{title}",
+ class: "gfm gfm-issue #{html_options[:class]}"
+ )
+ link_to("#{identifier}", url, options)
end
end
end
diff --git a/lib/gitlab/reference_extractor.rb b/lib/gitlab/reference_extractor.rb
index 94b01e808d..1eda614807 100644
--- a/lib/gitlab/reference_extractor.rb
+++ b/lib/gitlab/reference_extractor.rb
@@ -51,7 +51,7 @@ module Gitlab
private
- def reference_link type, identifier
+ def reference_link(type, identifier, project)
# Append identifier to the appropriate collection.
send("#{type}s") << identifier
end
diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb
index 10c5617d24..6401ec0710 100644
--- a/spec/helpers/application_helper_spec.rb
+++ b/spec/helpers/application_helper_spec.rb
@@ -79,11 +79,11 @@ describe ApplicationHelper do
it "should return a generic avatar path when Gravatar is disabled" do
Gitlab.config.gravatar.stub(:enabled).and_return(false)
- gravatar_icon(user_email).should == '/assets/no_avatar.png'
+ gravatar_icon(user_email).should match('no_avatar.png')
end
it "should return a generic avatar path when email is blank" do
- gravatar_icon('').should == '/assets/no_avatar.png'
+ gravatar_icon('').should match('no_avatar.png')
end
it "should return default gravatar url" do
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 49b48d26e2..fc9d1ac90c 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -41,7 +41,8 @@ describe GitlabMarkdownHelper do
end
it "should forward HTML options to links" do
- gfm("Fixed in #{commit.id}", class: "foo").should have_selector("a.gfm.foo")
+ gfm("Fixed in #{commit.id}", @project, class: 'foo').
+ should have_selector('a.gfm.foo')
end
describe "referencing a commit" do