From a1b607480abc6649f9531b1fd8a7d20c3c656084 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Barth Date: Sun, 8 Aug 2010 07:07:20 +0000 Subject: [PATCH] Refactor: added link_to_project helper to handle links to projects git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3924 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/helpers/application_helper.rb | 27 +++++++++++++++----- app/helpers/projects_helper.rb | 2 +- app/helpers/queries_helper.rb | 2 +- app/views/admin/projects.rhtml | 2 +- app/views/issues/_list_simple.rhtml | 2 +- app/views/news/_news.rhtml | 2 +- app/views/news/index.rhtml | 2 +- app/views/users/_memberships.rhtml | 2 +- app/views/users/show.rhtml | 2 +- app/views/welcome/index.rhtml | 2 +- test/unit/helpers/application_helper_test.rb | 12 +++++++++ 11 files changed, 42 insertions(+), 15 deletions(-) diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index d6fd16a6e..2c334b7f0 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -103,6 +103,23 @@ module ApplicationHelper link_to(text, {:controller => 'repositories', :action => 'revision', :id => project, :rev => revision}, :title => l(:label_revision_id, revision)) end + # Generates a link to a project if active + # Examples: + # + # link_to_project(project) # => link to the specified project overview + # link_to_project(project, :action=>'settings') # => link to project settings + # link_to_project(project, {:only_path => false}, :class => "project") # => 3rd arg adds html options + # link_to_project(project, {}, :class => "project") # => html options with default url (project overview) + # + def link_to_project(project, options={}, html_options = nil) + if project.active? + url = {:controller => 'projects', :action => 'show', :id => project}.merge(options) + link_to(h(project), url, html_options) + else + h(project) + end + end + def toggle_link(name, id, options={}) onclick = "Element.toggle('#{id}'); " onclick << (options[:focus] ? "Form.Element.focus('#{options[:focus]}'); " : "this.blur(); ") @@ -368,12 +385,12 @@ module ApplicationHelper ancestors = (@project.root? ? [] : @project.ancestors.visible) if ancestors.any? root = ancestors.shift - b << link_to(h(root), {:controller => 'projects', :action => 'show', :id => root, :jump => current_menu_item}, :class => 'root') + b << link_to_project(root, {:jump => current_menu_item}, :class => 'root') if ancestors.size > 2 b << '…' ancestors = ancestors[-2, 2] end - b += ancestors.collect {|p| link_to(h(p), {:controller => 'projects', :action => 'show', :id => p, :jump => current_menu_item}, :class => 'ancestor') } + b += ancestors.collect {|p| link_to_project(p, {:jump => current_menu_item}, :class => 'ancestor') } end b << h(@project) b.join(' » ') @@ -605,8 +622,7 @@ module ApplicationHelper end when 'project' if p = Project.visible.find_by_id(oid) - link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p}, - :class => 'project' + link = link_to_project(p, {:only_path => only_path}, :class => 'project') end end elsif sep == ':' @@ -648,8 +664,7 @@ module ApplicationHelper end when 'project' if p = Project.visible.find(:first, :conditions => ["identifier = :s OR LOWER(name) = :s", {:s => name.downcase}]) - link = link_to h(p.name), {:only_path => only_path, :controller => 'projects', :action => 'show', :id => p}, - :class => 'project' + link = link_to_project(p, {:only_path => only_path}, :class => 'project') end end end diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 044ccfb77..3b089c111 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -72,7 +72,7 @@ module ProjectsHelper end classes = (ancestors.empty? ? 'root' : 'child') s << "
  • " + - link_to(h(project), {:controller => 'projects', :action => 'show', :id => project}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") + link_to_project(project, {}, :class => "project #{User.current.member_of?(project) ? 'my-project' : nil}") s << "
    #{textilizable(project.short_description, :project => project)}
    " unless project.description.blank? s << "
    \n" ancestors << project diff --git a/app/helpers/queries_helper.rb b/app/helpers/queries_helper.rb index 594c8a79a..26be63693 100644 --- a/app/helpers/queries_helper.rb +++ b/app/helpers/queries_helper.rb @@ -50,7 +50,7 @@ module QueriesHelper when 'User' link_to_user value when 'Project' - link_to(h(value), :controller => 'projects', :action => 'show', :id => value) + link_to_project value when 'Version' link_to(h(value), :controller => 'versions', :action => 'show', :id => value) when 'TrueClass' diff --git a/app/views/admin/projects.rhtml b/app/views/admin/projects.rhtml index dc7bb97ed..46b68e4cc 100644 --- a/app/views/admin/projects.rhtml +++ b/app/views/admin/projects.rhtml @@ -27,7 +27,7 @@ <% project_tree(@projects) do |project, level| %> <%= css_project_classes(project) %> <%= level > 0 ? "idnt idnt-#{level}" : nil %>"> - <%= project.active? ? link_to(h(project.name), :controller => 'projects', :action => 'settings', :id => project) : h(project.name) %> + <%= link_to_project(project, :action => 'settings') %> <%= textilizable project.short_description, :project => project %> <%= checked_image project.is_public? %> <%= format_date(project.created_on) %> diff --git a/app/views/issues/_list_simple.rhtml b/app/views/issues/_list_simple.rhtml index 38823765e..dd7f48946 100644 --- a/app/views/issues/_list_simple.rhtml +++ b/app/views/issues/_list_simple.rhtml @@ -14,7 +14,7 @@ <%= check_box_tag("ids[]", issue.id, false, :style => 'display:none;') %> <%= link_to issue.id, :controller => 'issues', :action => 'show', :id => issue %> - <%= link_to(h(issue.project), :controller => 'projects', :action => 'show', :id => issue.project) %> + <%= link_to_project(issue.project) %> <%=h issue.tracker %> <%= link_to h(truncate(issue.subject, :length => 60)), :controller => 'issues', :action => 'show', :id => issue %> (<%=h issue.status %>) diff --git a/app/views/news/_news.rhtml b/app/views/news/_news.rhtml index e95e8a557..8f481f09c 100644 --- a/app/views/news/_news.rhtml +++ b/app/views/news/_news.rhtml @@ -1,4 +1,4 @@ -

    <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless @project %> +

    <%= link_to_project(news.project) + ': ' unless @project %> <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>
    diff --git a/app/views/news/index.rhtml b/app/views/news/index.rhtml index 11a39232c..8b7cc66e1 100644 --- a/app/views/news/index.rhtml +++ b/app/views/news/index.rhtml @@ -28,7 +28,7 @@

    <%= l(:label_no_data) %>

    <% else %> <% @newss.each do |news| %> -

    <%= link_to(h(news.project.name), :controller => 'projects', :action => 'show', :id => news.project) + ': ' unless news.project == @project %> +

    <%= link_to_project(news.project) + ': ' unless news.project == @project %> <%= link_to h(news.title), :controller => 'news', :action => 'show', :id => news %> <%= "(#{l(:label_x_comments, :count => news.comments_count)})" if news.comments_count > 0 %>

    <%= authoring news.created_on, news.author %>

    diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index 4c71f81ba..441294708 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -15,7 +15,7 @@ <% next if membership.new_record? %> - <%= link_to h(membership.project), {:controller => 'projects', :action => 'show', :id => membership.project} %> + <%= link_to_project membership.project %> <%=h membership.roles.sort.collect(&:to_s).join(', ') %> diff --git a/app/views/users/show.rhtml b/app/views/users/show.rhtml index 82634b010..df5aec825 100644 --- a/app/views/users/show.rhtml +++ b/app/views/users/show.rhtml @@ -24,7 +24,7 @@

    <%=l(:label_project_plural)%>

    diff --git a/app/views/welcome/index.rhtml b/app/views/welcome/index.rhtml index a0ada7cce..6ac09c153 100644 --- a/app/views/welcome/index.rhtml +++ b/app/views/welcome/index.rhtml @@ -20,7 +20,7 @@ <% for project in @projects %> <% @project = project %>
  • - <%= link_to h(project.name), :controller => 'projects', :action => 'show', :id => project %> (<%= format_time(project.created_on) %>) + <%= link_to_project project %> (<%= format_time(project.created_on) %>) <%= textilizable project.short_description, :project => project %>
  • <% end %> diff --git a/test/unit/helpers/application_helper_test.rb b/test/unit/helpers/application_helper_test.rb index 90d342898..6fd21fe37 100644 --- a/test/unit/helpers/application_helper_test.rb +++ b/test/unit/helpers/application_helper_test.rb @@ -597,4 +597,16 @@ EXPECTED t = link_to_user(user) assert_equal ::I18n.t(:label_user_anonymous), t end + + def test_link_to_project + project = Project.find(1) + assert_equal %(eCookbook), + link_to_project(project) + assert_equal %(eCookbook), + link_to_project(project, :action => 'settings') + assert_equal %(eCookbook), + link_to_project(project, {:only_path => false, :jump => 'blah'}) + assert_equal %(eCookbook), + link_to_project(project, {:action => 'settings'}, :class => "project") + end end