actionview 4.2.11.3 → 5.2.7.1
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 +115 -245
- data/MIT-LICENSE +1 -1
- data/README.rdoc +5 -6
- data/lib/action_view/base.rb +38 -28
- data/lib/action_view/buffers.rb +3 -1
- data/lib/action_view/context.rb +3 -3
- data/lib/action_view/dependency_tracker.rb +54 -20
- data/lib/action_view/digestor.rb +94 -83
- data/lib/action_view/flows.rb +11 -11
- data/lib/action_view/gem_version.rb +5 -3
- data/lib/action_view/helpers/active_model_helper.rb +17 -11
- data/lib/action_view/helpers/asset_tag_helper.rb +244 -62
- data/lib/action_view/helpers/asset_url_helper.rb +170 -67
- data/lib/action_view/helpers/atom_feed_helper.rb +19 -17
- data/lib/action_view/helpers/cache_helper.rb +105 -42
- data/lib/action_view/helpers/capture_helper.rb +16 -13
- data/lib/action_view/helpers/controller_helper.rb +15 -4
- data/lib/action_view/helpers/csp_helper.rb +24 -0
- data/lib/action_view/helpers/csrf_helper.rb +7 -5
- data/lib/action_view/helpers/date_helper.rb +170 -112
- data/lib/action_view/helpers/debug_helper.rb +7 -6
- data/lib/action_view/helpers/form_helper.rb +521 -127
- data/lib/action_view/helpers/form_options_helper.rb +109 -63
- data/lib/action_view/helpers/form_tag_helper.rb +110 -67
- data/lib/action_view/helpers/javascript_helper.rb +27 -12
- data/lib/action_view/helpers/number_helper.rb +77 -58
- data/lib/action_view/helpers/output_safety_helper.rb +36 -4
- data/lib/action_view/helpers/record_tag_helper.rb +14 -99
- data/lib/action_view/helpers/rendering_helper.rb +6 -5
- data/lib/action_view/helpers/sanitize_helper.rb +20 -15
- data/lib/action_view/helpers/tag_helper.rb +229 -73
- data/lib/action_view/helpers/tags/base.rb +134 -97
- data/lib/action_view/helpers/tags/check_box.rb +20 -18
- data/lib/action_view/helpers/tags/checkable.rb +4 -2
- data/lib/action_view/helpers/tags/collection_check_boxes.rb +12 -33
- data/lib/action_view/helpers/tags/collection_helpers.rb +70 -36
- data/lib/action_view/helpers/tags/collection_radio_buttons.rb +6 -11
- data/lib/action_view/helpers/tags/collection_select.rb +4 -2
- data/lib/action_view/helpers/tags/color_field.rb +3 -1
- data/lib/action_view/helpers/tags/date_field.rb +2 -0
- data/lib/action_view/helpers/tags/date_select.rb +38 -36
- data/lib/action_view/helpers/tags/datetime_field.rb +4 -2
- data/lib/action_view/helpers/tags/datetime_local_field.rb +2 -0
- 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 -1
- data/lib/action_view/helpers/tags/month_field.rb +2 -0
- 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 -5
- 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 -9
- 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 -7
- data/lib/action_view/helpers/tags/time_field.rb +2 -0
- 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 +17 -13
- data/lib/action_view/helpers/tags/url_field.rb +2 -0
- data/lib/action_view/helpers/tags/week_field.rb +2 -0
- data/lib/action_view/helpers/tags.rb +3 -1
- data/lib/action_view/helpers/text_helper.rb +55 -36
- data/lib/action_view/helpers/translation_helper.rb +74 -32
- data/lib/action_view/helpers/url_helper.rb +159 -104
- data/lib/action_view/helpers.rb +5 -1
- data/lib/action_view/layouts.rb +65 -58
- data/lib/action_view/log_subscriber.rb +60 -8
- data/lib/action_view/lookup_context.rb +80 -65
- data/lib/action_view/model_naming.rb +3 -1
- data/lib/action_view/path_set.rb +30 -19
- data/lib/action_view/railtie.rb +39 -6
- data/lib/action_view/record_identifier.rb +53 -25
- data/lib/action_view/renderer/abstract_renderer.rb +21 -15
- data/lib/action_view/renderer/partial_renderer/collection_caching.rb +57 -0
- data/lib/action_view/renderer/partial_renderer.rb +218 -214
- data/lib/action_view/renderer/renderer.rb +8 -6
- data/lib/action_view/renderer/streaming_template_renderer.rb +50 -48
- data/lib/action_view/renderer/template_renderer.rb +67 -66
- data/lib/action_view/rendering.rb +19 -14
- data/lib/action_view/routing_url_for.rb +27 -17
- data/lib/action_view/tasks/cache_digests.rake +25 -0
- data/lib/action_view/template/error.rb +16 -16
- data/lib/action_view/template/handlers/builder.rb +10 -11
- data/lib/action_view/template/handlers/erb/erubi.rb +83 -0
- data/lib/action_view/template/handlers/erb.rb +9 -80
- data/lib/action_view/template/handlers/html.rb +11 -0
- data/lib/action_view/template/handlers/raw.rb +3 -3
- data/lib/action_view/template/handlers.rb +11 -7
- data/lib/action_view/template/html.rb +5 -5
- data/lib/action_view/template/resolver.rb +140 -115
- data/lib/action_view/template/text.rb +8 -9
- data/lib/action_view/template/types.rb +18 -18
- data/lib/action_view/template.rb +54 -33
- data/lib/action_view/test_case.rb +50 -29
- data/lib/action_view/testing/resolvers.rb +31 -31
- data/lib/action_view/version.rb +3 -1
- data/lib/action_view/view_paths.rb +28 -34
- data/lib/action_view.rb +8 -7
- data/lib/assets/compiled/rails-ujs.js +720 -0
- metadata +28 -27
- data/lib/action_view/tasks/dependencies.rake +0 -23
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "erubi"
|
4
|
+
|
5
|
+
module ActionView
|
6
|
+
class Template
|
7
|
+
module Handlers
|
8
|
+
class ERB
|
9
|
+
class Erubi < ::Erubi::Engine
|
10
|
+
# :nodoc: all
|
11
|
+
def initialize(input, properties = {})
|
12
|
+
@newline_pending = 0
|
13
|
+
|
14
|
+
# Dup properties so that we don't modify argument
|
15
|
+
properties = Hash[properties]
|
16
|
+
properties[:preamble] = "@output_buffer = output_buffer || ActionView::OutputBuffer.new;"
|
17
|
+
properties[:postamble] = "@output_buffer.to_s"
|
18
|
+
properties[:bufvar] = "@output_buffer"
|
19
|
+
properties[:escapefunc] = ""
|
20
|
+
|
21
|
+
super
|
22
|
+
end
|
23
|
+
|
24
|
+
def evaluate(action_view_erb_handler_context)
|
25
|
+
pr = eval("proc { #{@src} }", binding, @filename || "(erubi)")
|
26
|
+
action_view_erb_handler_context.instance_eval(&pr)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def add_text(text)
|
31
|
+
return if text.empty?
|
32
|
+
|
33
|
+
if text == "\n"
|
34
|
+
@newline_pending += 1
|
35
|
+
else
|
36
|
+
src << "@output_buffer.safe_append='"
|
37
|
+
src << "\n" * @newline_pending if @newline_pending > 0
|
38
|
+
src << text.gsub(/['\\]/, '\\\\\&')
|
39
|
+
src << "'.freeze;"
|
40
|
+
|
41
|
+
@newline_pending = 0
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
BLOCK_EXPR = /\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
46
|
+
|
47
|
+
def add_expression(indicator, code)
|
48
|
+
flush_newline_if_pending(src)
|
49
|
+
|
50
|
+
if (indicator == "==") || @escape
|
51
|
+
src << "@output_buffer.safe_expr_append="
|
52
|
+
else
|
53
|
+
src << "@output_buffer.append="
|
54
|
+
end
|
55
|
+
|
56
|
+
if BLOCK_EXPR.match?(code)
|
57
|
+
src << " " << code
|
58
|
+
else
|
59
|
+
src << "(" << code << ");"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_code(code)
|
64
|
+
flush_newline_if_pending(src)
|
65
|
+
super
|
66
|
+
end
|
67
|
+
|
68
|
+
def add_postamble(_)
|
69
|
+
flush_newline_if_pending(src)
|
70
|
+
super
|
71
|
+
end
|
72
|
+
|
73
|
+
def flush_newline_if_pending(src)
|
74
|
+
if @newline_pending > 0
|
75
|
+
src << "@output_buffer.safe_append='#{"\n" * @newline_pending}'.freeze;"
|
76
|
+
@newline_pending = 0
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -1,91 +1,20 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActionView
|
4
4
|
class Template
|
5
5
|
module Handlers
|
6
|
-
class Erubis < ::Erubis::Eruby
|
7
|
-
def add_preamble(src)
|
8
|
-
@newline_pending = 0
|
9
|
-
src << "@output_buffer = output_buffer || ActionView::OutputBuffer.new;"
|
10
|
-
end
|
11
|
-
|
12
|
-
def add_text(src, text)
|
13
|
-
return if text.empty?
|
14
|
-
|
15
|
-
if text == "\n"
|
16
|
-
@newline_pending += 1
|
17
|
-
else
|
18
|
-
src << "@output_buffer.safe_append='"
|
19
|
-
src << "\n" * @newline_pending if @newline_pending > 0
|
20
|
-
src << escape_text(text)
|
21
|
-
src << "'.freeze;"
|
22
|
-
|
23
|
-
@newline_pending = 0
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
# Erubis toggles <%= and <%== behavior when escaping is enabled.
|
28
|
-
# We override to always treat <%== as escaped.
|
29
|
-
def add_expr(src, code, indicator)
|
30
|
-
case indicator
|
31
|
-
when '=='
|
32
|
-
add_expr_escaped(src, code)
|
33
|
-
else
|
34
|
-
super
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
BLOCK_EXPR = /\s*((\s+|\))do|\{)(\s*\|[^|]*\|)?\s*\Z/
|
39
|
-
|
40
|
-
def add_expr_literal(src, code)
|
41
|
-
flush_newline_if_pending(src)
|
42
|
-
if code =~ BLOCK_EXPR
|
43
|
-
src << '@output_buffer.append= ' << code
|
44
|
-
else
|
45
|
-
src << '@output_buffer.append=(' << code << ');'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def add_expr_escaped(src, code)
|
50
|
-
flush_newline_if_pending(src)
|
51
|
-
if code =~ BLOCK_EXPR
|
52
|
-
src << "@output_buffer.safe_expr_append= " << code
|
53
|
-
else
|
54
|
-
src << "@output_buffer.safe_expr_append=(" << code << ");"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def add_stmt(src, code)
|
59
|
-
flush_newline_if_pending(src)
|
60
|
-
super
|
61
|
-
end
|
62
|
-
|
63
|
-
def add_postamble(src)
|
64
|
-
flush_newline_if_pending(src)
|
65
|
-
src << '@output_buffer.to_s'
|
66
|
-
end
|
67
|
-
|
68
|
-
def flush_newline_if_pending(src)
|
69
|
-
if @newline_pending > 0
|
70
|
-
src << "@output_buffer.safe_append='#{"\n" * @newline_pending}'.freeze;"
|
71
|
-
@newline_pending = 0
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
6
|
class ERB
|
7
|
+
autoload :Erubi, "action_view/template/handlers/erb/erubi"
|
8
|
+
|
77
9
|
# Specify trim mode for the ERB compiler. Defaults to '-'.
|
78
10
|
# See ERB documentation for suitable values.
|
79
|
-
class_attribute :erb_trim_mode
|
80
|
-
self.erb_trim_mode = '-'
|
11
|
+
class_attribute :erb_trim_mode, default: "-"
|
81
12
|
|
82
13
|
# Default implementation used.
|
83
|
-
class_attribute :erb_implementation
|
84
|
-
self.erb_implementation = Erubis
|
14
|
+
class_attribute :erb_implementation, default: Erubi
|
85
15
|
|
86
16
|
# Do not escape templates of these mime types.
|
87
|
-
class_attribute :escape_whitelist
|
88
|
-
self.escape_whitelist = ["text/plain"]
|
17
|
+
class_attribute :escape_whitelist, default: ["text/plain"]
|
89
18
|
|
90
19
|
ENCODING_TAG = Regexp.new("\\A(<%#{ENCODING_FLAG}-?%>)[ \\t]*")
|
91
20
|
|
@@ -108,7 +37,7 @@ module ActionView
|
|
108
37
|
# expression
|
109
38
|
template_source = template.source.dup.force_encoding(Encoding::ASCII_8BIT)
|
110
39
|
|
111
|
-
erb = template_source.gsub(ENCODING_TAG,
|
40
|
+
erb = template_source.gsub(ENCODING_TAG, "")
|
112
41
|
encoding = $2
|
113
42
|
|
114
43
|
erb.force_encoding valid_encoding(template.source.dup, encoding)
|
@@ -118,8 +47,8 @@ module ActionView
|
|
118
47
|
|
119
48
|
self.class.erb_implementation.new(
|
120
49
|
erb,
|
121
|
-
:
|
122
|
-
:
|
50
|
+
escape: (self.class.escape_whitelist.include? template.type),
|
51
|
+
trim: (self.class.erb_trim_mode == "-")
|
123
52
|
).src
|
124
53
|
end
|
125
54
|
|
@@ -1,15 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView #:nodoc:
|
2
4
|
# = Action View Template Handlers
|
3
|
-
class Template
|
5
|
+
class Template #:nodoc:
|
4
6
|
module Handlers #:nodoc:
|
5
|
-
autoload :
|
6
|
-
autoload :
|
7
|
-
autoload :
|
7
|
+
autoload :Raw, "action_view/template/handlers/raw"
|
8
|
+
autoload :ERB, "action_view/template/handlers/erb"
|
9
|
+
autoload :Html, "action_view/template/handlers/html"
|
10
|
+
autoload :Builder, "action_view/template/handlers/builder"
|
8
11
|
|
9
12
|
def self.extended(base)
|
10
|
-
base.register_default_template_handler :
|
13
|
+
base.register_default_template_handler :raw, Raw.new
|
14
|
+
base.register_template_handler :erb, ERB.new
|
15
|
+
base.register_template_handler :html, Html.new
|
11
16
|
base.register_template_handler :builder, Builder.new
|
12
|
-
base.register_template_handler :raw, Raw.new
|
13
17
|
base.register_template_handler :ruby, :source.to_proc
|
14
18
|
end
|
15
19
|
|
@@ -42,7 +46,7 @@ module ActionView #:nodoc:
|
|
42
46
|
end
|
43
47
|
|
44
48
|
def template_handler_extensions
|
45
|
-
@@template_handlers.keys.map
|
49
|
+
@@template_handlers.keys.map(&:to_s).sort
|
46
50
|
end
|
47
51
|
|
48
52
|
def registered_template_handler(extension)
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module ActionView #:nodoc:
|
2
4
|
# = Action View HTML Template
|
3
|
-
class Template
|
5
|
+
class Template #:nodoc:
|
4
6
|
class HTML #:nodoc:
|
5
7
|
attr_accessor :type
|
6
8
|
|
@@ -11,12 +13,10 @@ module ActionView #:nodoc:
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def identifier
|
14
|
-
|
16
|
+
"html template"
|
15
17
|
end
|
16
18
|
|
17
|
-
|
18
|
-
'html template'
|
19
|
-
end
|
19
|
+
alias_method :inspect, :identifier
|
20
20
|
|
21
21
|
def to_str
|
22
22
|
ERB::Util.h(@string)
|