simple_form 3.0.0 → 3.1.0
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +44 -22
- data/MIT-LICENSE +1 -1
- data/README.md +204 -81
- data/lib/generators/simple_form/install_generator.rb +3 -3
- data/lib/generators/simple_form/templates/README +3 -4
- data/lib/generators/simple_form/templates/config/initializers/simple_form.rb +28 -7
- data/lib/generators/simple_form/templates/config/initializers/simple_form_bootstrap.rb +115 -24
- data/lib/generators/simple_form/templates/config/initializers/simple_form_foundation.rb +86 -5
- data/lib/generators/simple_form/templates/config/locales/simple_form.en.yml +7 -2
- data/lib/simple_form/action_view_extensions/builder.rb +1 -0
- data/lib/simple_form/action_view_extensions/form_helper.rb +6 -2
- data/lib/simple_form/components/errors.rb +28 -2
- data/lib/simple_form/components/hints.rb +8 -3
- data/lib/simple_form/components/html5.rb +1 -1
- data/lib/simple_form/components/label_input.rb +20 -2
- data/lib/simple_form/components/labels.rb +10 -6
- data/lib/simple_form/components/maxlength.rb +1 -1
- data/lib/simple_form/components/min_max.rb +1 -1
- data/lib/simple_form/components/pattern.rb +1 -1
- data/lib/simple_form/components/placeholders.rb +2 -2
- data/lib/simple_form/components/readonly.rb +1 -1
- data/lib/simple_form/form_builder.rb +123 -73
- data/lib/simple_form/helpers.rb +5 -5
- data/lib/simple_form/inputs/base.rb +36 -11
- data/lib/simple_form/inputs/block_input.rb +1 -1
- data/lib/simple_form/inputs/boolean_input.rb +28 -15
- data/lib/simple_form/inputs/collection_input.rb +30 -9
- data/lib/simple_form/inputs/collection_radio_buttons_input.rb +6 -11
- data/lib/simple_form/inputs/collection_select_input.rb +4 -2
- data/lib/simple_form/inputs/date_time_input.rb +12 -2
- data/lib/simple_form/inputs/file_input.rb +4 -2
- data/lib/simple_form/inputs/grouped_collection_select_input.rb +15 -3
- data/lib/simple_form/inputs/hidden_input.rb +4 -2
- data/lib/simple_form/inputs/numeric_input.rb +5 -4
- data/lib/simple_form/inputs/password_input.rb +4 -2
- data/lib/simple_form/inputs/priority_input.rb +4 -2
- data/lib/simple_form/inputs/range_input.rb +1 -1
- data/lib/simple_form/inputs/string_input.rb +4 -2
- data/lib/simple_form/inputs/text_input.rb +4 -2
- data/lib/simple_form/railtie.rb +7 -0
- data/lib/simple_form/tags.rb +6 -0
- data/lib/simple_form/version.rb +1 -1
- data/lib/simple_form/wrappers/builder.rb +6 -6
- data/lib/simple_form/wrappers/leaf.rb +28 -0
- data/lib/simple_form/wrappers/many.rb +6 -6
- data/lib/simple_form/wrappers/root.rb +1 -1
- data/lib/simple_form/wrappers/single.rb +5 -3
- data/lib/simple_form/wrappers.rb +1 -0
- data/lib/simple_form.rb +59 -8
- data/test/action_view_extensions/builder_test.rb +36 -36
- data/test/action_view_extensions/form_helper_test.rb +33 -14
- data/test/components/label_test.rb +37 -37
- data/test/form_builder/association_test.rb +52 -35
- data/test/form_builder/button_test.rb +10 -10
- data/test/form_builder/error_notification_test.rb +1 -1
- data/test/form_builder/error_test.rb +147 -22
- data/test/form_builder/general_test.rb +89 -64
- data/test/form_builder/hint_test.rb +23 -17
- data/test/form_builder/input_field_test.rb +80 -16
- data/test/form_builder/label_test.rb +52 -10
- data/test/form_builder/wrapper_test.rb +135 -19
- data/test/generators/simple_form_generator_test.rb +4 -4
- data/test/inputs/boolean_input_test.rb +62 -6
- data/test/inputs/collection_check_boxes_input_test.rb +85 -17
- data/test/inputs/collection_radio_buttons_input_test.rb +134 -36
- data/test/inputs/collection_select_input_test.rb +146 -41
- data/test/inputs/datetime_input_test.rb +117 -50
- data/test/inputs/disabled_test.rb +15 -15
- data/test/inputs/discovery_test.rb +56 -6
- data/test/inputs/file_input_test.rb +2 -2
- data/test/inputs/general_test.rb +20 -20
- data/test/inputs/grouped_collection_select_input_test.rb +44 -8
- data/test/inputs/hidden_input_test.rb +4 -4
- data/test/inputs/numeric_input_test.rb +43 -43
- data/test/inputs/priority_input_test.rb +13 -13
- data/test/inputs/readonly_test.rb +19 -19
- data/test/inputs/required_test.rb +13 -13
- data/test/inputs/string_input_test.rb +50 -30
- data/test/inputs/text_input_test.rb +7 -7
- data/test/simple_form_test.rb +8 -0
- data/test/support/discovery_inputs.rb +32 -2
- data/test/support/misc_helpers.rb +77 -5
- data/test/support/models.rb +60 -24
- data/test/test_helper.rb +7 -1
- metadata +22 -36
- data/lib/simple_form/action_view_extensions/builder.rb.orig +0 -247
- data/lib/simple_form/form_builder.rb.orig +0 -486
- data/lib/simple_form/version.rb.orig +0 -7
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Inputs
|
|
3
3
|
class CollectionSelectInput < CollectionInput
|
|
4
|
-
def input
|
|
4
|
+
def input(wrapper_options = nil)
|
|
5
5
|
label_method, value_method = detect_collection_methods
|
|
6
6
|
|
|
7
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
8
|
+
|
|
7
9
|
@builder.collection_select(
|
|
8
10
|
attribute_name, collection, value_method, label_method,
|
|
9
|
-
input_options,
|
|
11
|
+
input_options, merged_input_options
|
|
10
12
|
)
|
|
11
13
|
end
|
|
12
14
|
end
|
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Inputs
|
|
3
3
|
class DateTimeInput < Base
|
|
4
|
-
def input
|
|
5
|
-
|
|
4
|
+
def input(wrapper_options = nil)
|
|
5
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
6
|
+
|
|
7
|
+
if use_html5_inputs?
|
|
8
|
+
@builder.send(:"#{input_type}_field", attribute_name, merged_input_options)
|
|
9
|
+
else
|
|
10
|
+
@builder.send(:"#{input_type}_select", attribute_name, input_options, merged_input_options)
|
|
11
|
+
end
|
|
6
12
|
end
|
|
7
13
|
|
|
8
14
|
private
|
|
@@ -19,6 +25,10 @@ module SimpleForm
|
|
|
19
25
|
position = ActionView::Helpers::DateTimeSelector::POSITION[position]
|
|
20
26
|
"#{attribute_name}_#{position}i"
|
|
21
27
|
end
|
|
28
|
+
|
|
29
|
+
def use_html5_inputs?
|
|
30
|
+
input_options[:html5]
|
|
31
|
+
end
|
|
22
32
|
end
|
|
23
33
|
end
|
|
24
34
|
end
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Inputs
|
|
3
3
|
class FileInput < Base
|
|
4
|
-
def input
|
|
5
|
-
|
|
4
|
+
def input(wrapper_options = nil)
|
|
5
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
6
|
+
|
|
7
|
+
@builder.file_field(attribute_name, merged_input_options)
|
|
6
8
|
end
|
|
7
9
|
end
|
|
8
10
|
end
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Inputs
|
|
3
3
|
class GroupedCollectionSelectInput < CollectionInput
|
|
4
|
-
def input
|
|
4
|
+
def input(wrapper_options = nil)
|
|
5
5
|
label_method, value_method = detect_collection_methods
|
|
6
|
+
|
|
7
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
8
|
+
|
|
6
9
|
@builder.grouped_collection_select(attribute_name, grouped_collection,
|
|
7
10
|
group_method, group_label_method, value_method, label_method,
|
|
8
|
-
input_options,
|
|
11
|
+
input_options, merged_input_options)
|
|
9
12
|
end
|
|
10
13
|
|
|
11
14
|
private
|
|
@@ -19,7 +22,7 @@ module SimpleForm
|
|
|
19
22
|
|
|
20
23
|
# Sample collection
|
|
21
24
|
def collection
|
|
22
|
-
@collection ||= grouped_collection.
|
|
25
|
+
@collection ||= grouped_collection.map { |collection| collection.try(:send, group_method) }.detect(&:present?) || []
|
|
23
26
|
end
|
|
24
27
|
|
|
25
28
|
def group_method
|
|
@@ -36,6 +39,15 @@ module SimpleForm
|
|
|
36
39
|
|
|
37
40
|
label
|
|
38
41
|
end
|
|
42
|
+
|
|
43
|
+
def detect_method_from_class(collection_classes)
|
|
44
|
+
return {} if collection_classes.empty?
|
|
45
|
+
|
|
46
|
+
sample = collection_classes.first
|
|
47
|
+
|
|
48
|
+
{ label: SimpleForm.collection_label_methods.find { |m| sample.instance_methods.include?(m) },
|
|
49
|
+
value: SimpleForm.collection_value_methods.find { |m| sample.instance_methods.include?(m) } }
|
|
50
|
+
end
|
|
39
51
|
end
|
|
40
52
|
end
|
|
41
53
|
end
|
|
@@ -3,8 +3,10 @@ module SimpleForm
|
|
|
3
3
|
class HiddenInput < Base
|
|
4
4
|
disable :label, :errors, :hint, :required
|
|
5
5
|
|
|
6
|
-
def input
|
|
7
|
-
|
|
6
|
+
def input(wrapper_options = nil)
|
|
7
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
8
|
+
|
|
9
|
+
@builder.hidden_field(attribute_name, merged_input_options)
|
|
8
10
|
end
|
|
9
11
|
|
|
10
12
|
private
|
|
@@ -3,16 +3,17 @@ module SimpleForm
|
|
|
3
3
|
class NumericInput < Base
|
|
4
4
|
enable :placeholder, :min_max
|
|
5
5
|
|
|
6
|
-
def input
|
|
6
|
+
def input(wrapper_options = nil)
|
|
7
7
|
input_html_classes.unshift("numeric")
|
|
8
8
|
if html5?
|
|
9
9
|
input_html_options[:type] ||= "number"
|
|
10
10
|
input_html_options[:step] ||= integer? ? 1 : "any"
|
|
11
11
|
end
|
|
12
|
-
@builder.text_field(attribute_name, input_html_options)
|
|
13
|
-
end
|
|
14
12
|
|
|
15
|
-
|
|
13
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
14
|
+
|
|
15
|
+
@builder.text_field(attribute_name, merged_input_options)
|
|
16
|
+
end
|
|
16
17
|
end
|
|
17
18
|
end
|
|
18
19
|
end
|
|
@@ -3,8 +3,10 @@ module SimpleForm
|
|
|
3
3
|
class PasswordInput < Base
|
|
4
4
|
enable :placeholder, :maxlength
|
|
5
5
|
|
|
6
|
-
def input
|
|
7
|
-
|
|
6
|
+
def input(wrapper_options = nil)
|
|
7
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
8
|
+
|
|
9
|
+
@builder.password_field(attribute_name, merged_input_options)
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
end
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Inputs
|
|
3
3
|
class PriorityInput < CollectionSelectInput
|
|
4
|
-
def input
|
|
4
|
+
def input(wrapper_options = nil)
|
|
5
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
6
|
+
|
|
5
7
|
@builder.send(:"#{input_type}_select", attribute_name, input_priority,
|
|
6
|
-
input_options,
|
|
8
|
+
input_options, merged_input_options)
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
def input_priority
|
|
@@ -3,13 +3,15 @@ module SimpleForm
|
|
|
3
3
|
class StringInput < Base
|
|
4
4
|
enable :placeholder, :maxlength, :pattern
|
|
5
5
|
|
|
6
|
-
def input
|
|
6
|
+
def input(wrapper_options = nil)
|
|
7
7
|
unless string?
|
|
8
8
|
input_html_classes.unshift("string")
|
|
9
9
|
input_html_options[:type] ||= input_type if html5?
|
|
10
10
|
end
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
13
|
+
|
|
14
|
+
@builder.text_field(attribute_name, merged_input_options)
|
|
13
15
|
end
|
|
14
16
|
|
|
15
17
|
private
|
|
@@ -3,8 +3,10 @@ module SimpleForm
|
|
|
3
3
|
class TextInput < Base
|
|
4
4
|
enable :placeholder, :maxlength
|
|
5
5
|
|
|
6
|
-
def input
|
|
7
|
-
|
|
6
|
+
def input(wrapper_options = nil)
|
|
7
|
+
merged_input_options = merge_wrapper_options(input_html_options, wrapper_options)
|
|
8
|
+
|
|
9
|
+
@builder.text_area(attribute_name, merged_input_options)
|
|
8
10
|
end
|
|
9
11
|
end
|
|
10
12
|
end
|
data/lib/simple_form/railtie.rb
CHANGED
|
@@ -3,5 +3,12 @@ require 'rails/railtie'
|
|
|
3
3
|
module SimpleForm
|
|
4
4
|
class Railtie < Rails::Railtie
|
|
5
5
|
config.eager_load_namespaces << SimpleForm
|
|
6
|
+
|
|
7
|
+
config.after_initialize do
|
|
8
|
+
unless SimpleForm.configured?
|
|
9
|
+
warn '[Simple Form] Simple Form is not configured in the application and will use the default values.' +
|
|
10
|
+
' Use `rails generate simple_form:install` to generate the Simple Form configuration.'
|
|
11
|
+
end
|
|
12
|
+
end
|
|
6
13
|
end
|
|
7
14
|
end
|
data/lib/simple_form/tags.rb
CHANGED
|
@@ -15,6 +15,12 @@ module SimpleForm
|
|
|
15
15
|
|
|
16
16
|
rendered_item = yield item, value, text, default_html_options.merge(additional_html_options)
|
|
17
17
|
|
|
18
|
+
if @options.fetch(:boolean_style, SimpleForm.boolean_style) == :nested
|
|
19
|
+
label_options = default_html_options.slice(:index, :namespace)
|
|
20
|
+
label_options['class'] = @options[:item_label_class]
|
|
21
|
+
rendered_item = @template_object.label(@object_name, sanitize_attribute_name(value), rendered_item, label_options)
|
|
22
|
+
end
|
|
23
|
+
|
|
18
24
|
item_wrapper_tag ? @template_object.content_tag(item_wrapper_tag, rendered_item, class: item_wrapper_class) : rendered_item
|
|
19
25
|
end.join.html_safe
|
|
20
26
|
end
|
data/lib/simple_form/version.rb
CHANGED
|
@@ -45,20 +45,20 @@ module SimpleForm
|
|
|
45
45
|
@components = []
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
def use(name, options=
|
|
48
|
+
def use(name, options = {})
|
|
49
49
|
if options && wrapper = options[:wrap_with]
|
|
50
|
-
@components << Single.new(name, wrapper)
|
|
50
|
+
@components << Single.new(name, wrapper, options.except(:wrap_with))
|
|
51
51
|
else
|
|
52
|
-
@components << name
|
|
52
|
+
@components << Leaf.new(name, options)
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
|
|
56
|
-
def optional(name, options=
|
|
56
|
+
def optional(name, options = {}, &block)
|
|
57
57
|
@options[name] = false
|
|
58
|
-
use(name, options
|
|
58
|
+
use(name, options)
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
def wrapper(name, options=nil)
|
|
61
|
+
def wrapper(name, options = nil)
|
|
62
62
|
if block_given?
|
|
63
63
|
name, options = nil, name if name.is_a?(Hash)
|
|
64
64
|
builder = self.class.new(@options)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module SimpleForm
|
|
2
|
+
module Wrappers
|
|
3
|
+
class Leaf
|
|
4
|
+
attr_reader :namespace
|
|
5
|
+
|
|
6
|
+
def initialize(namespace, options = {})
|
|
7
|
+
@namespace = namespace
|
|
8
|
+
@options = options
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def render(input)
|
|
12
|
+
method = input.method(@namespace)
|
|
13
|
+
|
|
14
|
+
if method.arity == 0
|
|
15
|
+
ActiveSupport::Deprecation.warn(SimpleForm::CUSTOM_INPUT_DEPRECATION_WARN % { name: @namespace })
|
|
16
|
+
|
|
17
|
+
method.call
|
|
18
|
+
else
|
|
19
|
+
method.call(@options)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def find(name)
|
|
24
|
+
self if @namespace == name
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
module SimpleForm
|
|
2
2
|
module Wrappers
|
|
3
3
|
# A wrapper is an object that holds several components and render them.
|
|
4
|
-
# A component may
|
|
4
|
+
# A component may be any object that responds to `render`.
|
|
5
5
|
# This API allows inputs/components to be easily wrapped, removing the
|
|
6
6
|
# need to modify the code only to wrap input in an extra tag.
|
|
7
7
|
#
|
|
@@ -10,9 +10,8 @@ module SimpleForm
|
|
|
10
10
|
# on demand on input generation.
|
|
11
11
|
class Many
|
|
12
12
|
attr_reader :namespace, :defaults, :components
|
|
13
|
-
alias :to_sym :namespace
|
|
14
13
|
|
|
15
|
-
def initialize(namespace, components, defaults={})
|
|
14
|
+
def initialize(namespace, components, defaults = {})
|
|
16
15
|
@namespace = namespace
|
|
17
16
|
@components = components
|
|
18
17
|
@defaults = defaults
|
|
@@ -25,8 +24,8 @@ module SimpleForm
|
|
|
25
24
|
options = input.options
|
|
26
25
|
|
|
27
26
|
components.each do |component|
|
|
28
|
-
next if options[component] == false
|
|
29
|
-
rendered = component.
|
|
27
|
+
next if options[component.namespace] == false
|
|
28
|
+
rendered = component.render(input)
|
|
30
29
|
content.safe_concat rendered.to_s if rendered
|
|
31
30
|
end
|
|
32
31
|
|
|
@@ -51,6 +50,7 @@ module SimpleForm
|
|
|
51
50
|
|
|
52
51
|
def wrap(input, options, content)
|
|
53
52
|
return content if options[namespace] == false
|
|
53
|
+
return if defaults[:unless_blank] && content.empty?
|
|
54
54
|
|
|
55
55
|
tag = (namespace && options[:"#{namespace}_tag"]) || @defaults[:tag]
|
|
56
56
|
return content unless tag
|
|
@@ -62,7 +62,7 @@ module SimpleForm
|
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
def html_options(options)
|
|
65
|
-
options[:"#{namespace}_html"] || {}
|
|
65
|
+
(@defaults[:html] || {}).merge(options[:"#{namespace}_html"] || {})
|
|
66
66
|
end
|
|
67
67
|
|
|
68
68
|
def html_classes(input, options)
|
|
@@ -2,14 +2,16 @@ module SimpleForm
|
|
|
2
2
|
module Wrappers
|
|
3
3
|
# `Single` is an optimization for a wrapper that has only one component.
|
|
4
4
|
class Single < Many
|
|
5
|
-
def initialize(name, options={})
|
|
6
|
-
|
|
5
|
+
def initialize(name, wrapper_options = {}, options = {})
|
|
6
|
+
@component = Leaf.new(name, options)
|
|
7
|
+
|
|
8
|
+
super(name, [@component], wrapper_options)
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
def render(input)
|
|
10
12
|
options = input.options
|
|
11
13
|
if options[namespace] != false
|
|
12
|
-
content =
|
|
14
|
+
content = @component.render(input)
|
|
13
15
|
wrap(input, options, content) if content
|
|
14
16
|
end
|
|
15
17
|
end
|
data/lib/simple_form/wrappers.rb
CHANGED
data/lib/simple_form.rb
CHANGED
|
@@ -24,6 +24,24 @@ module SimpleForm
|
|
|
24
24
|
SimpleForm::Components.eager_load!
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
+
CUSTOM_INPUT_DEPRECATION_WARN = <<-WARN
|
|
28
|
+
%{name} method now accepts a `wrapper_options` argument. The method definition without the argument is deprecated and will be removed in the next Simple Form version. Change your code from:
|
|
29
|
+
|
|
30
|
+
def %{name}
|
|
31
|
+
|
|
32
|
+
to
|
|
33
|
+
|
|
34
|
+
def %{name}(wrapper_options)
|
|
35
|
+
|
|
36
|
+
See https://github.com/plataformatec/simple_form/pull/997 for more information.
|
|
37
|
+
WARN
|
|
38
|
+
|
|
39
|
+
@@configured = false
|
|
40
|
+
|
|
41
|
+
def self.configured? #:nodoc:
|
|
42
|
+
@@configured
|
|
43
|
+
end
|
|
44
|
+
|
|
27
45
|
## CONFIGURATION OPTIONS
|
|
28
46
|
|
|
29
47
|
# Method used to tidy up errors.
|
|
@@ -66,7 +84,7 @@ module SimpleForm
|
|
|
66
84
|
|
|
67
85
|
# How the label text should be generated altogether with the required text.
|
|
68
86
|
mattr_accessor :label_text
|
|
69
|
-
@@label_text = lambda { |label, required| "#{required} #{label}" }
|
|
87
|
+
@@label_text = lambda { |label, required, explicit_label| "#{required} #{label}" }
|
|
70
88
|
|
|
71
89
|
# You can define the class to be used on all labels. Defaults to none.
|
|
72
90
|
mattr_accessor :label_class
|
|
@@ -78,10 +96,16 @@ module SimpleForm
|
|
|
78
96
|
mattr_accessor :boolean_style
|
|
79
97
|
@@boolean_style = :inline
|
|
80
98
|
|
|
81
|
-
# You can define the class to be used on all forms. Default is
|
|
82
|
-
|
|
99
|
+
# DEPRECATED: You can define the class to be used on all forms. Default is
|
|
100
|
+
# simple_form.
|
|
101
|
+
mattr_reader :form_class
|
|
83
102
|
@@form_class = :simple_form
|
|
84
103
|
|
|
104
|
+
# You can define the default class to be used on all forms. Can be overriden
|
|
105
|
+
# with `html: { :class }`. Defaults to none.
|
|
106
|
+
mattr_accessor :default_form_class
|
|
107
|
+
@@default_form_class = nil
|
|
108
|
+
|
|
85
109
|
# You can define which elements should obtain additional classes.
|
|
86
110
|
mattr_accessor :generate_additional_classes_for
|
|
87
111
|
@@generate_additional_classes_for = [:wrapper, :label, :input]
|
|
@@ -107,9 +131,19 @@ module SimpleForm
|
|
|
107
131
|
# Custom wrappers for input types. This should be a hash containing an input
|
|
108
132
|
# type as key and the wrapper that will be used for all inputs with specified type.
|
|
109
133
|
# e.g { string: :string_wrapper, boolean: :boolean_wrapper }
|
|
134
|
+
# You can also set a wrapper mapping per form basis.
|
|
135
|
+
# e.g simple_form_for(@foo, wrapper_mappings: { check_boxes: :bootstrap_checkbox })
|
|
110
136
|
mattr_accessor :wrapper_mappings
|
|
111
137
|
@@wrapper_mappings = nil
|
|
112
138
|
|
|
139
|
+
# Namespaces where SimpleForm should look for custom input classes that override
|
|
140
|
+
# default inputs. Namespaces are given as string to allow lazy loading inputs.
|
|
141
|
+
# e.g. config.custom_inputs_namespaces << "CustomInputs"
|
|
142
|
+
# will try to find CustomInputs::NumericInput when an :integer
|
|
143
|
+
# field is called.
|
|
144
|
+
mattr_accessor :custom_inputs_namespaces
|
|
145
|
+
@@custom_inputs_namespaces = []
|
|
146
|
+
|
|
113
147
|
# Default priority for time_zone inputs.
|
|
114
148
|
mattr_accessor :time_zone_priority
|
|
115
149
|
@@time_zone_priority = nil
|
|
@@ -151,15 +185,26 @@ module SimpleForm
|
|
|
151
185
|
mattr_accessor :input_class
|
|
152
186
|
@@input_class = nil
|
|
153
187
|
|
|
188
|
+
# Defines if an input wrapper class should be included or not
|
|
189
|
+
mattr_accessor :include_default_input_wrapper_class
|
|
190
|
+
@@include_default_input_wrapper_class = true
|
|
191
|
+
|
|
192
|
+
# Define the default class of the input wrapper of the boolean input.
|
|
193
|
+
mattr_accessor :boolean_label_class
|
|
194
|
+
@@boolean_label_class = 'checkbox'
|
|
195
|
+
|
|
154
196
|
## WRAPPER CONFIGURATION
|
|
155
197
|
# The default wrapper to be used by the FormBuilder.
|
|
156
198
|
mattr_accessor :default_wrapper
|
|
157
199
|
@@default_wrapper = :default
|
|
158
|
-
@@wrappers = {}
|
|
200
|
+
@@wrappers = {} #:nodoc:
|
|
201
|
+
|
|
202
|
+
mattr_accessor :i18n_scope
|
|
203
|
+
@@i18n_scope = 'simple_form'
|
|
159
204
|
|
|
160
205
|
# Retrieves a given wrapper
|
|
161
206
|
def self.wrapper(name)
|
|
162
|
-
@@wrappers[name.
|
|
207
|
+
@@wrappers[name.to_s] or raise WrapperNotFound, "Couldn't find wrapper with name #{name}"
|
|
163
208
|
end
|
|
164
209
|
|
|
165
210
|
# Raised when fails to find a given wrapper name
|
|
@@ -172,14 +217,14 @@ module SimpleForm
|
|
|
172
217
|
if block_given?
|
|
173
218
|
options = args.extract_options!
|
|
174
219
|
name = args.first || :default
|
|
175
|
-
@@wrappers[name.
|
|
220
|
+
@@wrappers[name.to_s] = build(options, &block)
|
|
176
221
|
else
|
|
177
222
|
@@wrappers
|
|
178
223
|
end
|
|
179
224
|
end
|
|
180
225
|
|
|
181
226
|
# Builds a new wrapper using SimpleForm::Wrappers::Builder.
|
|
182
|
-
def self.build(options={})
|
|
227
|
+
def self.build(options = {})
|
|
183
228
|
options[:tag] = :div if options[:tag].nil?
|
|
184
229
|
builder = SimpleForm::Wrappers::Builder.new(options)
|
|
185
230
|
yield builder
|
|
@@ -210,9 +255,15 @@ module SimpleForm
|
|
|
210
255
|
ActiveSupport::Deprecation.warn "[SIMPLE_FORM] SimpleForm.default_input_size= is deprecated and has no effect", caller
|
|
211
256
|
end
|
|
212
257
|
|
|
213
|
-
|
|
258
|
+
def self.form_class=(value)
|
|
259
|
+
ActiveSupport::Deprecation.warn "[SIMPLE_FORM] SimpleForm.form_class= is deprecated and will be removed in 4.x. Use SimpleForm.default_form_class= instead", caller
|
|
260
|
+
@@form_class = value
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
# Default way to setup Simple Form. Run rails generate simple_form:install
|
|
214
264
|
# to create a fresh initializer with all configuration values.
|
|
215
265
|
def self.setup
|
|
266
|
+
@@configured = true
|
|
216
267
|
yield self
|
|
217
268
|
end
|
|
218
269
|
end
|