diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-02-20 18:34:57 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2009-02-20 18:34:57 +0000 |
commit | 33e7ae96adcb0282ee181560bb88c0765a8ee149 (patch) | |
tree | 8faa7897cbf958d717ce9c06b0290638eca5e240 | |
parent | 04c428e059484c77dea3b7931051ba90cef38380 (diff) | |
download | redmine-33e7ae96adcb0282ee181560bb88c0765a8ee149.tar.gz redmine-33e7ae96adcb0282ee181560bb88c0765a8ee149.zip |
Adds (a maximum of 3) links to project ancestors in the page title (#2788).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2485 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/controllers/projects_controller.rb | 1 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 20 | ||||
-rw-r--r-- | app/views/layouts/base.rhtml | 2 | ||||
-rw-r--r-- | app/views/projects/show.rhtml | 4 | ||||
-rw-r--r-- | public/stylesheets/application.css | 1 | ||||
-rw-r--r-- | test/functional/projects_controller_test.rb | 16 |
6 files changed, 38 insertions, 6 deletions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index a75e4120a..f9c537cfc 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -90,7 +90,6 @@ class ProjectsController < ApplicationController @members_by_role = @project.members.find(:all, :include => [:user, :role], :order => 'position').group_by {|m| m.role} @subprojects = @project.children.visible - @ancestors = @project.ancestors.visible @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") @trackers = @project.rolled_up_trackers diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index e7aa27033..2872c14a1 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -312,6 +312,26 @@ module ApplicationHelper yield Redmine::Views::OtherFormatsBuilder.new(self) concat('</p>', block.binding) end + + def page_header_title + if @project.nil? || @project.new_record? + h(Setting.app_title) + else + b = [] + 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') + 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') } + end + b << h(@project) + b.join(' » ') + end + end def html_title(*args) if args.empty? diff --git a/app/views/layouts/base.rhtml b/app/views/layouts/base.rhtml index 8cb8f5f69..4f9adf6d7 100644 --- a/app/views/layouts/base.rhtml +++ b/app/views/layouts/base.rhtml @@ -37,7 +37,7 @@ <%= render_project_jump_box %> </div> - <h1><%= h(@project && !@project.new_record? ? @project.name : Setting.app_title) %></h1> + <h1><%= page_header_title %></h1> <div id="main-menu"> <%= render_main_menu(@project) %> diff --git a/app/views/projects/show.rhtml b/app/views/projects/show.rhtml index 6d5a1536b..37daa88be 100644 --- a/app/views/projects/show.rhtml +++ b/app/views/projects/show.rhtml @@ -8,10 +8,6 @@ <li><%=l(:label_subproject_plural)%>: <%= @subprojects.collect{|p| link_to(h(p), :action => 'show', :id => p)}.join(", ") %></li> <% end %> - <% if @ancestors.any? %> - <li><%=l(:field_parent)%>: - <%= @ancestors.collect {|p| link_to(h(p), :action => 'show', :id => p)}.join(" » ") %></li> - <% end %> <% @project.custom_values.each do |custom_value| %> <% if !custom_value.value.empty? %> <li><%= custom_value.custom_field.name%>: <%=h show_value(custom_value) %></li> diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 653ae152f..c897a8c13 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -25,6 +25,7 @@ h4, .wiki h3 {font-size: 13px;padding: 2px 10px 1px 0px;margin-bottom: 5px; bord #header {height:5.3em;margin:0;background-color:#507AAA;color:#f8f8f8; padding: 4px 8px 0px 6px; position:relative;} #header a {color:#f8f8f8;} +#header h1 a.ancestor { font-size: 80%; } #quick-search {float:right;} #main-menu {position: absolute; bottom: 0px; left:6px; margin-right: -500px;} diff --git a/test/functional/projects_controller_test.rb b/test/functional/projects_controller_test.rb index 25f9ad78e..ec5d40a77 100644 --- a/test/functional/projects_controller_test.rb +++ b/test/functional/projects_controller_test.rb @@ -447,6 +447,22 @@ class ProjectsControllerTest < Test::Unit::TestCase assert Project.find(1).active? end + def test_project_breadcrumbs_should_be_limited_to_3_ancestors + CustomField.delete_all + parent = nil + 6.times do |i| + p = Project.create!(:name => "Breadcrumbs #{i}", :identifier => "breadcrumbs-#{i}") + p.set_parent!(parent) + + get :show, :id => p + assert_tag :h1, :parent => { :attributes => {:id => 'header'}}, + :children => { :count => [i, 3].min, + :only => { :tag => 'a' } } + + parent = p + end + end + def test_jump_should_redirect_to_active_tab get :show, :id => 1, :jump => 'issues' assert_redirected_to 'projects/ecookbook/issues' |