]> source.dussan.org Git - redmine.git/commitdiff
Speeds up WikiHelper#wiki_page_options_for_select.
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 10 Mar 2011 19:44:32 +0000 (19:44 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 10 Mar 2011 19:44:32 +0000 (19:44 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5080 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/wiki_helper.rb

index 32225d83ef0de0886f6ca64d4e1cc7dc49e83eb1..48527a9ba4583749a19fe50d3efdce58893a7c04 100644 (file)
 module WikiHelper
   
   def wiki_page_options_for_select(pages, selected = nil, parent = nil, level = 0)
+    pages = pages.group_by(&:parent) unless pages.is_a?(Hash)
     s = ''
-    pages.select {|p| p.parent == parent}.each do |page|
-      attrs = "value='#{page.id}'"
-      attrs << " selected='selected'" if selected == page
-      indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
-      
-      s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
-             wiki_page_options_for_select(pages, selected, page, level + 1)
+    if pages.has_key?(parent)
+      pages[parent].each do |page|
+        attrs = "value='#{page.id}'"
+        attrs << " selected='selected'" if selected == page
+        indent = (level > 0) ? ('&nbsp;' * level * 2 + '&#187; ') : nil
+        
+        s << "<option #{attrs}>#{indent}#{h page.pretty_title}</option>\n" + 
+               wiki_page_options_for_select(pages, selected, page, level + 1)
+      end
     end
     s
   end