Merge pull request #1552 from plataformatec/plataformatec/error-class-to-input
Allow custom errors classes to inputs
This commit is contained in:
commit
6243a634f9
|
@ -1,6 +1,7 @@
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
* Remove support from Rails 4.0, 4.1 and 4.2 [@feliperenan](https://github.com/feliperenan)
|
* Allow custom errors classes to inputs . [@feliperenan](https://github.com/feliperenan)
|
||||||
|
* Remove support from Rails 4.0, 4.1 and 4.2. [@feliperenan](https://github.com/feliperenan)
|
||||||
|
|
||||||
### Bug fix
|
### Bug fix
|
||||||
* Fix horizontal form label position, from right to text-right. [@cavpollo](https://github.com/cavpollo)
|
* Fix horizontal form label position, from right to text-right. [@cavpollo](https://github.com/cavpollo)
|
||||||
|
|
|
@ -901,11 +901,12 @@ You can customize _Form components_ passing options to them:
|
||||||
|
|
||||||
```ruby
|
```ruby
|
||||||
config.wrappers do |b|
|
config.wrappers do |b|
|
||||||
b.use :label_input, class: 'label-input-class'
|
b.use :label_input, class: 'label-input-class', error_class: 'is-invalid'
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
This you set the input and label class to `'label-input-class'`.
|
This you set the input and label class to `'label-input-class'` and will set the class `'is-invalid'`
|
||||||
|
when the input has errors.
|
||||||
|
|
||||||
If you want to customize the custom _Form components_ on demand you can give it a name like this:
|
If you want to customize the custom _Form components_ on demand you can give it a name like this:
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,7 @@ SimpleForm.setup do |config|
|
||||||
b.optional :readonly
|
b.optional :readonly
|
||||||
|
|
||||||
## Inputs
|
## Inputs
|
||||||
|
# b.use :input, class: 'input', error_class: 'is-invalid'
|
||||||
b.use :label_input
|
b.use :label_input
|
||||||
b.use :hint, wrap_with: { tag: :span, class: :hint }
|
b.use :hint, wrap_with: { tag: :span, class: :hint }
|
||||||
b.use :error, wrap_with: { tag: :span, class: :error }
|
b.use :error, wrap_with: { tag: :span, class: :error }
|
||||||
|
|
|
@ -191,6 +191,8 @@ module SimpleForm
|
||||||
|
|
||||||
def merge_wrapper_options(options, wrapper_options)
|
def merge_wrapper_options(options, wrapper_options)
|
||||||
if wrapper_options
|
if wrapper_options
|
||||||
|
wrapper_options = set_input_classes(wrapper_options)
|
||||||
|
|
||||||
wrapper_options.merge(options) do |key, oldval, newval|
|
wrapper_options.merge(options) do |key, oldval, newval|
|
||||||
case key.to_s
|
case key.to_s
|
||||||
when "class"
|
when "class"
|
||||||
|
@ -206,6 +208,17 @@ module SimpleForm
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def set_input_classes(wrapper_options)
|
||||||
|
wrapper_options = wrapper_options.dup
|
||||||
|
error_class = wrapper_options.delete(:error_class)
|
||||||
|
|
||||||
|
if error_class.present? && has_errors?
|
||||||
|
wrapper_options[:class] = "#{wrapper_options[:class]} #{error_class}"
|
||||||
|
end
|
||||||
|
|
||||||
|
wrapper_options
|
||||||
|
end
|
||||||
|
|
||||||
def i18n_scope
|
def i18n_scope
|
||||||
SimpleForm.i18n_scope
|
SimpleForm.i18n_scope
|
||||||
end
|
end
|
||||||
|
|
|
@ -38,6 +38,18 @@ class WrapperTest < ActionView::TestCase
|
||||||
assert_select 'div.field_with_errors'
|
assert_select 'div.field_with_errors'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test 'wrapper adds error class to input for attribute with errors' do
|
||||||
|
with_form_for @user, :name, wrapper: custom_wrapper_with_input_error_class
|
||||||
|
assert_select 'div.field_with_errors'
|
||||||
|
assert_select 'input.is-invalid'
|
||||||
|
end
|
||||||
|
|
||||||
|
test 'wrapper does not add error class to input when the attribute is valid' do
|
||||||
|
with_form_for @user, :phone_number, wrapper: custom_wrapper_with_input_error_class
|
||||||
|
assert_no_select 'div.field_with_errors'
|
||||||
|
assert_no_select 'input.is-invalid'
|
||||||
|
end
|
||||||
|
|
||||||
test 'wrapper adds hint class for attribute with a hint' do
|
test 'wrapper adds hint class for attribute with a hint' do
|
||||||
with_form_for @user, :name, hint: 'hint'
|
with_form_for @user, :name, hint: 'hint'
|
||||||
assert_select 'div.field_with_hint'
|
assert_select 'div.field_with_hint'
|
||||||
|
|
|
@ -206,6 +206,13 @@ module MiscHelpers
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def custom_wrapper_with_input_error_class
|
||||||
|
SimpleForm.build tag: :div, class: "custom_wrapper", error_class: :field_with_errors do |b|
|
||||||
|
b.use :label
|
||||||
|
b.use :input, class: 'inline-class', error_class: 'is-invalid'
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def custom_form_for(object, *args, &block)
|
def custom_form_for(object, *args, &block)
|
||||||
simple_form_for(object, *args, { builder: CustomFormBuilder }, &block)
|
simple_form_for(object, *args, { builder: CustomFormBuilder }, &block)
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue