bootstrap_form 4.1.0 → 4.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +18 -0
- data/.rubocop.yml +3 -2
- data/.travis.yml +7 -1
- data/CHANGELOG.md +15 -1
- data/CONTRIBUTING.md +11 -0
- data/Dangerfile +4 -4
- data/Gemfile +7 -2
- data/OLD-README.md +795 -0
- data/README.md +150 -93
- data/Rakefile +2 -4
- data/bootstrap_form.gemspec +2 -1
- data/demo/.postcssrc.yml +3 -0
- data/demo/app/assets/config/manifest.js +2 -0
- data/demo/app/assets/stylesheets/actiontext.scss +38 -0
- data/demo/app/assets/stylesheets/application.scss +1 -0
- data/demo/app/helpers/bootstrap_helper.rb +16 -10
- data/demo/app/javascript/channels/consumer.js +6 -0
- data/demo/app/javascript/channels/index.js +5 -0
- data/demo/app/javascript/packs/application.js +11 -0
- data/demo/app/models/user.rb +2 -0
- data/demo/app/views/active_storage/blobs/_blob.html.erb +14 -0
- data/demo/app/views/bootstrap/form.html.erb +2 -1
- data/demo/app/views/layouts/application.html.erb +3 -0
- data/demo/bin/webpack +15 -0
- data/demo/bin/webpack-dev-server +15 -0
- data/demo/config/application.rb +2 -3
- data/demo/config/environments/development.rb +3 -1
- data/demo/config/environments/production.rb +48 -0
- data/demo/config/webpack/development.js +5 -0
- data/demo/config/webpack/environment.js +3 -0
- data/demo/config/webpack/production.js +5 -0
- data/demo/config/webpack/test.js +5 -0
- data/demo/config/webpacker.yml +92 -0
- data/demo/db/schema.rb +63 -18
- data/demo/package.json +13 -1
- data/demo/test/fixtures/action_text/rich_texts.yml +4 -0
- data/demo/yarn.lock +6257 -0
- data/lib/bootstrap_form.rb +34 -8
- data/lib/bootstrap_form/action_view_extensions/form_helper.rb +71 -0
- data/lib/bootstrap_form/components.rb +17 -0
- data/lib/bootstrap_form/components/hints.rb +60 -0
- data/lib/bootstrap_form/components/labels.rb +56 -0
- data/lib/bootstrap_form/components/layout.rb +39 -0
- data/lib/bootstrap_form/components/validation.rb +61 -0
- data/lib/bootstrap_form/engine.rb +10 -0
- data/lib/bootstrap_form/form_builder.rb +54 -524
- data/lib/bootstrap_form/form_group.rb +64 -0
- data/lib/bootstrap_form/form_group_builder.rb +103 -0
- data/lib/bootstrap_form/helpers.rb +9 -0
- data/lib/bootstrap_form/helpers/bootstrap.rb +39 -31
- data/lib/bootstrap_form/inputs.rb +40 -0
- data/lib/bootstrap_form/inputs/base.rb +40 -0
- data/lib/bootstrap_form/inputs/check_box.rb +89 -0
- data/lib/bootstrap_form/inputs/collection_check_boxes.rb +23 -0
- data/lib/bootstrap_form/inputs/collection_radio_buttons.rb +21 -0
- data/lib/bootstrap_form/inputs/collection_select.rb +25 -0
- data/lib/bootstrap_form/inputs/color_field.rb +14 -0
- data/lib/bootstrap_form/inputs/date_field.rb +14 -0
- data/lib/bootstrap_form/inputs/date_select.rb +14 -0
- data/lib/bootstrap_form/inputs/datetime_field.rb +14 -0
- data/lib/bootstrap_form/inputs/datetime_local_field.rb +14 -0
- data/lib/bootstrap_form/inputs/datetime_select.rb +14 -0
- data/lib/bootstrap_form/inputs/email_field.rb +14 -0
- data/lib/bootstrap_form/inputs/file_field.rb +35 -0
- data/lib/bootstrap_form/inputs/grouped_collection_select.rb +29 -0
- data/lib/bootstrap_form/inputs/inputs_collection.rb +44 -0
- data/lib/bootstrap_form/inputs/month_field.rb +14 -0
- data/lib/bootstrap_form/inputs/number_field.rb +14 -0
- data/lib/bootstrap_form/inputs/password_field.rb +14 -0
- data/lib/bootstrap_form/inputs/phone_field.rb +14 -0
- data/lib/bootstrap_form/inputs/radio_button.rb +77 -0
- data/lib/bootstrap_form/inputs/range_field.rb +14 -0
- data/lib/bootstrap_form/inputs/rich_text_area.rb +23 -0
- data/lib/bootstrap_form/inputs/search_field.rb +14 -0
- data/lib/bootstrap_form/inputs/select.rb +22 -0
- data/lib/bootstrap_form/inputs/telephone_field.rb +14 -0
- data/lib/bootstrap_form/inputs/text_area.rb +14 -0
- data/lib/bootstrap_form/inputs/text_field.rb +14 -0
- data/lib/bootstrap_form/inputs/time_field.rb +14 -0
- data/lib/bootstrap_form/inputs/time_select.rb +14 -0
- data/lib/bootstrap_form/inputs/time_zone_select.rb +22 -0
- data/lib/bootstrap_form/inputs/url_field.rb +14 -0
- data/lib/bootstrap_form/inputs/week_field.rb +14 -0
- data/lib/bootstrap_form/version.rb +1 -1
- metadata +79 -6
- data/.rubocop_todo.yml +0 -104
- data/lib/bootstrap_form/aliasing.rb +0 -35
- data/lib/bootstrap_form/helper.rb +0 -52
@@ -0,0 +1,64 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module FormGroup
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
def form_group(*args, &block)
|
8
|
+
options = args.extract_options!
|
9
|
+
name = args.first
|
10
|
+
|
11
|
+
options[:class] = form_group_classes(options)
|
12
|
+
|
13
|
+
content_tag(:div, options.except(:append, :id, :label, :help, :icon,
|
14
|
+
:input_group_class, :label_col, :control_col,
|
15
|
+
:add_control_col_class, :layout, :prepend)) do
|
16
|
+
form_group_content(
|
17
|
+
generate_label(options[:id], name, options[:label], options[:label_col], options[:layout]),
|
18
|
+
generate_help(name, options[:help]), options, &block
|
19
|
+
)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def form_group_content_tag(name, field_name, without_field_name, options, html_options)
|
26
|
+
html_class = control_specific_class(field_name)
|
27
|
+
html_class = "#{html_class} form-inline" if @layout == :horizontal && options[:skip_inline].blank?
|
28
|
+
content_tag(:div, class: html_class) do
|
29
|
+
input_with_error(name) do
|
30
|
+
send(without_field_name, name, options, html_options)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def form_group_content(label, help_text, options, &block)
|
36
|
+
if group_layout_horizontal?(options[:layout])
|
37
|
+
concat(label).concat(content_tag(:div, capture(&block) + help_text, class: form_group_control_class(options)))
|
38
|
+
else
|
39
|
+
concat(label)
|
40
|
+
concat(capture(&block))
|
41
|
+
concat(help_text) if help_text
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def form_group_control_class(options)
|
46
|
+
classes = [options[:control_col] || control_col]
|
47
|
+
classes << options[:add_control_col_class] if options[:add_control_col_class]
|
48
|
+
classes << offset_col(options[:label_col] || @label_col) unless options[:label]
|
49
|
+
classes.flatten.compact
|
50
|
+
end
|
51
|
+
|
52
|
+
def form_group_classes(options)
|
53
|
+
classes = ["form-group", options[:class].try(:split)].flatten.compact
|
54
|
+
classes << "row" if group_layout_horizontal?(options[:layout]) && classes.exclude?("form-row")
|
55
|
+
classes << "form-inline" if field_inline_override?(options[:layout])
|
56
|
+
classes << feedback_class if options[:icon]
|
57
|
+
classes
|
58
|
+
end
|
59
|
+
|
60
|
+
def group_layout_horizontal?(layout)
|
61
|
+
get_group_layout(layout) == :horizontal
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module FormGroupBuilder
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
def form_group_builder(method, options, html_options=nil)
|
10
|
+
no_wrapper = options[:wrapper] == false
|
11
|
+
|
12
|
+
options = form_group_builder_options(options, method)
|
13
|
+
|
14
|
+
form_group_options = form_group_opts(options, form_group_css_options(method, html_options.try(:symbolize_keys!), options))
|
15
|
+
|
16
|
+
options.except!(
|
17
|
+
:help, :icon, :label_col, :control_col, :add_control_col_class, :layout, :skip_label, :label, :label_class,
|
18
|
+
:hide_label, :skip_required, :label_as_placeholder, :wrapper_class, :wrapper
|
19
|
+
)
|
20
|
+
|
21
|
+
if no_wrapper
|
22
|
+
yield
|
23
|
+
else
|
24
|
+
form_group(method, form_group_options) { yield }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def form_group_builder_options(options, method)
|
29
|
+
options.symbolize_keys!
|
30
|
+
options = convert_form_tag_options(method, options) if acts_like_form_tag
|
31
|
+
unless options[:skip_label]
|
32
|
+
options[:required] = form_group_required(options) if options.key?(:skip_required)
|
33
|
+
end
|
34
|
+
options
|
35
|
+
end
|
36
|
+
|
37
|
+
def convert_form_tag_options(method, options={})
|
38
|
+
unless @options[:skip_default_ids]
|
39
|
+
options[:name] ||= method
|
40
|
+
options[:id] ||= method
|
41
|
+
end
|
42
|
+
options
|
43
|
+
end
|
44
|
+
|
45
|
+
def form_group_opts(options, css_options)
|
46
|
+
wrapper_options = options[:wrapper]
|
47
|
+
form_group_options = {
|
48
|
+
id: options[:id], help: options[:help], icon: options[:icon],
|
49
|
+
label_col: options[:label_col], control_col: options[:control_col],
|
50
|
+
add_control_col_class: options[:add_control_col_class],
|
51
|
+
layout: get_group_layout(options[:layout]), class: options[:wrapper_class]
|
52
|
+
}
|
53
|
+
|
54
|
+
form_group_options.merge!(wrapper_options) if wrapper_options.is_a?(Hash)
|
55
|
+
form_group_options[:label] = form_group_label(options, css_options) unless options[:skip_label]
|
56
|
+
form_group_options
|
57
|
+
end
|
58
|
+
|
59
|
+
def form_group_label(options, css_options)
|
60
|
+
hash = {
|
61
|
+
text: form_group_label_text(options[:label]),
|
62
|
+
class: form_group_label_class(options),
|
63
|
+
required: options[:required]
|
64
|
+
}.merge(css_options[:id].present? ? { for: css_options[:id] } : {})
|
65
|
+
hash
|
66
|
+
end
|
67
|
+
|
68
|
+
def form_group_label_text(label)
|
69
|
+
text = label[:text] if label.is_a?(Hash)
|
70
|
+
text ||= label if label.is_a?(String)
|
71
|
+
text
|
72
|
+
end
|
73
|
+
|
74
|
+
def form_group_label_class(options)
|
75
|
+
return hide_class if options[:hide_label] || options[:label_as_placeholder]
|
76
|
+
|
77
|
+
classes = options[:label][:class] if options[:label].is_a?(Hash)
|
78
|
+
classes ||= options[:label_class]
|
79
|
+
classes
|
80
|
+
end
|
81
|
+
|
82
|
+
def form_group_required(options)
|
83
|
+
return unless options.key?(:skip_required)
|
84
|
+
|
85
|
+
warn "`:skip_required` is deprecated, use `:required: false` instead"
|
86
|
+
options[:skip_required] ? false : :default
|
87
|
+
end
|
88
|
+
|
89
|
+
def form_group_css_options(method, html_options, options)
|
90
|
+
css_options = html_options || options
|
91
|
+
# Add control_class; allow it to be overridden by :control_class option
|
92
|
+
control_classes = css_options.delete(:control_class) { control_class }
|
93
|
+
css_options[:class] = [control_classes, css_options[:class]].compact.join(" ")
|
94
|
+
css_options[:class] << " is-invalid" if error?(method)
|
95
|
+
css_options[:placeholder] = form_group_placeholder(options, method) if options[:label_as_placeholder]
|
96
|
+
css_options
|
97
|
+
end
|
98
|
+
|
99
|
+
def form_group_placeholder(options, method)
|
100
|
+
form_group_label_text(options[:label]) || object.class.human_attribute_name(method)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -24,35 +24,34 @@ module BootstrapForm
|
|
24
24
|
|
25
25
|
def alert_message(title, options={})
|
26
26
|
css = options[:class] || "alert alert-danger"
|
27
|
+
return unless object.respond_to?(:errors) && object.errors.full_messages.any?
|
27
28
|
|
28
|
-
|
29
|
-
content_tag :
|
30
|
-
|
31
|
-
concat error_summary unless options[:error_summary] == false
|
32
|
-
end
|
29
|
+
content_tag :div, class: css do
|
30
|
+
concat content_tag :p, title
|
31
|
+
concat error_summary unless options[:error_summary] == false
|
33
32
|
end
|
34
33
|
end
|
35
34
|
|
36
35
|
def error_summary
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
36
|
+
return unless object.errors.any?
|
37
|
+
|
38
|
+
content_tag :ul, class: "rails-bootstrap-forms-error-summary" do
|
39
|
+
object.errors.full_messages.each do |error|
|
40
|
+
concat content_tag(:li, error)
|
42
41
|
end
|
43
42
|
end
|
44
43
|
end
|
45
44
|
|
46
45
|
def errors_on(name, options={})
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
46
|
+
return unless error?(name)
|
47
|
+
|
48
|
+
hide_attribute_name = options[:hide_attribute_name] || false
|
49
|
+
|
50
|
+
content_tag :div, class: "alert alert-danger" do
|
51
|
+
if hide_attribute_name
|
52
|
+
object.errors[name].join(", ")
|
53
|
+
else
|
54
|
+
object.errors.full_messages_for(name).join(", ")
|
56
55
|
end
|
57
56
|
end
|
58
57
|
end
|
@@ -63,7 +62,7 @@ module BootstrapForm
|
|
63
62
|
|
64
63
|
static_options = options.merge(
|
65
64
|
readonly: true,
|
66
|
-
control_class: [options[:control_class], static_class].compact
|
65
|
+
control_class: [options[:control_class], static_class].compact
|
67
66
|
)
|
68
67
|
|
69
68
|
static_options[:value] = object.send(name) unless static_options.key?(:value)
|
@@ -80,14 +79,13 @@ module BootstrapForm
|
|
80
79
|
|
81
80
|
def prepend_and_append_input(name, options, &block)
|
82
81
|
options = options.extract!(:prepend, :append, :input_group_class)
|
83
|
-
input_group_class = ["input-group", options[:input_group_class]].compact.join(" ")
|
84
82
|
|
85
|
-
input = capture(&block) ||
|
83
|
+
input = capture(&block) || ActiveSupport::SafeBuffer.new
|
86
84
|
|
87
|
-
input =
|
88
|
-
input
|
89
|
-
|
90
|
-
|
85
|
+
input = prepend_input(options) + input + append_input(options)
|
86
|
+
input += generate_error(name)
|
87
|
+
options.present? &&
|
88
|
+
input = content_tag(:div, input, class: ["input-group", options[:input_group_class]].compact)
|
91
89
|
input
|
92
90
|
end
|
93
91
|
|
@@ -108,13 +106,23 @@ module BootstrapForm
|
|
108
106
|
|
109
107
|
private
|
110
108
|
|
109
|
+
def append_input(options)
|
110
|
+
html = content_tag(:div, input_group_content(options[:append]), class: "input-group-append") if options[:append]
|
111
|
+
html || ActiveSupport::SafeBuffer.new
|
112
|
+
end
|
113
|
+
|
114
|
+
def prepend_input(options)
|
115
|
+
html = content_tag(:div, input_group_content(options[:prepend]), class: "input-group-prepend") if options[:prepend]
|
116
|
+
html || ActiveSupport::SafeBuffer.new
|
117
|
+
end
|
118
|
+
|
111
119
|
def setup_css_class(the_class, options={})
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
options[:class] = the_class
|
120
|
+
return if options.key? :class
|
121
|
+
|
122
|
+
if (extra_class = options.delete(:extra_class))
|
123
|
+
the_class = "#{the_class} #{extra_class}"
|
117
124
|
end
|
125
|
+
options[:class] = the_class
|
118
126
|
end
|
119
127
|
end
|
120
128
|
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module Inputs
|
5
|
+
extend ActiveSupport::Autoload
|
6
|
+
|
7
|
+
autoload :Base
|
8
|
+
autoload :InputsCollection
|
9
|
+
autoload :CheckBox
|
10
|
+
autoload :CollectionCheckBoxes
|
11
|
+
autoload :CollectionRadioButtons
|
12
|
+
autoload :CollectionSelect
|
13
|
+
autoload :ColorField
|
14
|
+
autoload :DateField
|
15
|
+
autoload :DateSelect
|
16
|
+
autoload :DatetimeField
|
17
|
+
autoload :DatetimeLocalField
|
18
|
+
autoload :DatetimeSelect
|
19
|
+
autoload :EmailField
|
20
|
+
autoload :FileField
|
21
|
+
autoload :GroupedCollectionSelect
|
22
|
+
autoload :MonthField
|
23
|
+
autoload :NumberField
|
24
|
+
autoload :PasswordField
|
25
|
+
autoload :PhoneField
|
26
|
+
autoload :RadioButton
|
27
|
+
autoload :RangeField
|
28
|
+
autoload :RichTextArea if Rails::VERSION::MAJOR >= 6
|
29
|
+
autoload :SearchField
|
30
|
+
autoload :Select
|
31
|
+
autoload :TelephoneField
|
32
|
+
autoload :TextArea
|
33
|
+
autoload :TextField
|
34
|
+
autoload :TimeField
|
35
|
+
autoload :TimeSelect
|
36
|
+
autoload :TimeZoneSelect
|
37
|
+
autoload :UrlField
|
38
|
+
autoload :WeekField
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module Inputs
|
5
|
+
module Base
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
class_methods do
|
9
|
+
def bootstrap_field(field_name)
|
10
|
+
define_method "#{field_name}_with_bootstrap" do |name, options={}|
|
11
|
+
form_group_builder(name, options) do
|
12
|
+
prepend_and_append_input(name, options) do
|
13
|
+
send("#{field_name}_without_bootstrap".to_sym, name, options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
bootstrap_alias field_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def bootstrap_select_group(field_name)
|
22
|
+
with_field_name = "#{field_name}_with_bootstrap"
|
23
|
+
without_field_name = "#{field_name}_without_bootstrap"
|
24
|
+
define_method(with_field_name) do |name, options={}, html_options={}|
|
25
|
+
form_group_builder(name, options, html_options) do
|
26
|
+
form_group_content_tag(name, field_name, without_field_name, options, html_options)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
bootstrap_alias field_name
|
31
|
+
end
|
32
|
+
|
33
|
+
def bootstrap_alias(field_name)
|
34
|
+
alias_method "#{field_name}_without_bootstrap".to_sym, field_name
|
35
|
+
alias_method field_name, "#{field_name}_with_bootstrap".to_sym
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module BootstrapForm
|
4
|
+
module Inputs
|
5
|
+
module CheckBox
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
include Base
|
8
|
+
|
9
|
+
included do
|
10
|
+
def check_box_with_bootstrap(name, options={}, checked_value="1", unchecked_value="0", &block)
|
11
|
+
options = options.symbolize_keys!
|
12
|
+
check_box_options = options.except(:class, :label, :label_class, :error_message, :help,
|
13
|
+
:inline, :custom, :hide_label, :skip_label, :wrapper_class)
|
14
|
+
check_box_options[:class] = check_box_classes(name, options)
|
15
|
+
|
16
|
+
content_tag(:div, class: check_box_wrapper_class(options)) do
|
17
|
+
html = check_box_without_bootstrap(name, check_box_options, checked_value, unchecked_value)
|
18
|
+
html.concat(check_box_label(name, options, checked_value, &block)) unless options[:skip_label]
|
19
|
+
html.concat(generate_error(name)) if options[:error_message]
|
20
|
+
html
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
bootstrap_alias :check_box
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def check_box_label(name, options, checked_value, &block)
|
30
|
+
label_name = if options[:multiple]
|
31
|
+
check_box_value(name, checked_value)
|
32
|
+
else
|
33
|
+
name
|
34
|
+
end
|
35
|
+
label_options = { class: check_box_label_class(options) }
|
36
|
+
label_options[:for] = options[:id] if options[:id].present?
|
37
|
+
label(label_name, check_box_description(name, options, &block), label_options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def check_box_description(name, options, &block)
|
41
|
+
content = block_given? ? capture(&block) : options[:label]
|
42
|
+
content || (object && object.class.human_attribute_name(name)) || name.to_s.humanize
|
43
|
+
end
|
44
|
+
|
45
|
+
def check_box_value(name, value)
|
46
|
+
# label's `for` attribute needs to match checkbox tag's id,
|
47
|
+
# IE sanitized value, IE
|
48
|
+
# https://github.com/rails/rails/blob/5-0-stable/actionview/lib/action_view/helpers/tags/base.rb#L123-L125
|
49
|
+
"#{name}_#{value.to_s.gsub(/\s/, '_').gsub(/[^-[[:word:]]]/, '').mb_chars.downcase}"
|
50
|
+
end
|
51
|
+
|
52
|
+
def check_box_classes(name, options)
|
53
|
+
classes = [options[:class]]
|
54
|
+
classes << (options[:custom] ? "custom-control-input" : "form-check-input")
|
55
|
+
classes << "is-invalid" if error?(name)
|
56
|
+
classes << "position-static" if options[:skip_label] || options[:hide_label]
|
57
|
+
classes.flatten.compact
|
58
|
+
end
|
59
|
+
|
60
|
+
def check_box_label_class(options)
|
61
|
+
classes = []
|
62
|
+
classes << (options[:custom] ? "custom-control-label" : "form-check-label")
|
63
|
+
classes << options[:label_class]
|
64
|
+
classes << hide_class if options[:hide_label]
|
65
|
+
classes.flatten.compact
|
66
|
+
end
|
67
|
+
|
68
|
+
def check_box_wrapper_class(options)
|
69
|
+
classes = []
|
70
|
+
if options[:custom]
|
71
|
+
classes << custom_check_box_wrapper_class(options)
|
72
|
+
else
|
73
|
+
classes << "form-check"
|
74
|
+
classes << "form-check-inline" if layout_inline?(options[:inline])
|
75
|
+
end
|
76
|
+
classes << options[:wrapper_class] if options[:wrapper_class].present?
|
77
|
+
classes.flatten.compact
|
78
|
+
end
|
79
|
+
|
80
|
+
def custom_check_box_wrapper_class(options)
|
81
|
+
classes = []
|
82
|
+
classes << "custom-control"
|
83
|
+
classes << (options[:custom] == :switch ? "custom-switch" : "custom-checkbox")
|
84
|
+
classes << "custom-control-inline" if layout_inline?(options[:inline])
|
85
|
+
classes
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|