actionview 4.2.11.1 → 6.0.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionview might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +201 -192
- data/MIT-LICENSE +1 -1
- data/README.rdoc +9 -8
- data/lib/action_view/base.rb +144 -37
- data/lib/action_view/buffers.rb +18 -1
- data/lib/action_view/cache_expiry.rb +53 -0
- data/lib/action_view/context.rb +8 -12
- data/lib/action_view/dependency_tracker.rb +54 -20
- data/lib/action_view/digestor.rb +88 -85
- data/lib/action_view/flows.rb +11 -12
- data/lib/action_view/gem_version.rb +6 -4
- data/lib/action_view/helpers/active_model_helper.rb +16 -11
- data/lib/action_view/helpers/asset_tag_helper.rb +241 -82
- data/lib/action_view/helpers/asset_url_helper.rb +171 -67
- data/lib/action_view/helpers/atom_feed_helper.rb +19 -17
- data/lib/action_view/helpers/cache_helper.rb +112 -42
- data/lib/action_view/helpers/capture_helper.rb +20 -13
- data/lib/action_view/helpers/controller_helper.rb +15 -4
- data/lib/action_view/helpers/csp_helper.rb +26 -0
- data/lib/action_view/helpers/csrf_helper.rb +8 -6
- data/lib/action_view/helpers/date_helper.rb +230 -129
- data/lib/action_view/helpers/debug_helper.rb +7 -6
- data/lib/action_view/helpers/form_helper.rb +755 -129
- data/lib/action_view/helpers/form_options_helper.rb +130 -75
- data/lib/action_view/helpers/form_tag_helper.rb +116 -71
- data/lib/action_view/helpers/javascript_helper.rb +30 -14
- data/lib/action_view/helpers/number_helper.rb +84 -59
- data/lib/action_view/helpers/output_safety_helper.rb +36 -4
- data/lib/action_view/helpers/rendering_helper.rb +11 -8
- data/lib/action_view/helpers/sanitize_helper.rb +30 -31
- data/lib/action_view/helpers/tag_helper.rb +201 -75
- data/lib/action_view/helpers/tags/base.rb +138 -98
- data/lib/action_view/helpers/tags/check_box.rb +20 -19
- data/lib/action_view/helpers/tags/checkable.rb +4 -2
- data/lib/action_view/helpers/tags/collection_check_boxes.rb +12 -34
- data/lib/action_view/helpers/tags/collection_helpers.rb +69 -36
- data/lib/action_view/helpers/tags/collection_radio_buttons.rb +6 -12
- data/lib/action_view/helpers/tags/collection_select.rb +4 -2
- data/lib/action_view/helpers/tags/color_field.rb +4 -3
- data/lib/action_view/helpers/tags/date_field.rb +2 -1
- data/lib/action_view/helpers/tags/date_select.rb +37 -36
- data/lib/action_view/helpers/tags/datetime_field.rb +4 -3
- data/lib/action_view/helpers/tags/datetime_local_field.rb +2 -1
- data/lib/action_view/helpers/tags/datetime_select.rb +2 -0
- data/lib/action_view/helpers/tags/email_field.rb +2 -0
- data/lib/action_view/helpers/tags/file_field.rb +2 -0
- data/lib/action_view/helpers/tags/grouped_collection_select.rb +4 -2
- data/lib/action_view/helpers/tags/hidden_field.rb +2 -0
- data/lib/action_view/helpers/tags/label.rb +3 -2
- data/lib/action_view/helpers/tags/month_field.rb +2 -1
- data/lib/action_view/helpers/tags/number_field.rb +2 -0
- data/lib/action_view/helpers/tags/password_field.rb +3 -1
- data/lib/action_view/helpers/tags/placeholderable.rb +3 -1
- data/lib/action_view/helpers/tags/radio_button.rb +7 -6
- data/lib/action_view/helpers/tags/range_field.rb +2 -0
- data/lib/action_view/helpers/tags/search_field.rb +14 -9
- data/lib/action_view/helpers/tags/select.rb +11 -10
- data/lib/action_view/helpers/tags/tel_field.rb +2 -0
- data/lib/action_view/helpers/tags/text_area.rb +4 -2
- data/lib/action_view/helpers/tags/text_field.rb +8 -8
- data/lib/action_view/helpers/tags/time_field.rb +2 -1
- data/lib/action_view/helpers/tags/time_select.rb +2 -0
- data/lib/action_view/helpers/tags/time_zone_select.rb +3 -1
- data/lib/action_view/helpers/tags/translator.rb +15 -16
- data/lib/action_view/helpers/tags/url_field.rb +2 -0
- data/lib/action_view/helpers/tags/week_field.rb +2 -1
- data/lib/action_view/helpers/tags.rb +3 -1
- data/lib/action_view/helpers/text_helper.rb +56 -38
- data/lib/action_view/helpers/translation_helper.rb +91 -47
- data/lib/action_view/helpers/url_helper.rb +160 -105
- data/lib/action_view/helpers.rb +5 -3
- data/lib/action_view/layouts.rb +65 -61
- data/lib/action_view/log_subscriber.rb +61 -10
- data/lib/action_view/lookup_context.rb +147 -89
- data/lib/action_view/model_naming.rb +3 -1
- data/lib/action_view/path_set.rb +28 -23
- data/lib/action_view/railtie.rb +62 -6
- data/lib/action_view/record_identifier.rb +53 -26
- data/lib/action_view/renderer/abstract_renderer.rb +71 -13
- data/lib/action_view/renderer/partial_renderer/collection_caching.rb +103 -0
- data/lib/action_view/renderer/partial_renderer.rb +239 -225
- data/lib/action_view/renderer/renderer.rb +22 -8
- data/lib/action_view/renderer/streaming_template_renderer.rb +54 -54
- data/lib/action_view/renderer/template_renderer.rb +79 -73
- data/lib/action_view/rendering.rb +68 -44
- data/lib/action_view/routing_url_for.rb +33 -22
- data/lib/action_view/tasks/cache_digests.rake +25 -0
- data/lib/action_view/template/error.rb +44 -29
- data/lib/action_view/template/handlers/builder.rb +12 -13
- data/lib/action_view/template/handlers/erb/erubi.rb +87 -0
- data/lib/action_view/template/handlers/erb.rb +24 -86
- data/lib/action_view/template/handlers/html.rb +11 -0
- data/lib/action_view/template/handlers/raw.rb +4 -4
- data/lib/action_view/template/handlers.rb +38 -8
- data/lib/action_view/template/html.rb +19 -10
- data/lib/action_view/template/inline.rb +22 -0
- data/lib/action_view/template/raw_file.rb +28 -0
- data/lib/action_view/template/resolver.rb +217 -193
- data/lib/action_view/template/sources/file.rb +17 -0
- data/lib/action_view/template/sources.rb +13 -0
- data/lib/action_view/template/text.rb +11 -10
- data/lib/action_view/template/types.rb +18 -18
- data/lib/action_view/template.rb +146 -90
- data/lib/action_view/test_case.rb +52 -32
- data/lib/action_view/testing/resolvers.rb +46 -34
- data/lib/action_view/unbound_template.rb +31 -0
- data/lib/action_view/version.rb +3 -1
- data/lib/action_view/view_paths.rb +48 -31
- data/lib/action_view.rb +11 -8
- data/lib/assets/compiled/rails-ujs.js +746 -0
- metadata +38 -29
- data/lib/action_view/helpers/record_tag_helper.rb +0 -108
- data/lib/action_view/tasks/dependencies.rake +0 -23
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "action_view/helpers/tags/checkable"
|
2
4
|
|
3
5
|
module ActionView
|
4
6
|
module Helpers
|
@@ -16,7 +18,7 @@ module ActionView
|
|
16
18
|
options = @options.stringify_keys
|
17
19
|
options["type"] = "checkbox"
|
18
20
|
options["value"] = @checked_value
|
19
|
-
options["checked"] = "checked" if input_checked?(
|
21
|
+
options["checked"] = "checked" if input_checked?(options)
|
20
22
|
|
21
23
|
if options["multiple"]
|
22
24
|
add_default_name_and_id_for_value(@checked_value, options)
|
@@ -37,27 +39,26 @@ module ActionView
|
|
37
39
|
end
|
38
40
|
|
39
41
|
private
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
value == @checked_value
|
49
|
-
else
|
50
|
-
if value.respond_to?(:include?)
|
51
|
-
value.include?(@checked_value)
|
42
|
+
def checked?(value)
|
43
|
+
case value
|
44
|
+
when TrueClass, FalseClass
|
45
|
+
value == !!@checked_value
|
46
|
+
when NilClass
|
47
|
+
false
|
48
|
+
when String
|
49
|
+
value == @checked_value
|
52
50
|
else
|
53
|
-
value.
|
51
|
+
if value.respond_to?(:include?)
|
52
|
+
value.include?(@checked_value)
|
53
|
+
else
|
54
|
+
value.to_i == @checked_value.to_i
|
55
|
+
end
|
54
56
|
end
|
55
57
|
end
|
56
|
-
end
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
59
|
+
def hidden_field_for_checkbox(options)
|
60
|
+
@unchecked_value ? tag("input", options.slice("name", "disabled", "form").merge!("type" => "hidden", "value" => @unchecked_value)) : "".html_safe
|
61
|
+
end
|
61
62
|
end
|
62
63
|
end
|
63
64
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
4
6
|
module Checkable # :nodoc:
|
5
|
-
def input_checked?(
|
7
|
+
def input_checked?(options)
|
6
8
|
if options.has_key?("checked")
|
7
9
|
checked = options.delete "checked"
|
8
10
|
checked == true || checked == "checked"
|
9
11
|
else
|
10
|
-
checked?(value
|
12
|
+
checked?(value)
|
11
13
|
end
|
12
14
|
end
|
13
15
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "action_view/helpers/tags/collection_helpers"
|
2
4
|
|
3
5
|
module ActionView
|
4
6
|
module Helpers
|
@@ -7,50 +9,26 @@ module ActionView
|
|
7
9
|
include CollectionHelpers
|
8
10
|
|
9
11
|
class CheckBoxBuilder < Builder # :nodoc:
|
10
|
-
def check_box(extra_html_options={})
|
12
|
+
def check_box(extra_html_options = {})
|
11
13
|
html_options = extra_html_options.merge(@input_html_options)
|
14
|
+
html_options[:multiple] = true
|
15
|
+
html_options[:skip_default_ids] = false
|
12
16
|
@template_object.check_box(@object_name, @method_name, html_options, @value, nil)
|
13
17
|
end
|
14
18
|
end
|
15
19
|
|
16
20
|
def render(&block)
|
17
|
-
|
18
|
-
default_html_options[:multiple] = true
|
19
|
-
builder = instantiate_builder(CheckBoxBuilder, item, value, text, default_html_options)
|
20
|
-
|
21
|
-
if block_given?
|
22
|
-
@template_object.capture(builder, &block)
|
23
|
-
else
|
24
|
-
render_component(builder)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# Append a hidden field to make sure something will be sent back to the
|
29
|
-
# server if all check boxes are unchecked.
|
30
|
-
if @options.fetch(:include_hidden, true)
|
31
|
-
rendered_collection + hidden_field
|
32
|
-
else
|
33
|
-
rendered_collection
|
34
|
-
end
|
21
|
+
render_collection_for(CheckBoxBuilder, &block)
|
35
22
|
end
|
36
23
|
|
37
24
|
private
|
38
|
-
|
39
|
-
|
40
|
-
builder.check_box + builder.label
|
41
|
-
end
|
42
|
-
|
43
|
-
def hidden_field
|
44
|
-
hidden_name = @html_options[:name]
|
45
|
-
|
46
|
-
hidden_name ||= if @options.has_key?(:index)
|
47
|
-
"#{tag_name_with_index(@options[:index])}[]"
|
48
|
-
else
|
49
|
-
"#{tag_name}[]"
|
25
|
+
def render_component(builder)
|
26
|
+
builder.check_box + builder.label
|
50
27
|
end
|
51
28
|
|
52
|
-
|
53
|
-
|
29
|
+
def hidden_field_name
|
30
|
+
"#{super}[]"
|
31
|
+
end
|
54
32
|
end
|
55
33
|
end
|
56
34
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
@@ -17,8 +19,10 @@ module ActionView
|
|
17
19
|
@input_html_options = input_html_options
|
18
20
|
end
|
19
21
|
|
20
|
-
def label(label_html_options={}, &block)
|
22
|
+
def label(label_html_options = {}, &block)
|
21
23
|
html_options = @input_html_options.slice(:index, :namespace).merge(label_html_options)
|
24
|
+
html_options[:for] ||= @input_html_options[:id] if @input_html_options[:id]
|
25
|
+
|
22
26
|
@template_object.label(@object_name, @sanitized_attribute_name, @text, html_options, &block)
|
23
27
|
end
|
24
28
|
end
|
@@ -33,52 +37,81 @@ module ActionView
|
|
33
37
|
end
|
34
38
|
|
35
39
|
private
|
40
|
+
def instantiate_builder(builder_class, item, value, text, html_options)
|
41
|
+
builder_class.new(@template_object, @object_name, @method_name, item,
|
42
|
+
sanitize_attribute_name(value), text, value, html_options)
|
43
|
+
end
|
36
44
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
45
|
+
# Generate default options for collection helpers, such as :checked and
|
46
|
+
# :disabled.
|
47
|
+
def default_html_options_for_collection(item, value)
|
48
|
+
html_options = @html_options.dup
|
41
49
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
html_options = @html_options.dup
|
50
|
+
[:checked, :selected, :disabled, :readonly].each do |option|
|
51
|
+
current_value = @options[option]
|
52
|
+
next if current_value.nil?
|
46
53
|
|
47
|
-
|
48
|
-
|
49
|
-
|
54
|
+
accept = if current_value.respond_to?(:call)
|
55
|
+
current_value.call(item)
|
56
|
+
else
|
57
|
+
Array(current_value).map(&:to_s).include?(value.to_s)
|
58
|
+
end
|
50
59
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
60
|
+
if accept
|
61
|
+
html_options[option] = true
|
62
|
+
elsif option == :checked
|
63
|
+
html_options[option] = false
|
64
|
+
end
|
55
65
|
end
|
56
66
|
|
57
|
-
|
58
|
-
|
59
|
-
elsif option == :checked
|
60
|
-
html_options[option] = false
|
61
|
-
end
|
67
|
+
html_options[:object] = @object
|
68
|
+
html_options
|
62
69
|
end
|
63
70
|
|
64
|
-
|
65
|
-
|
66
|
-
|
71
|
+
def sanitize_attribute_name(value)
|
72
|
+
"#{sanitized_method_name}_#{sanitized_value(value)}"
|
73
|
+
end
|
67
74
|
|
68
|
-
|
69
|
-
|
70
|
-
|
75
|
+
def render_collection
|
76
|
+
@collection.map do |item|
|
77
|
+
value = value_for_collection(item, @value_method)
|
78
|
+
text = value_for_collection(item, @text_method)
|
79
|
+
default_html_options = default_html_options_for_collection(item, value)
|
80
|
+
additional_html_options = option_html_attributes(item)
|
71
81
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
text = value_for_collection(item, @text_method)
|
76
|
-
default_html_options = default_html_options_for_collection(item, value)
|
77
|
-
additional_html_options = option_html_attributes(item)
|
82
|
+
yield item, value, text, default_html_options.merge(additional_html_options)
|
83
|
+
end.join.html_safe
|
84
|
+
end
|
78
85
|
|
79
|
-
|
80
|
-
|
81
|
-
|
86
|
+
def render_collection_for(builder_class, &block)
|
87
|
+
options = @options.stringify_keys
|
88
|
+
rendered_collection = render_collection do |item, value, text, default_html_options|
|
89
|
+
builder = instantiate_builder(builder_class, item, value, text, default_html_options)
|
90
|
+
|
91
|
+
if block_given?
|
92
|
+
@template_object.capture(builder, &block)
|
93
|
+
else
|
94
|
+
render_component(builder)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Prepend a hidden field to make sure something will be sent back to the
|
99
|
+
# server if all radio buttons are unchecked.
|
100
|
+
if options.fetch("include_hidden", true)
|
101
|
+
hidden_field + rendered_collection
|
102
|
+
else
|
103
|
+
rendered_collection
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def hidden_field
|
108
|
+
hidden_name = @html_options[:name] || hidden_field_name
|
109
|
+
@template_object.hidden_field_tag(hidden_name, "", id: nil)
|
110
|
+
end
|
111
|
+
|
112
|
+
def hidden_field_name
|
113
|
+
"#{tag_name(false, @options[:index])}"
|
114
|
+
end
|
82
115
|
end
|
83
116
|
end
|
84
117
|
end
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "action_view/helpers/tags/collection_helpers"
|
2
4
|
|
3
5
|
module ActionView
|
4
6
|
module Helpers
|
@@ -7,26 +9,18 @@ module ActionView
|
|
7
9
|
include CollectionHelpers
|
8
10
|
|
9
11
|
class RadioButtonBuilder < Builder # :nodoc:
|
10
|
-
def radio_button(extra_html_options={})
|
12
|
+
def radio_button(extra_html_options = {})
|
11
13
|
html_options = extra_html_options.merge(@input_html_options)
|
14
|
+
html_options[:skip_default_ids] = false
|
12
15
|
@template_object.radio_button(@object_name, @method_name, @value, html_options)
|
13
16
|
end
|
14
17
|
end
|
15
18
|
|
16
19
|
def render(&block)
|
17
|
-
|
18
|
-
builder = instantiate_builder(RadioButtonBuilder, item, value, text, default_html_options)
|
19
|
-
|
20
|
-
if block_given?
|
21
|
-
@template_object.capture(builder, &block)
|
22
|
-
else
|
23
|
-
render_component(builder)
|
24
|
-
end
|
25
|
-
end
|
20
|
+
render_collection_for(RadioButtonBuilder, &block)
|
26
21
|
end
|
27
22
|
|
28
23
|
private
|
29
|
-
|
30
24
|
def render_component(builder)
|
31
25
|
builder.radio_button + builder.label
|
32
26
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
@@ -13,8 +15,8 @@ module ActionView
|
|
13
15
|
|
14
16
|
def render
|
15
17
|
option_tags_options = {
|
16
|
-
:
|
17
|
-
:
|
18
|
+
selected: @options.fetch(:selected) { value },
|
19
|
+
disabled: @options[:disabled]
|
18
20
|
}
|
19
21
|
|
20
22
|
select_content_tag(
|
@@ -1,19 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
4
6
|
class ColorField < TextField # :nodoc:
|
5
7
|
def render
|
6
8
|
options = @options.stringify_keys
|
7
|
-
options["value"] ||= validate_color_string(value
|
9
|
+
options["value"] ||= validate_color_string(value)
|
8
10
|
@options = options
|
9
11
|
super
|
10
12
|
end
|
11
13
|
|
12
14
|
private
|
13
|
-
|
14
15
|
def validate_color_string(string)
|
15
16
|
regex = /#[0-9a-fA-F]{6}/
|
16
|
-
if regex.match(string)
|
17
|
+
if regex.match?(string)
|
17
18
|
string.downcase
|
18
19
|
else
|
19
20
|
"#000000"
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/core_ext/time/calculations"
|
2
4
|
|
3
5
|
module ActionView
|
4
6
|
module Helpers
|
@@ -16,56 +18,55 @@ module ActionView
|
|
16
18
|
|
17
19
|
class << self
|
18
20
|
def select_type
|
19
|
-
@select_type ||=
|
21
|
+
@select_type ||= name.split("::").last.sub("Select", "").downcase
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
25
|
private
|
26
|
+
def select_type
|
27
|
+
self.class.select_type
|
28
|
+
end
|
24
29
|
|
25
|
-
|
26
|
-
|
27
|
-
|
30
|
+
def datetime_selector(options, html_options)
|
31
|
+
datetime = options.fetch(:selected) { value || default_datetime(options) }
|
32
|
+
@auto_index ||= nil
|
28
33
|
|
29
|
-
|
30
|
-
|
31
|
-
|
34
|
+
options = options.dup
|
35
|
+
options[:field_name] = @method_name
|
36
|
+
options[:include_position] = true
|
37
|
+
options[:prefix] ||= @object_name
|
38
|
+
options[:index] = @auto_index if @auto_index && !options.has_key?(:index)
|
32
39
|
|
33
|
-
|
34
|
-
|
35
|
-
options[:include_position] = true
|
36
|
-
options[:prefix] ||= @object_name
|
37
|
-
options[:index] = @auto_index if @auto_index && !options.has_key?(:index)
|
40
|
+
DateTimeSelector.new(datetime, options, html_options)
|
41
|
+
end
|
38
42
|
|
39
|
-
|
40
|
-
|
43
|
+
def default_datetime(options)
|
44
|
+
return if options[:include_blank] || options[:prompt]
|
41
45
|
|
42
|
-
|
43
|
-
|
46
|
+
case options[:default]
|
47
|
+
when nil
|
48
|
+
Time.current
|
49
|
+
when Date, Time
|
50
|
+
options[:default]
|
51
|
+
else
|
52
|
+
default = options[:default].dup
|
44
53
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
when Date, Time
|
49
|
-
options[:default]
|
50
|
-
else
|
51
|
-
default = options[:default].dup
|
54
|
+
# Rename :minute and :second to :min and :sec
|
55
|
+
default[:min] ||= default[:minute]
|
56
|
+
default[:sec] ||= default[:second]
|
52
57
|
|
53
|
-
|
54
|
-
default[:min] ||= default[:minute]
|
55
|
-
default[:sec] ||= default[:second]
|
58
|
+
time = Time.current
|
56
59
|
|
57
|
-
|
60
|
+
[:year, :month, :day, :hour, :min, :sec].each do |key|
|
61
|
+
default[key] ||= time.send(key)
|
62
|
+
end
|
58
63
|
|
59
|
-
|
60
|
-
|
64
|
+
Time.utc(
|
65
|
+
default[:year], default[:month], default[:day],
|
66
|
+
default[:hour], default[:min], default[:sec]
|
67
|
+
)
|
61
68
|
end
|
62
|
-
|
63
|
-
Time.utc(
|
64
|
-
default[:year], default[:month], default[:day],
|
65
|
-
default[:hour], default[:min], default[:sec]
|
66
|
-
)
|
67
69
|
end
|
68
|
-
end
|
69
70
|
end
|
70
71
|
end
|
71
72
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
4
6
|
class DatetimeField < TextField # :nodoc:
|
5
7
|
def render
|
6
8
|
options = @options.stringify_keys
|
7
|
-
options["value"] ||= format_date(value
|
9
|
+
options["value"] ||= format_date(value)
|
8
10
|
options["min"] = format_date(datetime_value(options["min"]))
|
9
11
|
options["max"] = format_date(datetime_value(options["max"]))
|
10
12
|
@options = options
|
@@ -12,9 +14,8 @@ module ActionView
|
|
12
14
|
end
|
13
15
|
|
14
16
|
private
|
15
|
-
|
16
17
|
def format_date(value)
|
17
|
-
|
18
|
+
raise NotImplementedError
|
18
19
|
end
|
19
20
|
|
20
21
|
def datetime_value(value)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
@@ -15,8 +17,8 @@ module ActionView
|
|
15
17
|
|
16
18
|
def render
|
17
19
|
option_tags_options = {
|
18
|
-
:
|
19
|
-
:
|
20
|
+
selected: @options.fetch(:selected) { value },
|
21
|
+
disabled: @options[:disabled]
|
20
22
|
}
|
21
23
|
|
22
24
|
select_content_tag(
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
@@ -17,7 +19,7 @@ module ActionView
|
|
17
19
|
method_and_value = @tag_value.present? ? "#{@method_name}.#{@tag_value}" : @method_name
|
18
20
|
|
19
21
|
content ||= Translator
|
20
|
-
.new(object, @object_name, method_and_value, "helpers.label")
|
22
|
+
.new(object, @object_name, method_and_value, scope: "helpers.label")
|
21
23
|
.translate
|
22
24
|
content ||= @method_name.humanize
|
23
25
|
|
@@ -69,7 +71,6 @@ module ActionView
|
|
69
71
|
end
|
70
72
|
|
71
73
|
private
|
72
|
-
|
73
74
|
def render_component(builder)
|
74
75
|
builder.translation
|
75
76
|
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
4
6
|
class PasswordField < TextField # :nodoc:
|
5
7
|
def render
|
6
|
-
@options = {:
|
8
|
+
@options = { value: nil }.merge!(@options)
|
7
9
|
super
|
8
10
|
end
|
9
11
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView
|
2
4
|
module Helpers
|
3
5
|
module Tags # :nodoc:
|
@@ -10,7 +12,7 @@ module ActionView
|
|
10
12
|
method_and_value = tag_value.is_a?(TrueClass) ? @method_name : "#{@method_name}.#{tag_value}"
|
11
13
|
|
12
14
|
placeholder ||= Tags::Translator
|
13
|
-
.new(object, @object_name, method_and_value, "helpers.placeholder")
|
15
|
+
.new(object, @object_name, method_and_value, scope: "helpers.placeholder")
|
14
16
|
.translate
|
15
17
|
placeholder ||= @method_name.humanize
|
16
18
|
@options[:placeholder] = placeholder
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "action_view/helpers/tags/checkable"
|
2
4
|
|
3
5
|
module ActionView
|
4
6
|
module Helpers
|
@@ -15,16 +17,15 @@ module ActionView
|
|
15
17
|
options = @options.stringify_keys
|
16
18
|
options["type"] = "radio"
|
17
19
|
options["value"] = @tag_value
|
18
|
-
options["checked"] = "checked" if input_checked?(
|
20
|
+
options["checked"] = "checked" if input_checked?(options)
|
19
21
|
add_default_name_and_id_for_value(@tag_value, options)
|
20
22
|
tag("input", options)
|
21
23
|
end
|
22
24
|
|
23
25
|
private
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
end
|
26
|
+
def checked?(value)
|
27
|
+
value.to_s == @tag_value.to_s
|
28
|
+
end
|
28
29
|
end
|
29
30
|
end
|
30
31
|
end
|