diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index ec9784575..1ebd56a46 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -141,6 +141,32 @@ module ApplicationHelper
link_to text, url, html_options
end
+ def link_to_repository_buttons(repo, project)
+ if User.current.allowed_to? :manage_repository, project
+ link_to "(#{l :label_settings})",
+ edit_repository_path(repo),
+ title: l(:label_settings),
+ class: 'icon-only icon-settings'
+ end
+ end
+
+ def link_to_repository(repo, **options)
+ name = options.delete(:name).presence || repo.name
+ current_repo = options.delete :current_repo
+
+ css_class = ['repository', repo.scm_name.downcase]
+ css_class << 'selected' if current_repo && repo == current_repo
+
+ link_to name,
+ { controller: 'repositories',
+ action: 'show',
+ id: repo.project,
+ repository_id: repo.identifier_param,
+ rev: nil,
+ path: nil }.merge(options),
+ class: css_class.join(' ')
+ end
+
# Generates a link to a SCM revision
# Options:
# * :text - Link text (default to the formatted revision)
diff --git a/app/views/projects/settings/_repositories.html.erb b/app/views/projects/settings/_repositories.html.erb
index 8ae2ba25b..2b8beb707 100644
--- a/app/views/projects/settings/_repositories.html.erb
+++ b/app/views/projects/settings/_repositories.html.erb
@@ -18,8 +18,7 @@
<% @project.repositories.sort.each do |repository| %>
- <%= link_to repository.identifier,
- {:controller => 'repositories', :action => 'show',:id => @project, :repository_id => repository.identifier_param} if repository.identifier.present? %>
+ <%= link_to_repository(repository) if repository.identifier.present? %>
|
<%= checked_image repository.is_default? %> |
<%= repository.scm_name %> |
diff --git a/app/views/repositories/_sidebar.html.erb b/app/views/repositories/_sidebar.html.erb
new file mode 100644
index 000000000..cfc80ca23
--- /dev/null
+++ b/app/views/repositories/_sidebar.html.erb
@@ -0,0 +1,15 @@
+<%= call_hook :view_repositories_sidebar_top, project: @project, repository: @repository %>
+
+<% if @repositories.size > 1 %>
+ <%= l(:label_repository_plural) %>
+
+ <% @repositories.sort.map do |repo| %>
+ -
+ <%= link_to_repository repo, current_repo: @repository %>
+ <%= link_to_repository_buttons repo, @project %>
+
+ <% end %>
+
+<% end %>
+
+<%= call_hook :view_repositories_sidebar_bottom, project: @project, repository: @repository %>
diff --git a/app/views/repositories/show.html.erb b/app/views/repositories/show.html.erb
index ec2ae6fbc..f32f962d4 100644
--- a/app/views/repositories/show.html.erb
+++ b/app/views/repositories/show.html.erb
@@ -57,18 +57,8 @@
<% end %>
<% end %>
-<% if @repositories.size > 1 %>
- <% content_for :sidebar do %>
- <%= l(:label_repository_plural) %>
-
- <%= @repositories.sort.collect {|repo|
- link_to repo.name,
- {:controller => 'repositories', :action => 'show',
- :id => @project, :repository_id => repo.identifier_param, :rev => nil, :path => nil},
- :class => 'repository' + (repo == @repository ? ' selected' : '')
- }.join('
').html_safe %>
-
- <% end %>
+<% content_for :sidebar do %>
+ <%= render :partial => 'repositories/sidebar' %>
<% end %>
<% content_for :header_tags do %>
diff --git a/test/helpers/application_helper_test.rb b/test/helpers/application_helper_test.rb
index b4d194da9..28d10ec04 100644
--- a/test/helpers/application_helper_test.rb
+++ b/test/helpers/application_helper_test.rb
@@ -2211,6 +2211,30 @@ class ApplicationHelperTest < Redmine::HelperTest
end
end
+ def test_link_to_repository
+ repo = Repository.find(11)
+ assert_equal 'Main repository',
+ link_to_repository(repo)
+ end
+
+ def test_link_to_repository_with_identifier
+ repo = Repository.new identifier: 'foo', project: Project.find(2)
+ assert_equal 'foo',
+ link_to_repository(repo)
+ end
+
+ def test_link_to_repository_with_custom_name
+ repo = Repository.find(11)
+ assert_equal 'showme',
+ link_to_repository(repo, name: 'showme')
+ end
+
+ def test_link_to_repository_with_select
+ repo = Repository.find(11)
+ assert_equal 'Main repository',
+ link_to_repository(repo, current_repo: repo)
+ end
+
private
def wiki_links_with_special_characters