Commit 4c6e563fb10b24118e026aeec8e9608da41735ab
1 parent
f4fab949
Exists in
master
and in
22 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,108 +154,6 @@ module ApplicationHelper | ||
| 154 | @controller.send(:profile) || raise("There is no current profile") | 154 | @controller.send(:profile) || raise("There is no current profile") |
| 155 | end | 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 | def category_color | 157 | def category_color |
| 260 | if @category.nil? | 158 | if @category.nil? |
| 261 | "" | 159 | "" |
| @@ -314,21 +212,6 @@ module ApplicationHelper | @@ -314,21 +212,6 @@ module ApplicationHelper | ||
| 314 | end | 212 | end |
| 315 | alias icon_button button_without_text | 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 | def button_to_function(type, label, js_code, html_options = {}) | 215 | def button_to_function(type, label, js_code, html_options = {}) |
| 333 | html_options[:class] = "" unless html_options[:class] | 216 | html_options[:class] = "" unless html_options[:class] |
| 334 | html_options[:class] << " button #{type}" | 217 | html_options[:class] << " button #{type}" |
| @@ -473,15 +356,6 @@ module ApplicationHelper | @@ -473,15 +356,6 @@ module ApplicationHelper | ||
| 473 | :class => 'vcard' | 356 | :class => 'vcard' |
| 474 | end | 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 | def gravatar_url_for(email, options = {}) | 359 | def gravatar_url_for(email, options = {}) |
| 486 | # Ta dando erro de roteamento | 360 | # Ta dando erro de roteamento |
| 487 | url_for( { :gravatar_id => Digest::MD5.hexdigest(email), | 361 | url_for( { :gravatar_id => Digest::MD5.hexdigest(email), |
app/helpers/forms_helper.rb
| 1 | module FormsHelper | 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 | def generate_form( name, obj, fields={} ) | 106 | def generate_form( name, obj, fields={} ) |
| 4 | labelled_form_for name, obj do |f| | 107 | labelled_form_for name, obj do |f| |
| 5 | f.text_field(:name) | 108 | f.text_field(:name) |
| @@ -30,6 +133,29 @@ module FormsHelper | @@ -30,6 +133,29 @@ module FormsHelper | ||
| 30 | select_tag( name, options_from_collection_for_select(collection, value_method, text_method, selected), options) | 133 | select_tag( name, options_from_collection_for_select(collection, value_method, text_method, selected), options) |
| 31 | end | 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 | protected | 159 | protected |
| 34 | def self.next_id_number | 160 | def self.next_id_number |
| 35 | if defined? @@id_num | 161 | if defined? @@id_num |