]> source.dussan.org Git - redmine.git/commitdiff
Adds (a maximum of 3) links to project ancestors in the page title (#2788).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 20 Feb 2009 18:34:57 +0000 (18:34 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 20 Feb 2009 18:34:57 +0000 (18:34 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2485 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/projects_controller.rb
app/helpers/application_helper.rb
app/views/layouts/base.rhtml
app/views/projects/show.rhtml
public/stylesheets/application.css
test/functional/projects_controller_test.rb

index a75e4120a612f713163149f10b1fc4948918b30a..f9c537cfcf13d3736ef28afcd92b9d9fd75ed3b2 100644 (file)
@@ -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
     
index e7aa270336a7f869b465a94f56bd1a209602e283..2872c14a1bc18ad8610bd3959b3fd62df2040c51 100644 (file)
@@ -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 << '&#8230;'
+          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(' &#187; ')
+    end
+  end
 
   def html_title(*args)
     if args.empty?
index 8cb8f5f690506db86644754f2275b5228f247b76..4f9adf6d70daf95e173b770971bedf54ec1f3a19 100644 (file)
@@ -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) %>
index 6d5a1536b6fa01c1710aadf2c80cefeb7d55b9fe..37daa88beabf1e43d7648cf0092a4d645020063b 100644 (file)
@@ -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(" &#187; ") %></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>
index 653ae152fbf3de82d4338db68afbf24a27c52a2e..c897a8c13c2c2bbcf3dd7ad09c6e38146516ecb1 100644 (file)
@@ -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;}
index 25f9ad78ee01585cf815bf500622ccbf89aba742..ec5d40a77dbfdcf67e10e37b7cf6d4cb99687104 100644 (file)
@@ -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'