Commit 4c6e563fb10b24118e026aeec8e9608da41735ab
1 parent
f4fab949
Exists in
master
and in
29 other branches
ActionItem501: moved all form related helpers to forms_helper.rb
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2107 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
2 changed files
with
126 additions
and
126 deletions
Show diff stats
app/helpers/application_helper.rb
... | ... | @@ -154,108 +154,6 @@ module ApplicationHelper |
154 | 154 | @controller.send(:profile) || raise("There is no current profile") |
155 | 155 | end |
156 | 156 | |
157 | - # create a form field structure (as if it were generated with | |
158 | - # labelled_form_for), but with a customized control and label. | |
159 | - # | |
160 | - # If +field_id+ is not given, the underlying implementation will try to guess | |
161 | - # it from +field_html+ using a regular expression. In this case, make sure | |
162 | - # that the first ocurrance of id=['"]([^'"]*)['"] in +field_html+ if the one | |
163 | - # you want (i.e. the correct id for the control ) | |
164 | - def labelled_form_field(label, field_html, field_id = nil) | |
165 | - NoosferoFormBuilder::output_field(label, field_html, field_id) | |
166 | - end | |
167 | - | |
168 | - alias_method :display_form_field, :labelled_form_field | |
169 | - | |
170 | - def labelled_fields_for(name, object = nil, options = {}, &proc) | |
171 | - object ||= instance_variable_get("@#{name}") | |
172 | - fields_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | |
173 | - end | |
174 | - | |
175 | - def labelled_form_for(name, object = nil, options = {}, &proc) | |
176 | - object ||= instance_variable_get("@#{name}") | |
177 | - form_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | |
178 | - end | |
179 | - | |
180 | - class NoosferoFormBuilder < ActionView::Helpers::FormBuilder | |
181 | - include GetText | |
182 | - extend ActionView::Helpers::TagHelper | |
183 | - | |
184 | - def self.output_field(text, field_html, field_id = nil) | |
185 | - # try to guess an id if none given | |
186 | - if field_id.nil? | |
187 | - field_html =~ /id=['"]([^'"]*)['"]/ | |
188 | - field_id = $1 | |
189 | - end | |
190 | - field_html =~ /type=['"]([^'"]*)['"]/ | |
191 | - field_html =~ /<(\w*)/ unless $1 | |
192 | - field_type = $1 | |
193 | - field_class = 'formfield type-' + field_type if field_type | |
194 | - | |
195 | - label_html = content_tag('label', _(text), :class => 'formlabel', :for => field_id) | |
196 | - control_html = content_tag('div', field_html, :class => field_class ) | |
197 | - | |
198 | - content_tag('div', label_html + control_html, :class => 'formfieldline' ) | |
199 | - end | |
200 | - | |
201 | - (field_helpers - %w(hidden_field)).each do |selector| | |
202 | - src = <<-END_SRC | |
203 | - def #{selector}(field, *args, &proc) | |
204 | - column = object.class.columns_hash[field.to_s] | |
205 | - text = | |
206 | - ( column ? | |
207 | - column.human_name : | |
208 | - _(field.to_s.humanize) | |
209 | - ) | |
210 | - | |
211 | - NoosferoFormBuilder::output_field(text, super) | |
212 | - end | |
213 | - END_SRC | |
214 | - class_eval src, __FILE__, __LINE__ | |
215 | - end | |
216 | - | |
217 | - # Create a formatable radio collection | |
218 | - # Tha values parameter is a array of [value, label] arrays like this: | |
219 | - # [ ['en',_('English')], ['pt',_('Portuguese')], ['es',_('Spanish')] ] | |
220 | - # The option :size will set how many radios will be showed in each line | |
221 | - # Example: use :size => 3 as option if you want 3 radios by line | |
222 | - def radio_group( object_name, method, values, options = {} ) | |
223 | - line_size = options[:size] || 0 | |
224 | - line_item = 0 | |
225 | - html = "\n" | |
226 | - values.each { |val, h_val| | |
227 | - id = object_name.to_s() +'_'+ method.to_s() +'_'+ val.to_s() | |
228 | - # Não está apresentando o sexo selecionado ao revisitar | |
229 | - # http://localhost:3000/myprofile/manuel/profile_editor/edit :-( | |
230 | - html += self.class.content_tag( 'span', | |
231 | - @template.radio_button( object_name, method, val, | |
232 | - :id => id, :object => @object ) + | |
233 | - self.class.content_tag( 'label', h_val, :for => id ), | |
234 | - :class => 'lineitem' + (line_item+=1).to_s() ) +"\n" | |
235 | - if line_item == line_size | |
236 | - line_item = 0 | |
237 | - html += "<br />\n" | |
238 | - end | |
239 | - } | |
240 | - html += "<br />\n" if line_size == 0 || ( values.size % line_size ) > 0 | |
241 | - column = object.class.columns_hash[method.to_s] | |
242 | - text = | |
243 | - ( column ? | |
244 | - column.human_name : | |
245 | - _(method.to_s.humanize) | |
246 | - ) | |
247 | - label_html = self.class.content_tag 'label', text, | |
248 | - :class => 'formlabel' | |
249 | - control_html = self.class.content_tag 'div', html, | |
250 | - :class => 'formfield type-radio '+ | |
251 | - 'fieldgroup linesize'+line_size.to_s() | |
252 | - | |
253 | - self.class.content_tag 'div', label_html + control_html, | |
254 | - :class => 'formfieldline' | |
255 | - end | |
256 | - | |
257 | - end | |
258 | - | |
259 | 157 | def category_color |
260 | 158 | if @category.nil? |
261 | 159 | "" |
... | ... | @@ -314,21 +212,6 @@ module ApplicationHelper |
314 | 212 | end |
315 | 213 | alias icon_button button_without_text |
316 | 214 | |
317 | - def submit_button(type, label, html_options = {}) | |
318 | - bt_cancel = html_options[:cancel] ? button(:cancel, _('Cancel'), html_options[:cancel]) : '' | |
319 | - | |
320 | - html_options[:class] = [html_options[:class], 'submit'].compact.join(' ') | |
321 | - | |
322 | - the_class = "button with-text icon-#{type}" | |
323 | - if html_options.has_key?(:class) | |
324 | - the_class << ' ' << html_options[:class] | |
325 | - end | |
326 | - | |
327 | - bt_submit = submit_tag(label, html_options.merge(:class => the_class)) | |
328 | - | |
329 | - bt_submit + bt_cancel | |
330 | - end | |
331 | - | |
332 | 215 | def button_to_function(type, label, js_code, html_options = {}) |
333 | 216 | html_options[:class] = "" unless html_options[:class] |
334 | 217 | html_options[:class] << " button #{type}" |
... | ... | @@ -473,15 +356,6 @@ module ApplicationHelper |
473 | 356 | :class => 'vcard' |
474 | 357 | end |
475 | 358 | |
476 | - def text_field_with_local_autocomplete(name, choices, html_options = {}) | |
477 | - id = html_options[:id] || name | |
478 | - | |
479 | - text_field_tag(name, '', html_options) + | |
480 | - content_tag('div', '', :id => "autocomplete-for-#{id}", :class => 'auto-complete', :style => 'display: none;') + | |
481 | - javascript_tag('new Autocompleter.Local(%s, %s, %s)' % [ id.to_json, "autocomplete-for-#{id}".to_json, choices.to_json ] ) | |
482 | - | |
483 | - end | |
484 | - | |
485 | 359 | def gravatar_url_for(email, options = {}) |
486 | 360 | # Ta dando erro de roteamento |
487 | 361 | url_for( { :gravatar_id => Digest::MD5.hexdigest(email), | ... | ... |
app/helpers/forms_helper.rb
1 | 1 | module FormsHelper |
2 | 2 | |
3 | + # create a form field structure (as if it were generated with | |
4 | + # labelled_form_for), but with a customized control and label. | |
5 | + # | |
6 | + # If +field_id+ is not given, the underlying implementation will try to guess | |
7 | + # it from +field_html+ using a regular expression. In this case, make sure | |
8 | + # that the first ocurrance of id=['"]([^'"]*)['"] in +field_html+ if the one | |
9 | + # you want (i.e. the correct id for the control ) | |
10 | + def labelled_form_field(label, field_html, field_id = nil) | |
11 | + NoosferoFormBuilder::output_field(label, field_html, field_id) | |
12 | + end | |
13 | + | |
14 | + alias_method :display_form_field, :labelled_form_field | |
15 | + | |
16 | + def labelled_fields_for(name, object = nil, options = {}, &proc) | |
17 | + object ||= instance_variable_get("@#{name}") | |
18 | + fields_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | |
19 | + end | |
20 | + | |
21 | + def labelled_form_for(name, object = nil, options = {}, &proc) | |
22 | + object ||= instance_variable_get("@#{name}") | |
23 | + form_for(name, object, { :builder => NoosferoFormBuilder }.merge(options), &proc) | |
24 | + end | |
25 | + | |
26 | + class NoosferoFormBuilder < ActionView::Helpers::FormBuilder | |
27 | + include GetText | |
28 | + extend ActionView::Helpers::TagHelper | |
29 | + | |
30 | + def self.output_field(text, field_html, field_id = nil) | |
31 | + # try to guess an id if none given | |
32 | + if field_id.nil? | |
33 | + field_html =~ /id=['"]([^'"]*)['"]/ | |
34 | + field_id = $1 | |
35 | + end | |
36 | + field_html =~ /type=['"]([^'"]*)['"]/ | |
37 | + field_html =~ /<(\w*)/ unless $1 | |
38 | + field_type = $1 | |
39 | + field_class = 'formfield type-' + field_type if field_type | |
40 | + | |
41 | + label_html = content_tag('label', _(text), :class => 'formlabel', :for => field_id) | |
42 | + control_html = content_tag('div', field_html, :class => field_class ) | |
43 | + | |
44 | + content_tag('div', label_html + control_html, :class => 'formfieldline' ) | |
45 | + end | |
46 | + | |
47 | + (field_helpers - %w(hidden_field)).each do |selector| | |
48 | + src = <<-END_SRC | |
49 | + def #{selector}(field, *args, &proc) | |
50 | + column = object.class.columns_hash[field.to_s] | |
51 | + text = | |
52 | + ( column ? | |
53 | + column.human_name : | |
54 | + _(field.to_s.humanize) | |
55 | + ) | |
56 | + | |
57 | + NoosferoFormBuilder::output_field(text, super) | |
58 | + end | |
59 | + END_SRC | |
60 | + class_eval src, __FILE__, __LINE__ | |
61 | + end | |
62 | + | |
63 | + # Create a formatable radio collection | |
64 | + # Tha values parameter is a array of [value, label] arrays like this: | |
65 | + # [ ['en',_('English')], ['pt',_('Portuguese')], ['es',_('Spanish')] ] | |
66 | + # The option :size will set how many radios will be showed in each line | |
67 | + # Example: use :size => 3 as option if you want 3 radios by line | |
68 | + def radio_group( object_name, method, values, options = {} ) | |
69 | + line_size = options[:size] || 0 | |
70 | + line_item = 0 | |
71 | + html = "\n" | |
72 | + values.each { |val, h_val| | |
73 | + id = object_name.to_s() +'_'+ method.to_s() +'_'+ val.to_s() | |
74 | + # Não está apresentando o sexo selecionado ao revisitar | |
75 | + # http://localhost:3000/myprofile/manuel/profile_editor/edit :-( | |
76 | + html += self.class.content_tag( 'span', | |
77 | + @template.radio_button( object_name, method, val, | |
78 | + :id => id, :object => @object ) + | |
79 | + self.class.content_tag( 'label', h_val, :for => id ), | |
80 | + :class => 'lineitem' + (line_item+=1).to_s() ) +"\n" | |
81 | + if line_item == line_size | |
82 | + line_item = 0 | |
83 | + html += "<br />\n" | |
84 | + end | |
85 | + } | |
86 | + html += "<br />\n" if line_size == 0 || ( values.size % line_size ) > 0 | |
87 | + column = object.class.columns_hash[method.to_s] | |
88 | + text = | |
89 | + ( column ? | |
90 | + column.human_name : | |
91 | + _(method.to_s.humanize) | |
92 | + ) | |
93 | + label_html = self.class.content_tag 'label', text, | |
94 | + :class => 'formlabel' | |
95 | + control_html = self.class.content_tag 'div', html, | |
96 | + :class => 'formfield type-radio '+ | |
97 | + 'fieldgroup linesize'+line_size.to_s() | |
98 | + | |
99 | + self.class.content_tag 'div', label_html + control_html, | |
100 | + :class => 'formfieldline' | |
101 | + end | |
102 | + | |
103 | + end | |
104 | + | |
105 | + | |
3 | 106 | def generate_form( name, obj, fields={} ) |
4 | 107 | labelled_form_for name, obj do |f| |
5 | 108 | f.text_field(:name) |
... | ... | @@ -30,6 +133,29 @@ module FormsHelper |
30 | 133 | select_tag( name, options_from_collection_for_select(collection, value_method, text_method, selected), options) |
31 | 134 | end |
32 | 135 | |
136 | + def submit_button(type, label, html_options = {}) | |
137 | + bt_cancel = html_options[:cancel] ? button(:cancel, _('Cancel'), html_options[:cancel]) : '' | |
138 | + | |
139 | + html_options[:class] = [html_options[:class], 'submit'].compact.join(' ') | |
140 | + | |
141 | + the_class = "button with-text icon-#{type}" | |
142 | + if html_options.has_key?(:class) | |
143 | + the_class << ' ' << html_options[:class] | |
144 | + end | |
145 | + | |
146 | + bt_submit = submit_tag(label, html_options.merge(:class => the_class)) | |
147 | + | |
148 | + bt_submit + bt_cancel | |
149 | + end | |
150 | + | |
151 | + def text_field_with_local_autocomplete(name, choices, html_options = {}) | |
152 | + id = html_options[:id] || name | |
153 | + | |
154 | + text_field_tag(name, '', html_options) + | |
155 | + content_tag('div', '', :id => "autocomplete-for-#{id}", :class => 'auto-complete', :style => 'display: none;') + | |
156 | + javascript_tag('new Autocompleter.Local(%s, %s, %s)' % [ id.to_json, "autocomplete-for-#{id}".to_json, choices.to_json ] ) | |
157 | + end | |
158 | + | |
33 | 159 | protected |
34 | 160 | def self.next_id_number |
35 | 161 | if defined? @@id_num | ... | ... |