]> source.dussan.org Git - redmine.git/commitdiff
Extract code to render nested listed of projects in an helper (#11539).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 10 Aug 2012 17:09:48 +0000 (17:09 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Fri, 10 Aug 2012 17:09:48 +0000 (17:09 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@10188 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/application_helper.rb
app/helpers/projects_helper.rb

index 983f3fd8be9aca5c1ccfb57ef5a1bda1ca9e4c84..c25bff04960036b50b6c590240c76007f4b89388 100644 (file)
@@ -195,6 +195,39 @@ module ApplicationHelper
     end
   end
 
+  # Renders a tree of projects as a nested set of unordered lists
+  # The given collection may be a subset of the whole project tree
+  # (eg. some intermediate nodes are private and can not be seen)
+  def render_project_nested_lists(projects)
+    s = ''
+    if projects.any?
+      ancestors = []
+      original_project = @project
+      projects.each do |project|
+        # set the project environment to please macros.
+        @project = project
+        if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
+          s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n"
+        else
+          ancestors.pop
+          s << "</li>"
+          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
+            ancestors.pop
+            s << "</ul></li>\n"
+          end
+        end
+        classes = (ancestors.empty? ? 'root' : 'child')
+        s << "<li class='#{classes}'><div class='#{classes}'>"
+        s << h(block_given? ? yield(project) : project.name)
+        s << "</div>\n"
+        ancestors << project
+      end
+      s << ("</li></ul>\n" * ancestors.size)
+      @project = original_project
+    end
+    s.html_safe
+  end
+
   def render_page_hierarchy(pages, node=nil, options={})
     content = ''
     if pages[node]
index 9d538c966a8687b0062a9897eaab1bf4c6354f12..81c97e75adf74345d36a985f87ccb0e84a30e0ed 100644 (file)
@@ -51,38 +51,15 @@ module ProjectsHelper
     content_tag('select', options.html_safe, :name => 'project[parent_id]', :id => 'project_parent_id')
   end
 
-  # Renders a tree of projects as a nested set of unordered lists
-  # The given collection may be a subset of the whole project tree
-  # (eg. some intermediate nodes are private and can not be seen)
+  # Renders the projects index
   def render_project_hierarchy(projects)
-    s = ''
-    if projects.any?
-      ancestors = []
-      original_project = @project
-      projects.each do |project|
-        # set the project environment to please macros.
-        @project = project
-        if (ancestors.empty? || project.is_descendant_of?(ancestors.last))
-          s << "<ul class='projects #{ ancestors.empty? ? 'root' : nil}'>\n"
-        else
-          ancestors.pop
-          s << "</li>"
-          while (ancestors.any? && !project.is_descendant_of?(ancestors.last))
-            ancestors.pop
-            s << "</ul></li>\n"
-          end
-        end
-        classes = (ancestors.empty? ? 'root' : 'child')
-        s << "<li class='#{classes}'><div class='#{classes}'>" +
-               link_to_project(project, {}, :class => "#{project.css_classes} #{User.current.member_of?(project) ? 'my-project' : nil}")
-        s << "<div class='wiki description'>#{textilizable(project.short_description, :project => project)}</div>" unless project.description.blank?
-        s << "</div>\n"
-        ancestors << project
+    render_project_nested_lists(projects) do |project|
+      s = link_to_project(project, {}, :class => "#{project.css_classes} #{User.current.member_of?(project) ? 'my-project' : nil}")
+      if project.description.present?
+        s << content_tag('div', textilizable(project.short_description, :project => project), :class => 'wiki description')
       end
-      s << ("</li></ul>\n" * ancestors.size)
-      @project = original_project
+      s
     end
-    s.html_safe
   end
 
   # Returns a set of options for a select field, grouped by project.