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) %>

+ +<% 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