]> source.dussan.org Git - redmine.git/commitdiff
Adds child_pages macro for wiki pages (#528).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Jul 2008 12:54:54 +0000 (12:54 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 26 Jul 2008 12:54:54 +0000 (12:54 +0000)
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1699 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/wiki_controller.rb
app/helpers/application_helper.rb
app/helpers/wiki_helper.rb
app/views/common/_preview.rhtml
lib/redmine/wiki_formatting/macros.rb
test/fixtures/wiki_contents.yml
test/functional/wiki_controller_test.rb
vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb

index 2430205cfd0646f8eaf62383ea5b04e4d2d5c0c2..5a5f3949fefe290238c576be0f2785d81a38fa0c 100644 (file)
@@ -165,7 +165,10 @@ class WikiController < ApplicationController
     page = @wiki.find_page(params[:page])
     # page is nil when previewing a new page
     return render_403 unless page.nil? || editable?(page)
-    @attachements = page.attachments if page
+    if page
+      @attachements = page.attachments
+      @previewed = page.content
+    end
     @text = params[:content][:text]
     render :partial => 'common/preview'
   end
index f5ce7ecda28871443e00203ae27cf5763e868754..6d6eb9107627a000942edc502acf911b330b41b5 100644 (file)
@@ -206,7 +206,7 @@ module ApplicationHelper
     options = args.last.is_a?(Hash) ? args.pop : {}
     case args.size
     when 1
-      obj = nil
+      obj = options[:object]
       text = args.shift
     when 2
       obj = args.shift
index d27ce3ea33814c8f7a175f6648e34c965020c990..0a6b810de939239de33976bc8af46c3c5fac30fd 100644 (file)
@@ -24,7 +24,7 @@ module WikiHelper
       pages[node].each do |page|
         content << "<li>"
         content << link_to(h(page.pretty_title), {:action => 'index', :page => page.title},
-                           :title => l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)))
+                           :title => (page.respond_to?(:updated_on) ? l(:label_updated_time, distance_of_time_in_words(Time.now, page.updated_on)) : nil))
         content << "\n" + render_page_hierarchy(pages, page.id) if pages[page.id]
         content << "</li>\n"
       end
index e3bfc3a257c44a0f7a173996fb8c2d1d6fd45457..fd95f118859907f02ecd1a2ce57a55c5b31037d9 100644 (file)
@@ -1,3 +1,3 @@
 <fieldset class="preview"><legend><%= l(:label_preview) %></legend>
-<%= textilizable @text, :attachments => @attachements %>
+<%= textilizable @text, :attachments => @attachements, :object => @previewed %>
 </fieldset>
index 0848aee4e1eb696d716ec7960f9f7a23166a0700..adfc590e484873e4c2e3f2ebb675269ad79a46fa 100644 (file)
@@ -77,6 +77,12 @@ module Redmine
         content_tag('dl', out)
       end
       
+      desc "Displays a list of child pages."
+      macro :child_pages do |obj, args|
+        raise 'This macro applies to wiki pages only.' unless obj.is_a?(WikiContent)
+        render_page_hierarchy(obj.page.descendants.group_by(&:parent_id), obj.page.id)
+      end
+      
       desc "Include a wiki page. Example:\n\n  !{{include(Foo)}}\n\nor to include a page of a specific project wiki:\n\n  !{{include(projectname:Foo)}}"
       macro :include do |obj, args|
         project = @project
index 5d6d3f1dee0e4dad6ff7a2c4563ea27d7cfe042a..8c53d4d97583e709173d4a75d07a8dbf47cb8937 100644 (file)
@@ -2,7 +2,7 @@
 wiki_contents_001: \r
   text: |-\r
     h1. CookBook documentation\r\r
-    \r\r
+    {{child_pages}}\r\r
     Some updated [[documentation]] here with gzipped history\r
   updated_on: 2007-03-07 00:10:51 +01:00\r
   page_id: 1\r
index 06d8cacf204012733e34247c8083da62817ca38e..bbfdc8e7f2431f17a94fae298056fb0a08811718 100644 (file)
@@ -32,10 +32,16 @@ class WikiControllerTest < Test::Unit::TestCase
   end
   
   def test_show_start_page
-    get :index, :id => 1
+    get :index, :id => 'ecookbook'
     assert_response :success
     assert_template 'show'
     assert_tag :tag => 'h1', :content => /CookBook documentation/
+
+    # child_pages macro
+    assert_tag :ul, :attributes => { :class => 'pages-hierarchy' },
+               :child => { :tag => 'li',
+                           :child => { :tag => 'a', :attributes => { :href => '/wiki/ecookbook/Page_with_an_inline_image' },
+                                                    :content => 'Page with an inline image' } }
   end
   
   def test_show_page_with_name
index 1f00e90a9ef24e13d439e0e7325f30e5355b9040..6a6827ee677f73eba58351de14c5ca17adc88b6d 100644 (file)
@@ -70,6 +70,13 @@ module ActiveRecord
           nodes
         end
 
+        # Returns list of descendants.
+        #
+        #   root.descendants # => [child1, subchild1, subchild2]
+        def descendants
+          children + children.collect(&:children).flatten
+        end
+
         # Returns the root node of the tree.
         def root
           node = self