Commit 13a8c19489e3ee0320f378ee71b9f95f2fed825c

Authored by AntonioTerceiro
1 parent ae14ca6c

ActionItem8: better interface for using help.



git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@121 3f533792-8f58-4932-b0fe-aaf55b0a4547
app/helpers/application_helper.rb
@@ -76,39 +76,71 @@ module ApplicationHelper @@ -76,39 +76,71 @@ module ApplicationHelper
76 end 76 end
77 end 77 end
78 78
79 - # Displays context help. Pass the content of the help message in the block  
80 - # passed to this method. Example: 79 + # Displays context help. You can pass the content of the help message as the
  80 + # first parameter or using template code inside a block passed to this
  81 + # method. *Note*: the block is ignored if <tt>content</tt> is not
  82 + # <tt>nil</tt>
  83 + #
  84 + # The method returns the text generated, so you can also use it inside a
  85 + # <%= ... %>
  86 + #
  87 + # Follow some examples ...
  88 + #
  89 + # Passing the text as argument:
  90 + #
  91 + # <% help 'This your help message' %>
  92 + #
  93 + # Using a block:
81 # 94 #
82 # <% help do %> 95 # <% help do %>
83 # This is the help message to be displayed. It can contain any HTML you 96 # This is the help message to be displayed. It can contain any HTML you
84 - # want: <strong>bold</strong>, <em>italic</em>, and even  
85 - # <%= link_to '', 'links' %> using Rails helpers. 97 + # want: <strong>bold</strong>, <em>italic</em>. It can also contain calls
  98 + # to any Rails helper, like <%= link_to 'home', :controller => 'home' %>.
86 # <% end %> 99 # <% end %>
87 # 100 #
88 # You can also pass an optional argument to force the use of textile in your 101 # You can also pass an optional argument to force the use of textile in your
89 # help message: 102 # help message:
90 # 103 #
91 - # <% help :textile do %> 104 + # <% help nil, :textile do %>
92 # You can also use *textile*! 105 # You can also use *textile*!
93 # <% end %> 106 # <% end %>
94 # 107 #
  108 + # or, using the return of the method:
  109 + #
  110 + # <%= help 'this is your help message' %>
  111 + #
95 # Formally, the <tt>type</tt> argument can be <tt>:html</tt> or 112 # Formally, the <tt>type</tt> argument can be <tt>:html</tt> or
96 # <tt>:textile</tt>. It defaults to <tt>:html</tt>. 113 # <tt>:textile</tt>. It defaults to <tt>:html</tt>.
97 # 114 #
98 # TODO: implement correcly the 'Help' button click 115 # TODO: implement correcly the 'Help' button click
99 - def help(type = :html, &block)  
100 - content = capture(&block) 116 + def help(content = nil, type = :html, &block)
  117 +
  118 + if content.nil?
  119 + return '' if block.nil?
  120 + content = capture(&block)
  121 + end
  122 +
101 if type == :textile 123 if type == :textile
102 content = RedCloth.new(content).to_html 124 content = RedCloth.new(content).to_html
103 end 125 end
  126 +
  127 + # TODO: implement this button, and add style='display: none' to the help
  128 + # message DIV
104 button = link_to_function(_('Help'), "alert('change me, Leandro!')") 129 button = link_to_function(_('Help'), "alert('change me, Leandro!')")
105 - concat(content_tag('div', button + content_tag('div', content, :class => 'help_message'), :class => 'help_box'), block.binding) 130 +
  131 + text = content_tag('div', button + content_tag('div', content, :class => 'help_message'), :class => 'help_box')
  132 +
  133 + unless block.nil?
  134 + concat(text, block.binding)
  135 + end
  136 +
  137 + text
106 end 138 end
107 139
108 - # alias for <tt>help(:textile)</tt>. Pass a block in the same way you would  
109 - # do if you called <tt>help</tt> directly.  
110 - def help_textile(&block)  
111 - help(:textile, &block) 140 + # alias for <tt>help(content, :textile)</tt>. You can pass a block in the
  141 + # same way you would do if you called <tt>help</tt> directly.
  142 + def help_textile(content = nil, &block)
  143 + help(content, :textile, &block)
112 end 144 end
113 145
114 end 146 end
app/views/features/index.rhtml
1 <h2><%= _('Enable/Disable features') %></h2> 1 <h2><%= _('Enable/Disable features') %></h2>
2 2
3 <%= render :partial => 'features_table' %> 3 <%= render :partial => 'features_table' %>
  4 +
  5 +<%= help_textile _('
  6 +Here you can enable or disable several features of your virtual community. Each feature represents some funcionality that your virtual community can use you enable it.
  7 +') %>
test/functional/application_controller_test.rb
@@ -53,8 +53,8 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase @@ -53,8 +53,8 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
53 assert_not_nil assigns(:chosen_icons_theme) 53 assert_not_nil assigns(:chosen_icons_theme)
54 end 54 end
55 55
56 - def test_should_generate_help_box  
57 - get :help 56 + def test_should_generate_help_box_when_passing_string
  57 + get :help_with_string
58 assert_tag({ 58 assert_tag({
59 :tag => 'div', 59 :tag => 'div',
60 :attributes => { :class => 'help_box'}, 60 :attributes => { :class => 'help_box'},
@@ -66,8 +66,37 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase @@ -66,8 +66,37 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
66 }) 66 })
67 end 67 end
68 68
69 - def test_should_generate_help_box_expanding_textile_markup  
70 - get :help_textile 69 + def test_should_generate_help_box_when_passing_block
  70 + get :help_with_block
  71 + assert_tag({
  72 + :tag => 'div',
  73 + :attributes => { :class => 'help_box'},
  74 + :descendant => {
  75 + :tag => 'div',
  76 + :content => /my_help_message/,
  77 + :attributes => { :class => 'help_message'}
  78 + }
  79 + })
  80 + end
  81 +
  82 + def test_should_generate_help_box_expanding_textile_markup_when_passing_string
  83 + get :help_textile_with_string
  84 + assert_tag({
  85 + :tag => 'div',
  86 + :attributes => { :class => 'help_box'},
  87 + :descendant => {
  88 + :tag => 'div',
  89 + :attributes => { :class => 'help_message'},
  90 + :descendant => {
  91 + :tag => 'strong',
  92 + :content => /my_bold_help_message/
  93 + }
  94 + }
  95 + })
  96 + end
  97 +
  98 + def test_should_generate_help_box_expanding_textile_markup_when_passing_block
  99 + get :help_textile_with_block
71 assert_tag({ 100 assert_tag({
72 :tag => 'div', 101 :tag => 'div',
73 :attributes => { :class => 'help_box'}, 102 :attributes => { :class => 'help_box'},
test/mocks/test/test_controller.rb
@@ -8,12 +8,28 @@ class TestController &lt; ApplicationController @@ -8,12 +8,28 @@ class TestController &lt; ApplicationController
8 render :text => '<span>post_only</span>' 8 render :text => '<span>post_only</span>'
9 end 9 end
10 10
11 - def help  
12 - render :inline => '<% help { %> my_help_message <% } %>' 11 + def help_with_string
  12 + render :inline => '<%= help "my_help_message" %>'
13 end 13 end
14 14
15 - def help_textile  
16 - render :inline => '<% help_textile { %> *my_bold_help_message* <% } %>' 15 + def help_with_block
  16 + render :inline => '
  17 + <% help do %>
  18 + my_help_message
  19 + <% end %>
  20 + '
  21 + end
  22 +
  23 + def help_textile_with_string
  24 + render :inline => '<%= help_textile "*my_bold_help_message*" %>'
  25 + end
  26 +
  27 + def help_textile_with_block
  28 + render :inline => '
  29 + <% help_textile do %>
  30 + *my_bold_help_message*
  31 + <% end %>
  32 + '
17 end 33 end
18 34
19 end 35 end