Skip to content
Merged
38 changes: 31 additions & 7 deletions lib/bootstrap_form/form_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ def check_box_with_bootstrap(name, options = {}, checked_value = "1", unchecked_

if options[:custom]
div_class = ["custom-control", "custom-checkbox"]
div_class.append("custom-control-inline") if options[:inline]
div_class.append("custom-control-inline") if layout_inline?(options[:inline])
label_class = label_classes.prepend("custom-control-label").compact.join(" ")
content_tag(:div, class: div_class.compact.join(" ")) do
if options[:skip_label]
Expand All @@ -146,7 +146,7 @@ def check_box_with_bootstrap(name, options = {}, checked_value = "1", unchecked_
end
else
wrapper_class = "form-check"
wrapper_class += " form-check-inline" if options[:inline]
wrapper_class += " form-check-inline" if layout_inline?(options[:inline])
label_class = label_classes.prepend("form-check-label").compact.join(" ")
content_tag(:div, class: wrapper_class) do
if options[:skip_label]
Expand Down Expand Up @@ -182,7 +182,7 @@ def radio_button_with_bootstrap(name, value, *args)

if options[:custom]
div_class = ["custom-control", "custom-radio"]
div_class.append("custom-control-inline") if options[:inline]
div_class.append("custom-control-inline") if layout_inline?(options[:inline])
label_class = label_classes.prepend("custom-control-label").compact.join(" ")
content_tag(:div, class: div_class.compact.join(" ")) do
if options[:skip_label]
Expand All @@ -194,7 +194,7 @@ def radio_button_with_bootstrap(name, value, *args)
end
else
wrapper_class = "form-check"
wrapper_class += " form-check-inline" if options[:inline]
wrapper_class += " form-check-inline" if layout_inline?(options[:inline])
label_class = label_classes.prepend("form-check-label").compact.join(" ")
content_tag(:div, class: "#{wrapper_class}#{disabled_class}") do
if options[:skip_label]
Expand Down Expand Up @@ -233,6 +233,7 @@ def form_group(*args, &block)

options[:class] = ["form-group", options[:class]].compact.join(' ')
options[:class] << " row" if get_group_layout(options[:layout]) == :horizontal
options[:class] << " form-inline" if field_inline_override?(options[:layout])
options[:class] << " #{feedback_class}" if options[:icon]

content_tag(:div, options.except(:id, :label, :help, :icon, :label_col, :control_col, :layout)) do
Expand Down Expand Up @@ -274,8 +275,28 @@ def fields_for_with_bootstrap(record_name, record_object = nil, fields_options =

private

def horizontal?
layout == :horizontal
def layout_default?(field_layout = nil)
[:default, nil].include? layout_in_effect(field_layout)
end

def layout_horizontal?(field_layout = nil)
layout_in_effect(field_layout) == :horizontal
end

def layout_inline?(field_layout = nil)
layout_in_effect(field_layout) == :inline
end

def field_inline_override?(field_layout = nil)
field_layout == :inline && layout != :inline
end

# true and false should only come from check_box and radio_button,
# and those don't have a :horizontal layout
def layout_in_effect(field_layout)
field_layout = :inline if field_layout == true
field_layout = :default if field_layout == false
field_layout || layout
end

def get_group_layout(group_layout)
Expand Down Expand Up @@ -411,9 +432,11 @@ def generate_label(id, name, options, custom_label_col, group_layout)
options[:for] = id if acts_like_form_tag
classes = [options[:class]]

if get_group_layout(group_layout) == :horizontal
if layout_horizontal?(group_layout)
classes << "col-form-label"
classes << (custom_label_col || label_col)
elsif layout_inline?(group_layout)
classes << "mr-sm-2"
end

unless options.delete(:skip_required)
Expand Down Expand Up @@ -452,6 +475,7 @@ def get_error_messages(name)
end

def inputs_collection(name, collection, value, text, options = {}, &block)
options[:inline] ||= layout_inline?(options[:layout])
form_group_builder(name, options) do
inputs = ""

Expand Down
2 changes: 1 addition & 1 deletion test/bootstrap_fields_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ class BootstrapFieldsTest < ActionView::TestCase
<form accept-charset="UTF-8" action="/users" class="form-inline" id="new_user" method="post" role="form">
<input name="utf8" type="hidden" value="&#x2713;" />
<div class="form-group">
<label for="user_address_attributes_street">Street</label>
<label class="mr-sm-2" for="user_address_attributes_street">Street</label>
<input class="form-control" id="user_address_attributes_street" name="user[address_attributes][street]" type="text" value="123 Main Street" />
</div>
</form>
Expand Down
4 changes: 2 additions & 2 deletions test/bootstrap_form_group_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -458,8 +458,8 @@ class BootstrapFormGroupTest < ActionView::TestCase
expected = <<-HTML.strip_heredoc
<form accept-charset="UTF-8" action="/users" class="new_user" id="new_user" method="post" role="form">
<input name="utf8" type="hidden" value="&#x2713;" />
<div class="form-group">
<label class="required" for="user_email">Email</label>
<div class="form-group form-inline">
<label class="mr-sm-2 required" for="user_email">Email</label>
<input class="form-control" id="user_email" name="user[email]" type="email" value="steve@example.com" />
</div>
</form>
Expand Down
Loading