This fork adds a custom horizontal form wrapper and merges append/prepend in a 'group' wrapper

Andrea D'Amico
2013-09-10T14:21:04Z

collection_check_boxes_input.rb

| #app/inputs/collection_check_boxes_input.rb
| class CollectionCheckBoxesInput < SimpleForm::Inputs::CollectionCheckBoxesInput
| def item_wrapper_class
| "checkbox-inline"
| end
| end

_form.html.haml

| #radio buttons with a column width override for the 'right_column' wrapper
| = simple_form_for(user, wrapper: :bootstrap3_horizontal, defaults: {right_column_html: {class: "col-lg-3 col-md-3"},
| label_html: {class: "col-lg-2 col-md-2"} }, html: {class: "form-horizontal", role: "form"}) do |f|
| = f.input :email
| = f.association :roles, as: :check_boxes, right_column_html: { class: "col-lg-10 col-md-10" }

collection_radio_buttons_input.rb

| #app/inputs/collection_radio_buttons_input.rb
| class CollectionRadioButtonsInput < SimpleForm::Inputs::CollectionRadioButtonsInput
| def item_wrapper_class
| "radio-inline"
| end
| end

simple_form.rb

| # http://stackoverflow.com/questions/14972253/simpleform-default-input-class
| # https://github.com/plataformatec/simple_form/issues/316
|
| inputs = %w[
| CollectionSelectInput
| DateTimeInput
| FileInput
| GroupedCollectionSelectInput
| NumericInput
| PasswordInput
| RangeInput
| StringInput
| TextInput
| ]
|
| inputs.each do |input_type|
| superclass = "SimpleForm::Inputs::#{input_type}".constantize
|
| new_class = Class.new(superclass) do
| def input_html_classes
| super.push('form-control')
| end
| end
|
| Object.const_set(input_type, new_class)
| end
|
| # Use this setup block to configure all options available in SimpleForm.
| SimpleForm.setup do |config|
| config.boolean_style = :nested
|
| config.wrappers :bootstrap3, tag: 'div', class: 'form-group', error_class: 'has-error',
| defaults: { input_html: { class: 'default_class' } } do |b|
|
| b.use :html5
| b.use :min_max
| b.use :maxlength
| b.use :placeholder
|
| b.optional :pattern
| b.optional :readonly
|
| b.use :label_input
| b.use :hint, wrap_with: { tag: 'span', class: 'help-block' }
| b.use :error, wrap_with: { tag: 'span', class: 'help-block has-error' }
| end
|
| config.wrappers :bootstrap3_horizontal, tag: 'div', class: 'form-group', error_class: 'has-error',
| defaults: { input_html: { class: 'default-class '}, wrapper_html: { class: "col-lg-10 col-md-10"} } do |b|
|
| b.use :html5
| b.use :min_max
| b.use :maxlength
| b.use :placeholder
|
| b.optional :pattern
| b.optional :readonly
|
| b.use :label
| b.wrapper :right_column, tag: :div do |component|
| component.use :input
| end
| b.use :hint, wrap_with: { tag: 'span', class: 'help-block' }
| b.use :error, wrap_with: { tag: 'span', class: 'help-block has-error' }
| end
|
| config.wrappers :group, tag: 'div', class: "form-group", error_class: 'has-error',
| defaults: { input_html: { class: 'default-class '} } do |b|
|
| b.use :html5
| b.use :min_max
| b.use :maxlength
| b.use :placeholder
|
| b.optional :pattern
| b.optional :readonly
|
| b.use :label
| b.use :input, wrap_with: { class: "input-group" }
| b.use :hint, wrap_with: { tag: 'span', class: 'help-block' }
| b.use :error, wrap_with: { tag: 'span', class: 'help-block has-error' }
| end
|
| config.default_wrapper = :bootstrap3
| end