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 76 end
77 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 95 # <% help do %>
83 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 99 # <% end %>
87 100 #
88 101 # You can also pass an optional argument to force the use of textile in your
89 102 # help message:
90 103 #
91   - # <% help :textile do %>
  104 + # <% help nil, :textile do %>
92 105 # You can also use *textile*!
93 106 # <% end %>
94 107 #
  108 + # or, using the return of the method:
  109 + #
  110 + # <%= help 'this is your help message' %>
  111 + #
95 112 # Formally, the <tt>type</tt> argument can be <tt>:html</tt> or
96 113 # <tt>:textile</tt>. It defaults to <tt>:html</tt>.
97 114 #
98 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 123 if type == :textile
102 124 content = RedCloth.new(content).to_html
103 125 end
  126 +
  127 + # TODO: implement this button, and add style='display: none' to the help
  128 + # message DIV
104 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 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 144 end
113 145  
114 146 end
... ...
app/views/features/index.rhtml
1 1 <h2><%= _('Enable/Disable features') %></h2>
2 2  
3 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 53 assert_not_nil assigns(:chosen_icons_theme)
54 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 58 assert_tag({
59 59 :tag => 'div',
60 60 :attributes => { :class => 'help_box'},
... ... @@ -66,8 +66,37 @@ class ApplicationControllerTest &lt; Test::Unit::TestCase
66 66 })
67 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 100 assert_tag({
72 101 :tag => 'div',
73 102 :attributes => { :class => 'help_box'},
... ...
test/mocks/test/test_controller.rb
... ... @@ -8,12 +8,28 @@ class TestController &lt; ApplicationController
8 8 render :text => '<span>post_only</span>'
9 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 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 33 end
18 34  
19 35 end
... ...