simple_form 1.5.2 → 2.0.0.rc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (105) hide show
  1. data/CHANGELOG.md +224 -0
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +817 -0
  4. data/lib/generators/simple_form/install_generator.rb +15 -1
  5. data/lib/generators/simple_form/templates/README +12 -0
  6. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb.tt +173 -0
  7. data/lib/simple_form.rb +109 -43
  8. data/lib/simple_form/action_view_extensions/builder.rb +158 -53
  9. data/lib/simple_form/action_view_extensions/form_helper.rb +29 -22
  10. data/lib/simple_form/components.rb +11 -1
  11. data/lib/simple_form/components/errors.rb +6 -24
  12. data/lib/simple_form/components/hints.rb +7 -21
  13. data/lib/simple_form/components/html5.rb +26 -0
  14. data/lib/simple_form/components/labels.rb +15 -13
  15. data/lib/simple_form/components/maxlength.rb +41 -0
  16. data/lib/simple_form/components/min_max.rb +49 -0
  17. data/lib/simple_form/components/pattern.rb +34 -0
  18. data/lib/simple_form/components/placeholders.rb +5 -17
  19. data/lib/simple_form/components/readonly.rb +22 -0
  20. data/lib/simple_form/core_ext/hash.rb +16 -0
  21. data/lib/simple_form/error_notification.rb +8 -1
  22. data/lib/simple_form/form_builder.rb +86 -22
  23. data/lib/simple_form/helpers.rb +7 -4
  24. data/lib/simple_form/helpers/autofocus.rb +11 -0
  25. data/lib/simple_form/helpers/disabled.rb +15 -0
  26. data/lib/simple_form/helpers/readonly.rb +15 -0
  27. data/lib/simple_form/helpers/required.rb +7 -10
  28. data/lib/simple_form/helpers/validators.rb +4 -4
  29. data/lib/simple_form/inputs.rb +17 -13
  30. data/lib/simple_form/inputs/base.rb +50 -81
  31. data/lib/simple_form/inputs/boolean_input.rb +43 -4
  32. data/lib/simple_form/inputs/collection_check_boxes_input.rb +21 -0
  33. data/lib/simple_form/inputs/collection_input.rb +27 -13
  34. data/lib/simple_form/inputs/collection_radio_buttons_input.rb +69 -0
  35. data/lib/simple_form/inputs/collection_select_input.rb +14 -0
  36. data/lib/simple_form/inputs/date_time_input.rb +2 -2
  37. data/lib/simple_form/inputs/grouped_collection_select_input.rb +41 -0
  38. data/lib/simple_form/inputs/hidden_input.rb +3 -6
  39. data/lib/simple_form/inputs/numeric_input.rb +3 -51
  40. data/lib/simple_form/inputs/password_input.rb +1 -2
  41. data/lib/simple_form/inputs/priority_input.rb +2 -2
  42. data/lib/simple_form/inputs/range_input.rb +1 -3
  43. data/lib/simple_form/inputs/string_input.rb +6 -8
  44. data/lib/simple_form/inputs/text_input.rb +1 -2
  45. data/lib/simple_form/version.rb +1 -1
  46. data/lib/simple_form/wrappers.rb +8 -0
  47. data/lib/simple_form/wrappers/builder.rb +75 -0
  48. data/lib/simple_form/wrappers/many.rb +68 -0
  49. data/lib/simple_form/wrappers/root.rb +34 -0
  50. data/lib/simple_form/wrappers/single.rb +18 -0
  51. data/test/action_view_extensions/builder_test.rb +195 -100
  52. data/test/action_view_extensions/form_helper_test.rb +24 -2
  53. data/test/components/label_test.rb +20 -5
  54. data/test/form_builder/association_test.rb +167 -0
  55. data/test/form_builder/button_test.rb +28 -0
  56. data/test/{error_notification_test.rb → form_builder/error_notification_test.rb} +2 -1
  57. data/test/form_builder/error_test.rb +101 -0
  58. data/test/form_builder/general_test.rb +348 -0
  59. data/test/form_builder/hint_test.rb +115 -0
  60. data/test/form_builder/input_field_test.rb +51 -0
  61. data/test/form_builder/label_test.rb +51 -0
  62. data/test/form_builder/wrapper_test.rb +140 -0
  63. data/test/generators/simple_form_generator_test.rb +32 -0
  64. data/test/inputs/boolean_input_test.rb +91 -0
  65. data/test/inputs/collection_check_boxes_input_test.rb +224 -0
  66. data/test/inputs/collection_radio_buttons_input_test.rb +326 -0
  67. data/test/inputs/collection_select_input_test.rb +241 -0
  68. data/test/inputs/datetime_input_test.rb +85 -0
  69. data/test/inputs/disabled_test.rb +38 -0
  70. data/test/inputs/discovery_test.rb +61 -0
  71. data/test/inputs/file_input_test.rb +16 -0
  72. data/test/inputs/general_test.rb +69 -0
  73. data/test/inputs/grouped_collection_select_input_test.rb +109 -0
  74. data/test/inputs/hidden_input_test.rb +30 -0
  75. data/test/inputs/numeric_input_test.rb +167 -0
  76. data/test/inputs/priority_input_test.rb +43 -0
  77. data/test/inputs/readonly_test.rb +61 -0
  78. data/test/inputs/required_test.rb +113 -0
  79. data/test/inputs/string_input_test.rb +140 -0
  80. data/test/inputs/text_input_test.rb +24 -0
  81. data/test/{discovery_inputs.rb → support/discovery_inputs.rb} +0 -0
  82. data/test/support/misc_helpers.rb +48 -6
  83. data/test/support/mock_controller.rb +2 -2
  84. data/test/support/models.rb +20 -5
  85. data/test/test_helper.rb +5 -8
  86. metadata +123 -98
  87. data/.gitignore +0 -3
  88. data/.gitmodules +0 -3
  89. data/.travis.yml +0 -15
  90. data/CHANGELOG.rdoc +0 -159
  91. data/Gemfile +0 -9
  92. data/README.rdoc +0 -466
  93. data/Rakefile +0 -27
  94. data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +0 -93
  95. data/lib/simple_form/components/wrapper.rb +0 -38
  96. data/lib/simple_form/helpers/has_errors.rb +0 -15
  97. data/lib/simple_form/helpers/maxlength.rb +0 -24
  98. data/lib/simple_form/helpers/pattern.rb +0 -28
  99. data/simple_form.gemspec +0 -25
  100. data/test/components/error_test.rb +0 -56
  101. data/test/components/hint_test.rb +0 -74
  102. data/test/components/wrapper_test.rb +0 -63
  103. data/test/custom_components.rb +0 -7
  104. data/test/form_builder_test.rb +0 -930
  105. data/test/inputs_test.rb +0 -995
data/CHANGELOG.md ADDED
@@ -0,0 +1,224 @@
1
+ ## 2.0.0.rc
2
+
3
+ ### enhancements
4
+ * Add `button_class` configuration to change the class of buttons. ([@sryche](https://github.com/sryche))
5
+ * Add `disabled` class to a disabled input.
6
+ * Generate configuration file with `browser_validations` disabled.
7
+ * Add option and configuration to specify the collection wrapper class. ([@mfila](https://github.com/mfila))
8
+ * Add proc support to `collection` option. ([@jeffkreeftmeijer](https://github.com/jeffkreeftmeijer))
9
+ * `simple_form_for` allows default options for its inputs `:defaults => {}`.
10
+ * Add `readonly` as option of input method. ([@Untainted123](https://github.com/Untainted123))
11
+ * `simple_fields_for` for inherits wrapper option form the form builder. ([@nashby](https://github.com/nashby))
12
+ * Deprecated part of the old configuration API in favor of the wrapper API which allows you to customize your inputs
13
+ in a more flexible way. See [this guide](https://github.com/plataformatec/simple_form/wiki/Upgrading-to-Simple-Form-2.0)
14
+ to know how upgrade.
15
+ * Use action prefix in the form css class. Closes [#360](https://github.com/plataformatec/simple_form/issues/360).
16
+ This is not backward compatible with the previous versions of SimpleForm.
17
+ For more informations see [this comment](https://github.com/plataformatec/simple_form/issues/360#issuecomment-3000780).
18
+ ([@nashby](https://github.com/nashby))
19
+ * Add a readonly component that does automatically readonly lookup from object
20
+ * Add support for proc or lambda as option for format validator ([@nashby](https://github.com/nashby))
21
+ * Handle validates_length_of :is option in maxlength ([@nashby](https://github.com/nashby))
22
+ * Add field_with_hint css class to the wrapper when the input has a hint, similar to field_with_errors ([@nashby](https://github.com/nashby))
23
+ * Add :grouped_select input type, mapping to Rails grouped_collection_select helper ([@semaperepelitsa](https://github.com/semaperepelitsa))
24
+ * Add automatic translation of options for collection inputs given a collection of symbols ([@klobuczek](https://github.com/klobuczek))
25
+ * Add `:boolean_style` config to change how check boxes and radios will be displayed.
26
+ Options are `:inline = input + label` (default) and `:nested = label > input`.
27
+ * Add possibility to give a block to `collection_radio` and `collection_check_boxes`,
28
+ to generate custom label and input structure. It is used internally with the :nested
29
+ option for `:boolean_style`, and is useful to allow some more customization if required.
30
+ * Do not generate hidden check box field when using nested boolean style, as it is considered
31
+ invalid markup in HTML5. This will work by default in Rails > 3.2.1 (not released at this time),
32
+ and is backported inside SimpleForm builder extensions.
33
+ More info in [#215](https://github.com/plataformatec/simple_form/issues/215)
34
+ * Add `item_wrapper_class` configuration option for collection radio buttons / check boxes inputs.
35
+
36
+ ### deprecation
37
+ * Deprecate the `translate` configuration in favor of `translate_labels`
38
+ * Deprecate the `html5` configuration in favor of a new `html5` component
39
+ * Deprecate `:radio` input type in favor of `:radio_buttons`
40
+ * Deprecate `collection_radio` form helper in favor of `collection_radio_buttons`
41
+ (the label class has changed as well)
42
+
43
+ ### bug fix
44
+ * Fix i18n lookup with attributes with same name of models.
45
+ Closes [#149](https://github.com/plataformatec/simple_form/issues/149)
46
+ and [#364](https://github.com/plataformatec/simple_form/issues/364).
47
+ ([@nashby](https://github.com/nashby) and [@MarceloCajueiro](https://github.com/MarceloCajueiro))
48
+ * Do not generate `for` attribute for the collection label when it is a checkbox or radio.
49
+ Closes [#344](https://github.com/plataformatec/simple_form/issues/344).
50
+ ([@nashby](https://github.com/nashby) and [@mfila](https://github.com/mfila))
51
+ * Select can have required option when the `:include_blank` option is passed.
52
+ Closes [#340](https://github.com/plataformatec/simple_form/issues/340). ([@nashby](https://github.com/nashby))
53
+ * `:checked` option should override the existing associations on `collection_check_boxes`.
54
+ Closes [#341](https://github.com/plataformatec/simple_form/issues/341). ([@nashby](https://github.com/nashby))
55
+ * Move default attribute translations out of root - use "defaults" key instead
56
+ Closes [#384](https://github.com/plataformatec/simple_form/issues/384). ([@fringd](https://github.com/fringd))
57
+
58
+ ## 1.5.2
59
+
60
+ ### bug fix
61
+ * Remove the internal usage of deprecated `:components`
62
+
63
+ ## 1.5.1
64
+
65
+ ### deprecation
66
+ * `:components` options is now deprecated
67
+
68
+ ### bug fix
69
+ * Fallback to default label when block is provided. ([@pivotal-casebook](https://github.com/pivotal-casebook))
70
+ * Do not override default selection through attribute value in collection select when label/value methods are lambdas.
71
+
72
+ ## 1.5.0
73
+
74
+ ### enhancements
75
+ * Simplified generator by using directory action. ([@rupert654](https://github.com/rupert654))
76
+ * Support for `maxlength` on string inputs inferred from validation. ([@srbartlett](https://github.com/srbartlett))
77
+ * Change form css class handling to only add the dom class when one is not given to the form call.
78
+ ([@patrick99e99](https://github.com/patrick99e99))
79
+ * Support for required attributes when action validations are present. ([@csegura](http://github.com/csegura))
80
+ * Do not generate `size` attribute for numeric input. ([@csegura](https://github.com/jasonmp85))
81
+ * Support for `maxlength` on text area inputs inferred from validation.
82
+ * Support for `pattern` on text field inferred from validation when `:pattern` is true.
83
+ * Break Text, Password and File into their own inputs.
84
+ * Support easy enabling and disabling of components for specific inputs.
85
+ * Add HTML5 range input.
86
+
87
+ ### bug fix
88
+ * Fix bug when `simple_fields_for` is used with a hash like models and Rails 3.1.
89
+ * Fix bug that does not remove the `:item_wrapper_tag` or the `:collection_wrapper_tag` on collection
90
+ inputs when nil or false value is passed to these options. ([@dw2](https://gitbub.com/dw2))
91
+ * Fix bug that disable the entire select and wrapper when `disabled` option is a string or array.
92
+ * Fix bug when using label/value methods as procs together with disabled/selected options as procs for select inputs.
93
+
94
+ ## 1.4.2
95
+
96
+ ### enhancements
97
+ * Rails 3.1 support.
98
+
99
+ ## 1.4.1
100
+
101
+ ### enhancements
102
+ * ignore required attribute when conditional validations are present.
103
+
104
+ ### bug fix
105
+ * Do not use `required='required'` when browser validations are turned off.
106
+ * Sanitize HMTL attributes in error and hint helpers when options are present.
107
+ * Improve i18n lookup by ignoring explicit child index given to form builder.
108
+ (tests by [@rywall](https://github.com/rywall))
109
+ * Fixes the form specific validation option if specified on the form itself. ([@medihack](https://github.com/medihack))
110
+
111
+ ## 1.4.0
112
+
113
+ ### enhancements
114
+ * Add label class configuration option. ([@reu](http://github.com/reu))
115
+ * Improve i18n lookup (labels/hints/placeholders) for nested models.
116
+ * Use the given custom builder with `simple_fields_for`. ([@giniedp](https://github.com/giniedp))
117
+ * Add slim form generator. ([@fagiani](https://github.com/fagiani))
118
+ * Add `form_class` configuration option. ([@fagiani](https://github.com/fagiani))
119
+ * Default step of `any` for number input with non integer attributes. ([@fedesoria](https://github.com/fedesoria))
120
+ * Add option to disable HTML5 browser validations on all forms. ([@coryschires](https://github.com/coryschires))
121
+ * Add option to disable all HTML5 extensions. ([@wolframarnold](https://github.com/wolframarnold))
122
+ * Add `input_field` helper to form builder. ([@jeroenhouben](https://github.com/jeroenhouben))
123
+ * Allow inputs to be discovered on demand by placing them at app/inputs (a la formtastic).
124
+ * Add `full_error` on that shows the error with the attribute name.
125
+
126
+ ### bug fix
127
+ * Fix for file attributes automatic detection, to work with virtual attributes.
128
+ * Fix for numeric fields validation options using symbols and procs.
129
+ * Fix password attributes to add `size` and `maxlength` options the same way as string. ([@fedesoria](https://github.com/fedesoria))
130
+ * Fix bug with custom form builders and new mappings being added to the superclass builder. ([@rdvdijk](https://github.com/rdvdijk))
131
+ * Fix HTML validation issue with `collection_check_boxes`.
132
+
133
+ ## 1.3.1
134
+
135
+ ### enhancements
136
+ * Add `:autofocus` HTML5 attribute support. ([@jpzwarte](https://github.com/jpzwarte))
137
+ * Add possibility to specify custom builder and inherit mappings. ([@rejeep](https://github.com/rejeep))
138
+ * Make custom mappings work with all attributes types. ([@rafaelfranca](https://github.com/rafaelfranca))
139
+ * Add support for procs/lambdas in text/value methods for `collection_select`.
140
+
141
+ ### deprecation
142
+ * removed the deprecated `:remote_form_for`
143
+
144
+ ### bug fix
145
+ * Only add the `required` HTML 5 attribute for valid inputs, disable in selects (not allowed).
146
+ * Fix error when using hints without an attribute.
147
+ ([@butsjoh](https://github.com/butsjoh) and [@rafaelfranca](https://github.com/rafaelfranca))
148
+ * Fix messy html output for hint, error and label components.
149
+ ([@butsjoh](https://github.com/butsjoh) and [@rafaelfranca](https://github.com/rafaelfranca))
150
+ * Allow direct setting of for attribute on label. ([@Bertg](https://github.com/Bertg))
151
+
152
+ ## 1.3.0
153
+
154
+ ### enhancements
155
+ * Allow collection input to accept a collection of symbols.
156
+ * Add default css class to button.
157
+ * Allow forms for objects that do not respond to the `errors` method.
158
+ * `collection_check_boxes` and `collection_radio` now wrap the input in the label.
159
+ * Automatic add min/max values for numeric attributes based on validations and step for integers - HTML5.
160
+ ([@dasch](https://github.com/dasch))
161
+ * Add `:placeholder` option for string inputs, allowing customization through I18n - HTML5.
162
+ ([@jonathan](https://github.com/jonathan))
163
+ * Add `:search` and `:tel` input types, with `:tel` mapping automatically from attributes matching "phone" - HTML5.
164
+ * Add `:required` html attribute for required inputs - HTML5.
165
+ * Add optional `:components` option to input to control component rendering. ([@khoan](https://github.com/khoan))
166
+ * Add `SimpleForm.translate` as an easy way to turn off SimpleForm internal translations.
167
+ * Add `:disabled` option for all inputs. ([@fabiob](https://github.com/fabiob))
168
+ * Add collection wrapper tag and item wrapper tag to wrap elements in collection helpers - radio / check boxes.
169
+ * Add `SimpleForm.input_mappings` to allow configuring custom mappings for inputs. ([@TMaYaD](https://github.com/TMaYaD))
170
+
171
+ ### bug fix
172
+ * Search for validations on both association and attribute.
173
+ * Use `controller.action_name` to lookup action only when available, to fix issue with Rspec views tests.
174
+ ([@rafaelfranca](https://github.com/rafaelfranca))
175
+
176
+ ## 1.2.2
177
+
178
+ ### enhancements
179
+ * Compatibility with Rails 3 RC.
180
+
181
+ ## 1.2.1
182
+
183
+ ### enhancements
184
+ * Added haml generator support. ([@grimen](https://github.com/grimen))
185
+ * Added `error_notification` message to form builder.
186
+ * Added required by default as configuration option.
187
+ * Added `label_input` as component, allowing boolean to change its order (input appearing first than label).
188
+ * Added `error_method` to tidy up how errors are exhibited.
189
+ * Added error class on wrappers. ([@jduff](https://github.com/jduff))
190
+ * Changed numeric types to have `type=number` for HTML5.
191
+
192
+ ## 1.2.0
193
+
194
+ ### deprecation
195
+ * Changed `simple_form_install` generator to `simple_form:install`.
196
+
197
+ ### enhancements
198
+ * Added support to presence validation to check if attribute is required or not. ([@gcirne](https://github.com/gcirne))
199
+ * Added `input` as class to wrapper tag.
200
+ * Added config options for hint and error tags. ([@tjogin](https://github.com/tjogin))
201
+
202
+ ## 1.1.3
203
+
204
+ ### deprecation
205
+ * removed `:conditions`, `:order`, `:joins` and `:include` support in `f.association`.
206
+
207
+ ## 1.1.2
208
+
209
+ ### bug fix
210
+ * Ensure type is set to "text" and not "string".
211
+
212
+ ## 1.1.1
213
+
214
+ ### bug fix
215
+ * Fix some escaping issues.
216
+
217
+ ## 1.1.0
218
+
219
+ ### enhancements
220
+ * Rails 3 support with generators, templates and HTML 5.
221
+
222
+ ## 1.0
223
+
224
+ * First release.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2011 PlataformaTec http://blog.plataformatec.com.br/
1
+ Copyright (c) 2012 PlataformaTec http://blog.plataformatec.com.br/
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.md ADDED
@@ -0,0 +1,817 @@
1
+ # SimpleForm - Rails forms made easy.
2
+ [![Build Status](https://secure.travis-ci.org/plataformatec/simple_form.png)](http://travis-ci.org/plataformatec/simple_form)
3
+
4
+ **SimpleForm** aims to be as flexible as possible while helping you with powerful components to create
5
+ your forms. The basic goal of simple form is to not touch your way of defining the layout, letting
6
+ you find the better design for your eyes. Most of the DSL was inherited from Formtastic,
7
+ which we are thankful for and should make you feel right at home.
8
+
9
+ INFO: This README is [also available in a friendly navigable format](http://simple-form.plataformatec.com.br/).
10
+
11
+ ## Installation
12
+
13
+ Add it to your Gemfile:
14
+
15
+ `gem 'simple_form'`
16
+
17
+ Run the following command to install it:
18
+
19
+ `bundle install`
20
+
21
+ Run the generator:
22
+
23
+ `rails generate simple_form:install`
24
+
25
+ Also, if you want to use the country select, you will need the
26
+ [country_select gem](https://rubygems.org/gems/country_select), add it to your Gemfile:
27
+
28
+ `gem 'country_select'`
29
+
30
+ And you are ready to go. Since this branch aims Rails 3 support, if you want to use it with
31
+ Rails 2.3 you should check this branch:
32
+
33
+ `http://github.com/plataformatec/simple_form/tree/v1.0`
34
+
35
+ ## Configuration
36
+
37
+ **SimpleForm** has several configuration options. You can read and change them in the initializer
38
+ created by **SimpleForm**, so if you haven't executed the command below yet, please do:
39
+
40
+ `rails generate simple_form:install`
41
+
42
+ ### Twitter Bootstrap
43
+
44
+ **SimpleForm** 2.0 can be easily integrated to the [Twitter Bootstrap](http://twitter.github.com/bootstrap).
45
+ To do that you have to use the `bootstrap` option in the install generator, like this:
46
+
47
+ `rails generate simple_form:install --bootstrap`
48
+
49
+ You have to be sure that you added a copy of the [Twitter Bootstrap](http://twitter.github.com/bootstrap)
50
+ assets on your application.
51
+
52
+ For more information see the generator output, our
53
+ [example application code](https://github.com/rafaelfranca/simple_form-bootstrap) and
54
+ [the live example app](http://simple-form-bootstrap.plataformatec.com.br/).
55
+
56
+ **NOTE**: **SimpleForm** integration requires Twitter Bootstrap version 2.0 or higher.
57
+
58
+ ### The wrappers API
59
+
60
+ With **SimpleForm** you can configure how your components will be rendered using the wrappers API.
61
+ The syntax looks like this:
62
+
63
+ ```ruby
64
+ config.wrappers :tag => :div, :class => :input,
65
+ :error_class => :field_with_errors do |b|
66
+
67
+ # Form extensions
68
+ b.use :html5
69
+ b.optional :pattern
70
+ b.use :maxlength
71
+ b.use :placeholder
72
+ b.use :readonly
73
+
74
+ # Form components
75
+ b.use :label_input
76
+ b.use :hint, :tag => :span, :class => :hint
77
+ b.use :error, :tag => :span, :class => :error
78
+ end
79
+ ```
80
+
81
+ The _Form components_ will generate the form tags like labels, inputs, hints or errors contents.
82
+
83
+ The _Form extensions_ are used to generate some attributes or perform some lookups on the model to
84
+ add extra information to your components.
85
+
86
+ You can create new _Form components_ using the wrappers API as in the following example:
87
+
88
+ ```ruby
89
+ config.wrappers do |b|
90
+ b.use :placeholder
91
+ b.use :label_input
92
+ b.use :tag => :div, :class => 'separator' do |component|
93
+ component.use :hint, :tag => :span, :class => :hint
94
+ component.use :error, :tag => :span, :class => :error
95
+ end
96
+ end
97
+ ```
98
+
99
+ this will wrap the hint and error components within a `div` tag using the class `'separator'`.
100
+
101
+ If you want to customize the custom _Form components_ on demand you can give it a name like this:
102
+
103
+ ```ruby
104
+ config.wrappers do |b|
105
+ b.use :placeholder
106
+ b.use :label_input
107
+ b.use :my_wrapper, :tag => :div, :class => 'separator' do |component|
108
+ component.use :hint, :tag => :span, :class => :hint
109
+ component.use :error, :tag => :span, :class => :error
110
+ end
111
+ end
112
+ ```
113
+
114
+ and now you can pass options to your `input` calls to customize the `:my_wrapper` _Form component_.
115
+
116
+ ```ruby
117
+ # Completely turns off the custom wrapper
118
+ f.input :name, :my_wrapper => false
119
+
120
+ # Configure the html
121
+ f.input :name, :my_wrapper_html => { :id => 'special_id' }
122
+
123
+ # Configure the tag
124
+ f.input :name, :my_wrapper_tag => :p
125
+ ```
126
+
127
+ You can also define more than one wrapper and pick one to render in a specific form or input.
128
+ To define another wrapper you have to give it a name, as the follow:
129
+
130
+ ```ruby
131
+ config.wrappers :small do |b|
132
+ b.use :placeholder
133
+ b.use :label_input
134
+ end
135
+ ```
136
+
137
+ and use it in this way:
138
+
139
+ ```ruby
140
+ # Specifying to whole form
141
+ simple_form_for @user, :wrapper => :small do |f|
142
+ f.input :name
143
+ end
144
+
145
+ # Specifying to one input
146
+ simple_form_for @user do |f|
147
+ f.input :name, :wrapper => :small
148
+ end
149
+ ```
150
+
151
+ **SimpleForm** also allows you to use optional elements. For instance, let's suppose you want to use
152
+ hints or placeholders, but you don't want them to be generated automatically. You can set their
153
+ default values to `false` or use the `optional` method. Is preferible to use the `optional` syntax:
154
+
155
+ ```ruby
156
+ config.wrappers :placeholder => false do |b|
157
+ b.use :placeholder
158
+ b.use :label_input
159
+ b.use :tag => :div, :class => 'separator' do |component|
160
+ component.optional :hint, :tag => :span, :class => :hint
161
+ component.use :error, :tag => :span, :class => :error
162
+ end
163
+ end
164
+ ```
165
+
166
+ By setting it as `optional`, a hint will only be generated when `:hint => true` is explicitly used.
167
+ The same for placehold.
168
+
169
+ ## Usage
170
+
171
+ **SimpleForm** was designed to be customized as you need to. Basically it's a stack of components that
172
+ are invoked to create a complete html input for you, which by default contains label, hints, errors
173
+ and the input itself. It does not aim to create a lot of different logic from the default Rails
174
+ form helpers, as they do a great work by themselves. Instead, **SimpleForm** acts as a DSL and just
175
+ maps your input type (retrieved from the column definition in the database) to an specific helper method.
176
+
177
+ To start using **SimpleForm** you just have to use the helper it provides:
178
+
179
+ ```erb
180
+ <%= simple_form_for @user do |f| %>
181
+ <%= f.input :username %>
182
+ <%= f.input :password %>
183
+ <%= f.button :submit %>
184
+ <% end %>
185
+ ```
186
+
187
+ This will generate an entire form with labels for user name and password as well, and render errors
188
+ by default when you render the form with invalid data (after submitting for example).
189
+
190
+ You can overwrite the default label by passing it to the input method. You can also add a hint or
191
+ even a placeholder:
192
+
193
+ ```erb
194
+ <%= simple_form_for @user do |f| %>
195
+ <%= f.input :username, :label => 'Your username please' %>
196
+ <%= f.input :password, :hint => 'No special characters.' %>
197
+ <%= f.input :email, :placeholder => 'user@domain.com' %>
198
+ <%= f.button :submit %>
199
+ <% end %>
200
+ ```
201
+
202
+ In some cases you may want to disable labels, hints or error. Or you may want to configure the html
203
+ of any of them:
204
+
205
+ ```erb
206
+ <%= simple_form_for @user do |f| %>
207
+ <%= f.input :username, :label_html => { :class => 'my_class' } %>
208
+ <%= f.input :password, :hint => false, :error_html => { :id => 'password_error'} %>
209
+ <%= f.input :password_confirmation, :label => false %>
210
+ <%= f.button :submit %>
211
+ <% end %>
212
+ ```
213
+
214
+ It is also possible to pass any html attribute straight to the input, by using the `:input_html`
215
+ option, for instance:
216
+
217
+ ```erb
218
+ <%= simple_form_for @user do |f| %>
219
+ <%= f.input :username, :input_html => { :class => 'special' } %>
220
+ <%= f.input :password, :input_html => { :maxlength => 20 } %>
221
+ <%= f.input :remember_me, :input_html => { :value => '1' } %>
222
+ <%= f.button :submit %>
223
+ <% end %>
224
+ ```
225
+
226
+ If you want to pass the same options to all inputs in the form (for example, a default class),
227
+ you can use the `:defaults` option in `simple_form_for`. Specific options in `input` call will
228
+ overwrite the defaults:
229
+
230
+ ```erb
231
+ <%= simple_form_for @user, :defaults => { :input_html => { :class => 'default_class' } } do |f| %>
232
+ <%= f.input :username, :input_html => { :class => 'special' } %>
233
+ <%= f.input :password, :input_html => { :maxlength => 20 } %>
234
+ <%= f.input :remember_me, :input_html => { :value => '1' } %>
235
+ <%= f.button :submit %>
236
+ <% end %>
237
+ ```
238
+
239
+ Since **SimpleForm** generates a wrapper div around your label and input by default, you can pass
240
+ any html attribute to that wrapper as well using the `:wrapper_html` option, like so:
241
+
242
+ ```erb
243
+ <%= simple_form_for @user do |f| %>
244
+ <%= f.input :username, :wrapper_html => { :class => 'username' } %>
245
+ <%= f.input :password, :wrapper_html => { :id => 'password' } %>
246
+ <%= f.input :remember_me, :wrapper_html => { :class => 'options' } %>
247
+ <%= f.button :submit %>
248
+ <% end %>
249
+ ```
250
+
251
+ By default all inputs are required, which means an * is prepended to the label, but you can disable
252
+ it in any input you want:
253
+
254
+ ```erb
255
+ <%= simple_form_for @user do |f| %>
256
+ <%= f.input :name, :required => false %>
257
+ <%= f.input :username %>
258
+ <%= f.input :password %>
259
+ <%= f.button :submit %>
260
+ <% end %>
261
+ ```
262
+
263
+ **SimpleForm** also lets you overwrite the default input type it creates:
264
+
265
+ ```erb
266
+ <%= simple_form_for @user do |f| %>
267
+ <%= f.input :username %>
268
+ <%= f.input :password %>
269
+ <%= f.input :description, :as => :text %>
270
+ <%= f.input :accepts, :as => :radio_buttons %>
271
+ <%= f.button :submit %>
272
+ <% end %>
273
+ ```
274
+
275
+ So instead of a checkbox for the *accepts* attribute, you'll have a pair of radio buttons with yes/no
276
+ labels and a text area instead of a text field for the description. You can also render boolean
277
+ attributes using `:as => :select` to show a dropdown.
278
+
279
+ It is also possible to give the `:disabled` option to **SimpleForm**, and it'll automatically mark
280
+ the wrapper as disabled with a css class, so you can style labels, hints and other components inside
281
+ the wrapper as well:
282
+
283
+ ```erb
284
+ <%= simple_form_for @user do |f| %>
285
+ <%= f.input :username, :disabled => true, :hint => 'You cannot change your username.' %>
286
+ <%= f.button :submit %>
287
+ <% end %>
288
+ ```
289
+
290
+ **SimpleForm** accepts same options as their corresponding input type helper in Rails:
291
+
292
+ ```erb
293
+ <%= simple_form_for @user do |f| %>
294
+ <%= f.input :date_of_birth, :as => :date, :start_year => Date.today.year - 90,
295
+ :end_year => Date.today.year - 12, :discard_day => true,
296
+ :order => [:month, :year] %>
297
+ <%= f.button :submit %>
298
+ <% end %>
299
+ ```
300
+
301
+ **SimpleForm** also allows you to use label, hint, input_field, error and full_error helpers
302
+ (please take a look at the rdocs for each method for more info):
303
+
304
+ ```erb
305
+ <%= simple_form_for @user do |f| %>
306
+ <%= f.label :username %>
307
+ <%= f.input_field :username %>
308
+ <%= f.hint 'No special characters, please!' %>
309
+ <%= f.error :username, :id => 'user_name_error' %>
310
+ <%= f.full_error :token %>
311
+ <%= f.submit 'Save' %>
312
+ <% end %>
313
+ ```
314
+
315
+ Any extra option passed to these methods will be rendered as html option.
316
+
317
+ ### Collections
318
+
319
+ And what if you want to create a select containing the age from 18 to 60 in your form? You can do it
320
+ overriding the `:collection` option:
321
+
322
+ ```erb
323
+ <%= simple_form_for @user do |f| %>
324
+ <%= f.input :user %>
325
+ <%= f.input :age, :collection => 18..60 %>
326
+ <%= f.button :submit %>
327
+ <% end %>
328
+ ```
329
+
330
+ Collections can be arrays or ranges, and when a `:collection` is given the `:select` input will be
331
+ rendered by default, so we don't need to pass the `:as => :select` option. Other types of collection
332
+ are `:radio_buttons` and `:check_boxes`. Those are added by **SimpleForm** to Rails set of form
333
+ helpers (read Extra Helpers session below for more information).
334
+
335
+ Collection inputs accept two other options beside collections:
336
+
337
+ * _label_method_ => the label method to be applied to the collection to retrieve the label (use this
338
+ instead of the `text_method` option in `collection_select`)
339
+
340
+ * _value_method_ => the value method to be applied to the collection to retrieve the value
341
+
342
+ Those methods are useful to manipulate the given collection. Both of these options also accept
343
+ lambda/procs in case you want to calculate the value or label in a special way eg. custom
344
+ translation. All other options given are sent straight to the underlying helper. For example, you
345
+ can give prompt as:
346
+
347
+ ```ruby
348
+ f.input :age, :collection => 18..60, :prompt => "Select your age"
349
+ ```
350
+
351
+ It is also possible to create grouped collection selects, that will use the html *optgroup* tags, like this:
352
+
353
+ ```ruby
354
+ f.input :country_id, :collection => @continents, :as => :grouped_select, :group_method => :countries
355
+ ```
356
+
357
+ Grouped collection inputs accept the same `:label_method` and `:value_method` options, which will be
358
+ used to retrieve label/value attributes for the `option` tags. Besides that, you can give:
359
+
360
+ * _group_method_ => the method to be called on the given collection to generate the options for
361
+ each group (required)
362
+
363
+ * _group_label_method_ => the label method to be applied on the given collection to retrieve the label
364
+ for the _optgroup_ (**SimpleForm** will attempt to guess the best one the same way it does with
365
+ `:label_method`)
366
+
367
+ ### Priority
368
+
369
+ **SimpleForm** also supports `:time_zone` and `:country`. When using such helpers, you can give
370
+ `:priority` as option to select which time zones and/or countries should be given higher priority:
371
+
372
+ ```ruby
373
+ f.input :residence_country, :priority => [ "Brazil" ]
374
+ f.input :time_zone, :priority => /US/
375
+ ```
376
+
377
+ Those values can also be configured with a default value to be used site use through the
378
+ `SimpleForm.country_priority` and `SimpleForm.time_zone_priority` helpers.
379
+
380
+ Note: While using `country_select` if you want to restrict to only a subset of countries for a specific
381
+ drop down then you may use the `:collection` option:
382
+
383
+ ```ruby
384
+ f.input :shipping_country, :priority => [ "Brazil" ], :collection => [ "Australia", "Brazil", "New Zealand"]
385
+ ```
386
+
387
+ ### Wrapper
388
+
389
+ **SimpleForm** allows you to add a wrapper which contains the label, error, hint and input.
390
+ The first step is to configure a wrapper tag:
391
+
392
+ ```ruby
393
+ SimpleForm.wrapper_tag = :p
394
+ ```
395
+
396
+ And now, you no longer need to wrap your `f.input` calls anymore:
397
+
398
+ ```erb
399
+ <%= simple_form_for @user do |f| %>
400
+ <%= f.input :username %>
401
+ <%= f.input :password %>
402
+ <%= f.button :submit %>
403
+ <% end %>
404
+ ```
405
+
406
+ ## Associations
407
+
408
+ To deal with associations, **SimpleForm** can generate select inputs, a series of radios buttons or check boxes.
409
+ Lets see how it works: imagine you have a user model that belongs to a company and has_and_belongs_to_many
410
+ roles. The structure would be something like:
411
+
412
+ ```ruby
413
+ class User < ActiveRecord::Base
414
+ belongs_to :company
415
+ has_and_belongs_to_many :roles
416
+ end
417
+
418
+ class Company < ActiveRecord::Base
419
+ has_many :users
420
+ end
421
+
422
+ class Role < ActiveRecord::Base
423
+ has_and_belongs_to_many :users
424
+ end
425
+ ```
426
+
427
+ Now we have the user form:
428
+
429
+ ```erb
430
+ <%= simple_form_for @user do |f| %>
431
+ <%= f.input :name %>
432
+ <%= f.association :company %>
433
+ <%= f.association :roles %>
434
+ <%= f.button :submit %>
435
+ <% end %>
436
+ ```
437
+
438
+ Simple enough, right? This is going to render a `:select` input for choosing the `:company`, and another
439
+ `:select` input with `:multiple` option for the `:roles`. You can, of course, change it to use radio
440
+ buttons and check boxes as well:
441
+
442
+ ```ruby
443
+ f.association :company, :as => :radio_buttons
444
+ f.association :roles, :as => :check_boxes
445
+ ```
446
+
447
+ The association helper just invokes `input` under the hood, so all options available to `:select`,
448
+ `:radio_buttons` and `:check_boxes` are also available to association. Additionally, you can specify
449
+ the collection by hand, all together with the prompt:
450
+
451
+ ```ruby
452
+ f.association :company, :collection => Company.active.all(:order => 'name'), :prompt => "Choose a Company"
453
+ ```
454
+
455
+ ## Buttons
456
+
457
+ All web forms need buttons, right? **SimpleForm** wraps them in the DSL, acting like a proxy:
458
+
459
+ ```erb
460
+ <%= simple_form_for @user do |f| %>
461
+ <%= f.input :name %>
462
+ <%= f.button :submit %>
463
+ <% end %>
464
+ ```
465
+
466
+ The above will simply call submit. You choose to use it or not, it's just a question of taste.
467
+
468
+ ## Wrapping Rails Form Helpers
469
+
470
+ Say you wanted to use a rails form helper but still wrap it in **SimpleForm** goodness? You can, by
471
+ calling input with a block like so:
472
+
473
+ ```erb
474
+ <%= f.input :role do %>
475
+ <%= f.select :role, Role.all.map { |r| [r.name, r.id, { :class => r.company.id }] }, :include_blank => true %>
476
+ <% end %>
477
+ ```
478
+
479
+ In the above example, we're taking advantage of Rails 3's select method that allows us to pass in a
480
+ hash of additional attributes for each option.
481
+
482
+ ## Extra helpers
483
+
484
+ **SimpleForm** also comes with some extra helpers you can use inside rails default forms without relying
485
+ on `simple_form_for` helper. They are listed below.
486
+
487
+ ### Simple Fields For
488
+
489
+ Wrapper to use simple form inside a default rails form
490
+
491
+ ```ruby
492
+ form_for @user do |f|
493
+ f.simple_fields_for :posts do |posts_form|
494
+ # Here you have all simple_form methods available
495
+ posts_form.input :title
496
+ end
497
+ end
498
+ ```
499
+
500
+ ### Collection Radio Buttons
501
+
502
+ Creates a collection of radio inputs with labels associated (same API as `collection_select`):
503
+
504
+ ```ruby
505
+ form_for @user do |f|
506
+ f.collection_radio_buttons :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
507
+ end
508
+ ```
509
+
510
+ ```html
511
+ <input id="user_options_true" name="user[options]" type="radio" value="true" />
512
+ <label class="collection_radio_buttons" for="user_options_true">Yes</label>
513
+ <input id="user_options_false" name="user[options]" type="radio" value="false" />
514
+ <label class="collection_radio_buttons" for="user_options_false">No</label>
515
+ ```
516
+
517
+ ### Collection Check Boxes
518
+
519
+ Creates a collection of check boxes with labels associated (same API as `collection_select`):
520
+
521
+ ```ruby
522
+ form_for @user do |f|
523
+ f.collection_check_boxes :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
524
+ end
525
+ ```
526
+
527
+ ```html
528
+ <input name="user[options][]" type="hidden" value="" />
529
+ <input id="user_options_true" name="user[options][]" type="checkbox" value="true" />
530
+ <label class="collection_check_box" for="user_options_true">Yes</label>
531
+ <input name="user[options][]" type="hidden" value="" />
532
+ <input id="user_options_false" name="user[options][]" type="checkbox" value="false" />
533
+ <label class="collection_check_box" for="user_options_false">No</label>
534
+ ```
535
+
536
+ To use this with associations in your model, you can do the following:
537
+
538
+ ```ruby
539
+ form_for @user do |f|
540
+ f.collection_check_boxes :role_ids, Role.all, :id, :name # using :roles here is not going to work.
541
+ end
542
+ ```
543
+
544
+ ## Mappings/Inputs available
545
+
546
+ **SimpleForm** comes with a lot of default mappings:
547
+
548
+ ```
549
+ Mapping Input Column Type
550
+
551
+ boolean check box boolean
552
+ string text field string
553
+ email email field string with name matching "email"
554
+ url url field string with name matching "url"
555
+ tel tel field string with name matching "phone"
556
+ password password field string with name matching "password"
557
+ search search -
558
+ text text area text
559
+ file file field string, responding to file methods
560
+ hidden hidden field -
561
+ integer number field integer
562
+ float number field float
563
+ decimal number field decimal
564
+ range range field -
565
+ datetime datetime select datetime/timestamp
566
+ date date select date
567
+ time time select time
568
+ select collection select belongs_to/has_many/has_and_belongs_to_many associations
569
+ radio_buttons collection radio buttons belongs_to
570
+ check_boxes collection check boxes has_many/has_and_belongs_to_many associations
571
+ country country select string with name matching "country"
572
+ time_zone time zone select string with name matching "time_zone"
573
+ ```
574
+
575
+ ## Custom inputs
576
+
577
+ It is very easy to add custom inputs to **SimpleForm**. For instance, if you want to add a custom input
578
+ that extends the string one, you just need to add this file:
579
+
580
+ ```ruby
581
+ # app/inputs/currency_input.rb
582
+ class CurrencyInput < SimpleForm::Inputs::Base
583
+ def input
584
+ "$ #{@builder.text_field(attribute_name, input_html_options)}".html_safe
585
+ end
586
+ end
587
+ ```
588
+
589
+ And use it in your views:
590
+
591
+ ```ruby
592
+ f.input :money, :as => :currency
593
+ ```
594
+
595
+ You can also redefine existing **SimpleForm** inputs by creating a new class with the same name. For
596
+ instance, if you want to wrap date/time/datetime in a div, you can do:
597
+
598
+ ```ruby
599
+ # app/inputs/date_time_input.rb
600
+ class DateTimeInput < SimpleForm::Inputs::DateTimeInput
601
+ def input
602
+ "<div>#{super}</div>".html_safe
603
+ end
604
+ end
605
+ ```
606
+
607
+ ## Custom form builder
608
+
609
+ You can create a custom form builder that uses **SimpleForm**.
610
+
611
+ Create a helper method that calls `simple_form_for` with a custom builder:
612
+
613
+ ```ruby
614
+ def custom_form_for(object, *args, &block)
615
+ options = args.extract_options!
616
+ simple_form_for(object, *(args << options.merge(:builder => CustomFormBuilder)), &block)
617
+ end
618
+ ```
619
+
620
+ Create a form builder class that inherits from `SimpleForm::FormBuilder`.
621
+
622
+ ```ruby
623
+ class CustomFormBuilder < SimpleForm::FormBuilder
624
+ def input(attribute_name, options = {}, &block)
625
+ options[:input_html].merge! :class => 'custom'
626
+ super
627
+ end
628
+ end
629
+ ```
630
+
631
+ ## I18n
632
+
633
+ **SimpleForm** uses all power of I18n API to lookup labels, hints and placeholders. To customize your
634
+ forms you can create a locale file like this:
635
+
636
+ ```yaml
637
+ en:
638
+ simple_form:
639
+ labels:
640
+ user:
641
+ username: 'User name'
642
+ password: 'Password'
643
+ hints:
644
+ user:
645
+ username: 'User name to sign in.'
646
+ password: 'No special characters, please.'
647
+ placeholders:
648
+ user:
649
+ username: 'Your username'
650
+ password: '****'
651
+ ```
652
+
653
+ And your forms will use this information to render the components for you.
654
+
655
+ **SimpleForm** also lets you be more specific, separating lookups through actions for labels, hints and
656
+ placeholders. Let's say you want a different label for new and edit actions, the locale file would
657
+ be something like:
658
+
659
+ ```yaml
660
+ en:
661
+ simple_form:
662
+ labels:
663
+ user:
664
+ username: 'User name'
665
+ password: 'Password'
666
+ edit:
667
+ username: 'Change user name'
668
+ password: 'Change password'
669
+ ```
670
+
671
+ This way **SimpleForm** will figure out the right translation for you, based on the action being
672
+ rendered. And to be a little bit DRYer with your locale file, you can specify defaults for all
673
+ models under the 'defaults' key:
674
+
675
+ ```yaml
676
+ en:
677
+ simple_form:
678
+ labels:
679
+ defaults:
680
+ username: 'User name'
681
+ password: 'Password'
682
+ new:
683
+ username: 'Choose a user name'
684
+ hints:
685
+ defaults:
686
+ username: 'User name to sign in.'
687
+ password: 'No special characters, please.'
688
+ placeholders:
689
+ defaults:
690
+ username: 'Your username'
691
+ password: '****'
692
+ ```
693
+
694
+ **SimpleForm** will always look for a default attribute translation under the "defaults" key if no
695
+ specific is found inside the model key.Note that this syntax is different from 1.x. To migrate to
696
+ the new syntax, just move "labels.#{attribute}" to "labels.defaults.#{attribute}".
697
+
698
+ In addition, **SimpleForm** will fallback to default human_attribute_name from Rails when no other
699
+ translation is found for labels. Finally, you can also overwrite any label, hint or placeholder
700
+ inside your view, just by passing the option manually. This way the I18n lookup will be skipped.
701
+
702
+ **SimpleForm** also has support for translating options in collection helpers. For instance, given a
703
+ User with a `:gender` attribute, you might want to create a select box showing translated labels
704
+ that would post either `male` or `female` as value. With **SimpleForm** you could create an input
705
+ like this:
706
+
707
+ ```ruby
708
+ f.input :gender, :collection => [:male, :female]
709
+ ```
710
+
711
+ And **SimpleForm** will try a lookup like this in your locale file, to find the right labels to show:
712
+
713
+ ```yaml
714
+ en:
715
+ simple_form:
716
+ options:
717
+ user:
718
+ gender:
719
+ male: 'Male'
720
+ female: "Female'
721
+ ```
722
+
723
+ You can also use the `defaults` key as you would do with labels, hints and placeholders. It is
724
+ important to notice that **SimpleForm** will only do the lookup for options if you give a collection
725
+ composed of symbols only. This is to avoid constant lookups to I18n.
726
+
727
+ It's also possible to translate buttons, using Rails' built-in I18n support:
728
+
729
+ ```yaml
730
+ en:
731
+ helpers:
732
+ submit:
733
+ user:
734
+ create: "Add %{model}"
735
+ update: "Save Changes"
736
+ ```
737
+
738
+ There are other options that can be configured through I18n API, such as required text and boolean.
739
+ Be sure to check our locale file or the one copied to your application after you run
740
+ `rails generate simple_form:install`.
741
+
742
+ ## HTML 5 Notice
743
+
744
+ By default, **SimpleForm** will generate input field types and attributes that are supported in HTML5,
745
+ but are considered invalid HTML for older document types such as HTML4 or XHTML1.0. The HTML5
746
+ extensions include the new field types such as email, number, search, url, tel, and the new
747
+ attributes such as required, autofocus, maxlength, min, max, step.
748
+
749
+ Most browsers will not care, but some of the newer ones - in particular Chrome 10+ - use the
750
+ required attribute to force a value into an input and will prevent form submission without it.
751
+ Depending on the design of the application this may or may not be desired. In many cases it can
752
+ break existing UI's.
753
+
754
+ It is possible to disable all HTML 5 extensions in **SimpleForm** with the following configuration:
755
+
756
+ ```ruby
757
+ SimpleForm.html5 = false # default is true
758
+ ```
759
+
760
+ If you want to have all other HTML 5 features, such as the new field types, you can disable only
761
+ the browser validation:
762
+
763
+ ```ruby
764
+ SimpleForm.browser_validations = false # default is true
765
+ ```
766
+
767
+ This option adds a new `novalidate` property to the form, instructing it to skip all HTML 5
768
+ validation. The inputs will still be generated with the required and other attributes, that might
769
+ help you to use some generic javascript validation.
770
+
771
+ You can also add `novalidate` to a specific form by setting the option on the form itself:
772
+
773
+ ```erb
774
+ <%= simple_form_for(resource, :html => {:novalidate => true}) do |form| %>
775
+ ```
776
+
777
+ Please notice that any of the configurations above will disable the `placeholder` component,
778
+ which is an HTML 5 feature. We believe most of the newest browsers are handling this attribute fine,
779
+ and if they aren't, any plugin you use would take of using the placeholder attribute to do it.
780
+ However, you can disable it if you want, by removing the placeholder component from the components
781
+ list in **SimpleForm** configuration file.
782
+
783
+ ## Information
784
+
785
+ ### Google Group
786
+
787
+ If you have any questions, comments, or concerns please use the Google Group instead of the GitHub
788
+ Issues tracker:
789
+
790
+ http://groups.google.com/group/plataformatec-simpleform
791
+
792
+ ### RDocs
793
+
794
+ You can view the **SimpleForm** documentation in RDoc format here:
795
+
796
+ http://rubydoc.info/github/plataformatec/simple_form/master/frames
797
+
798
+ If you need to use **SimpleForm** with Rails 2.3, you can always run `gem server` from the command line
799
+ after you install the gem to access the old documentation.
800
+
801
+ ### Bug reports
802
+
803
+ If you discover any bugs, feel free to create an issue on GitHub. Please add as much information as
804
+ possible to help us fixing the possible bug. We also encourage you to help even more by forking and
805
+ sending us a pull request.
806
+
807
+ https://github.com/plataformatec/simple_form/issues
808
+
809
+ ## Maintainers
810
+
811
+ * José Valim (https://github.com/josevalim)
812
+ * Carlos Antonio da Silva (https://github.com/carlosantoniodasilva)
813
+ * Rafael Mendonça França (https://github.com/rafaelfranca)
814
+
815
+ ## License
816
+
817
+ MIT License. Copyright 2012 Plataforma Tecnologia. http://blog.plataformatec.com.br