phlex-rails 0.5.0 → 0.5.1
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/lib/phlex/rails/form.rb +3 -3
- data/lib/phlex/rails/helpers.rb +14 -14
- data/lib/phlex/rails/html/append_method_added_warning.rb +17 -0
- data/lib/phlex/rails/html/class_methods.rb +13 -0
- data/lib/phlex/rails/html/overrides.rb +112 -0
- data/lib/phlex/rails/version.rb +1 -1
- data/lib/phlex/rails.rb +4 -11
- metadata +5 -3
- data/lib/phlex/rails/renderable.rb +0 -106
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 407ff3d219b8d6ec6bbe429422b18125dde3f9cfb73ec756bad2ab4f08953083
|
4
|
+
data.tar.gz: b0e4f337a9626bf67a5e4dfd4172648cf69c264008fde9a5e3c1b456b98d7e72
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4e29f9f569bc0259d037d7b8a6e3ee8fb267d8210b2faf1e0a952d25275419e27c9621b615aad8be7d3f5531872848a63e46fdeb1a3ec8506e9babc5b27b1af
|
7
|
+
data.tar.gz: 4440057f8e253c7f0f78dbd41e4f92c6a8e4faeeac4cb339fbc26d09bc7bafa72302d2f2bc066b8879579b4dc3c053ba07f301622a8801d9a635a216f0ef2ac3
|
data/lib/phlex/rails/form.rb
CHANGED
@@ -29,7 +29,7 @@ module Phlex
|
|
29
29
|
input(
|
30
30
|
name: "authenticity_token",
|
31
31
|
type: "hidden",
|
32
|
-
value:
|
32
|
+
value: helpers.form_authenticity_token
|
33
33
|
)
|
34
34
|
end
|
35
35
|
|
@@ -42,11 +42,11 @@ module Phlex
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def url
|
45
|
-
|
45
|
+
helpers.url_for(@model)
|
46
46
|
end
|
47
47
|
|
48
48
|
def field_name(*field)
|
49
|
-
|
49
|
+
helpers.field_name(ActiveModel::Naming.param_key(@model.class), *field)
|
50
50
|
end
|
51
51
|
|
52
52
|
input_field :url_field, type: "url"
|
data/lib/phlex/rails/helpers.rb
CHANGED
@@ -5,7 +5,7 @@ module Phlex
|
|
5
5
|
module Helpers
|
6
6
|
module CSPMetaTag
|
7
7
|
def csp_meta_tag(...)
|
8
|
-
if (output =
|
8
|
+
if (output = helpers.csp_meta_tag(...))
|
9
9
|
@_target << output
|
10
10
|
end
|
11
11
|
end
|
@@ -13,7 +13,7 @@ module Phlex
|
|
13
13
|
|
14
14
|
module CSRFMetaTags
|
15
15
|
def csrf_meta_tags
|
16
|
-
if (output =
|
16
|
+
if (output = helpers.csrf_meta_tags)
|
17
17
|
@_target << output
|
18
18
|
end
|
19
19
|
end
|
@@ -21,7 +21,7 @@ module Phlex
|
|
21
21
|
|
22
22
|
module ActionCableMetaTag
|
23
23
|
def action_cable_meta_tag
|
24
|
-
if (output =
|
24
|
+
if (output = helpers.action_cable_meta_tag)
|
25
25
|
@_target << output
|
26
26
|
end
|
27
27
|
end
|
@@ -67,7 +67,7 @@ module Phlex
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def form_with(*args, **kwargs, &block)
|
70
|
-
@_target <<
|
70
|
+
@_target << helpers.form_with(*args, **kwargs) { |form|
|
71
71
|
capture do
|
72
72
|
yield(
|
73
73
|
BufferedFormWith.new(form, buffer: @_target)
|
@@ -79,7 +79,7 @@ module Phlex
|
|
79
79
|
|
80
80
|
module StylesheetLinkTag
|
81
81
|
def stylesheet_link_tag(...)
|
82
|
-
if (output =
|
82
|
+
if (output = helpers.stylesheet_link_tag(...))
|
83
83
|
@_target << output
|
84
84
|
end
|
85
85
|
end
|
@@ -87,7 +87,7 @@ module Phlex
|
|
87
87
|
|
88
88
|
module FaviconLinkTag
|
89
89
|
def favicon_link_tag(...)
|
90
|
-
if (output =
|
90
|
+
if (output = helpers.favicon_link_tag(...))
|
91
91
|
@_target << output
|
92
92
|
end
|
93
93
|
end
|
@@ -95,7 +95,7 @@ module Phlex
|
|
95
95
|
|
96
96
|
module ImageTag
|
97
97
|
def image_tag(...)
|
98
|
-
if (output =
|
98
|
+
if (output = helpers.image_tag(...))
|
99
99
|
@_target << output
|
100
100
|
end
|
101
101
|
end
|
@@ -103,7 +103,7 @@ module Phlex
|
|
103
103
|
|
104
104
|
module AudioTag
|
105
105
|
def audio_tag(...)
|
106
|
-
if (output =
|
106
|
+
if (output = helpers.audio_tag(...))
|
107
107
|
@_target << output
|
108
108
|
end
|
109
109
|
end
|
@@ -111,7 +111,7 @@ module Phlex
|
|
111
111
|
|
112
112
|
module VideoTag
|
113
113
|
def video_tag(...)
|
114
|
-
if (output =
|
114
|
+
if (output = helpers.video_tag(...))
|
115
115
|
@_target << output
|
116
116
|
end
|
117
117
|
end
|
@@ -119,7 +119,7 @@ module Phlex
|
|
119
119
|
|
120
120
|
module PreloadLinkTag
|
121
121
|
def preload_link_tag(...)
|
122
|
-
if (output =
|
122
|
+
if (output = helpers.preload_link_tag(...))
|
123
123
|
@_target << output
|
124
124
|
end
|
125
125
|
end
|
@@ -127,7 +127,7 @@ module Phlex
|
|
127
127
|
|
128
128
|
module JavaScriptIncludeTag
|
129
129
|
def javascript_include_tag(...)
|
130
|
-
if (output =
|
130
|
+
if (output = helpers.javascript_include_tag(...))
|
131
131
|
@_target << output
|
132
132
|
end
|
133
133
|
end
|
@@ -135,7 +135,7 @@ module Phlex
|
|
135
135
|
|
136
136
|
module JavaScriptImportmapTags
|
137
137
|
def javascript_importmap_tags(...)
|
138
|
-
if (output =
|
138
|
+
if (output = helpers.javascript_importmap_tags(...))
|
139
139
|
@_target << output
|
140
140
|
end
|
141
141
|
end
|
@@ -143,7 +143,7 @@ module Phlex
|
|
143
143
|
|
144
144
|
module JavaScriptImportModuleTag
|
145
145
|
def javascript_import_module_tag(...)
|
146
|
-
if (output =
|
146
|
+
if (output = helpers.javascript_import_module_tag(...))
|
147
147
|
@_target << output
|
148
148
|
end
|
149
149
|
end
|
@@ -151,7 +151,7 @@ module Phlex
|
|
151
151
|
|
152
152
|
module ContentFor
|
153
153
|
def content_for(slot, &block)
|
154
|
-
|
154
|
+
helpers.content_for(slot, capture(&block))
|
155
155
|
end
|
156
156
|
end
|
157
157
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlex
|
4
|
+
module Rails
|
5
|
+
module HTML
|
6
|
+
module AppendMethodAddedWarning
|
7
|
+
def method_added(name)
|
8
|
+
if name == :append || name == :safe_append
|
9
|
+
raise Phlex::NameError, "You shouldn't redefine the #{name} method as it's required for safe HTML output."
|
10
|
+
end
|
11
|
+
|
12
|
+
super
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Phlex
|
4
|
+
module Rails
|
5
|
+
module HTML
|
6
|
+
module Overrides
|
7
|
+
def helpers
|
8
|
+
if defined?(ViewComponent::Base) && @_view_context.is_a?(ViewComponent::Base)
|
9
|
+
@_view_context.helpers
|
10
|
+
else
|
11
|
+
@_view_context
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def render(renderable, *args, **kwargs, &block)
|
16
|
+
return super if renderable.is_a?(Phlex::HTML)
|
17
|
+
return super if renderable.is_a?(Class) && renderable < Phlex::HTML
|
18
|
+
|
19
|
+
@_target << @_view_context.render(renderable, *args, **kwargs, &block)
|
20
|
+
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
|
24
|
+
def render_in(view_context, &block)
|
25
|
+
if block_given?
|
26
|
+
call(view_context: view_context) do |*args|
|
27
|
+
view_context.with_output_buffer(self) do
|
28
|
+
original_length = @_target.length
|
29
|
+
|
30
|
+
if args.length == 1 && Phlex::HTML === args[0]
|
31
|
+
output = yield(
|
32
|
+
args[0].unbuffered
|
33
|
+
)
|
34
|
+
else
|
35
|
+
output = yield(*args)
|
36
|
+
end
|
37
|
+
|
38
|
+
unchanged = (original_length == @_target.length)
|
39
|
+
|
40
|
+
if unchanged
|
41
|
+
if output.is_a?(ActiveSupport::SafeBuffer)
|
42
|
+
unsafe_raw(output)
|
43
|
+
else
|
44
|
+
text(output)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
nil
|
50
|
+
end.html_safe
|
51
|
+
else
|
52
|
+
call(view_context: view_context).html_safe
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def safe_append=(value)
|
57
|
+
return unless value
|
58
|
+
|
59
|
+
@_target << case value
|
60
|
+
when String then value
|
61
|
+
when Symbol then value.name
|
62
|
+
else value.to_s
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def append=(value)
|
67
|
+
return unless value
|
68
|
+
|
69
|
+
if value.html_safe?
|
70
|
+
self.safe_append = value
|
71
|
+
else
|
72
|
+
@_target << case value
|
73
|
+
when String then ERB::Util.html_escape(value)
|
74
|
+
when Symbol then ERB::Util.html_escape(value.name)
|
75
|
+
else ERB::Util.html_escape(value.to_s)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def capture
|
81
|
+
super&.html_safe
|
82
|
+
end
|
83
|
+
|
84
|
+
# Trick ViewComponent into thinking we're a ViewComponent to fix rendering output
|
85
|
+
def set_original_view_context(view_context)
|
86
|
+
end
|
87
|
+
|
88
|
+
private def yield_content(&block)
|
89
|
+
return unless block
|
90
|
+
|
91
|
+
case block.binding.receiver
|
92
|
+
when Phlex::HTML
|
93
|
+
super
|
94
|
+
else
|
95
|
+
@_view_context.with_output_buffer(self) { super }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
private def yield_content_with_args(*args, &block)
|
100
|
+
return unless block
|
101
|
+
|
102
|
+
case block.binding.receiver
|
103
|
+
when Phlex::HTML
|
104
|
+
super
|
105
|
+
else
|
106
|
+
@_view_context.with_output_buffer(self) { super }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/lib/phlex/rails/version.rb
CHANGED
data/lib/phlex/rails.rb
CHANGED
@@ -7,19 +7,12 @@ module Phlex::Rails
|
|
7
7
|
Loader = Zeitwerk::Loader.new.tap do |loader|
|
8
8
|
loader.push_dir("#{__dir__}/rails", namespace: Phlex::Rails)
|
9
9
|
loader.inflector = Zeitwerk::GemInflector.new(__FILE__)
|
10
|
+
loader.inflector.inflect("html" => "HTML")
|
10
11
|
loader.setup
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
-
def method_added(name)
|
15
|
-
if name == :append || name == :safe_append
|
16
|
-
raise Phlex::NameError, "You shouldn't redefine the #{name} method as it's required for safe HTML output."
|
17
|
-
end
|
14
|
+
Phlex::HTML.prepend(Phlex::Rails::HTML::Overrides)
|
18
15
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
Phlex::HTML.prepend(Phlex::Rails::Renderable)
|
24
|
-
Phlex::HTML.extend(Phlex::Rails::AppendMethodAddedWarning)
|
16
|
+
Phlex::HTML.extend(Phlex::Rails::HTML::ClassMethods)
|
17
|
+
Phlex::HTML.extend(Phlex::Rails::HTML::AppendMethodAddedWarning)
|
25
18
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: phlex-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Drapper
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-01
|
11
|
+
date: 2023-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: phlex
|
@@ -104,8 +104,10 @@ files:
|
|
104
104
|
- lib/phlex/rails/engine.rb
|
105
105
|
- lib/phlex/rails/form.rb
|
106
106
|
- lib/phlex/rails/helpers.rb
|
107
|
+
- lib/phlex/rails/html/append_method_added_warning.rb
|
108
|
+
- lib/phlex/rails/html/class_methods.rb
|
109
|
+
- lib/phlex/rails/html/overrides.rb
|
107
110
|
- lib/phlex/rails/layout.rb
|
108
|
-
- lib/phlex/rails/renderable.rb
|
109
111
|
- lib/phlex/rails/version.rb
|
110
112
|
- lib/phlex/testing/rails/view_helper.rb
|
111
113
|
- lib/tasks/phlex_tasks.rake
|
@@ -1,106 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Phlex
|
4
|
-
module Rails
|
5
|
-
module Renderable
|
6
|
-
def helpers
|
7
|
-
@_view_context
|
8
|
-
end
|
9
|
-
|
10
|
-
def render(renderable, *args, **kwargs, &block)
|
11
|
-
return super if renderable.is_a?(Phlex::HTML)
|
12
|
-
return super if renderable.is_a?(Class) && renderable < Phlex::HTML
|
13
|
-
|
14
|
-
@_target << @_view_context.render(renderable, *args, **kwargs, &block)
|
15
|
-
|
16
|
-
nil
|
17
|
-
end
|
18
|
-
|
19
|
-
def render_in(view_context, &block)
|
20
|
-
if block_given?
|
21
|
-
call(view_context: view_context) do |*args|
|
22
|
-
view_context.with_output_buffer(self) do
|
23
|
-
original_length = @_target.length
|
24
|
-
|
25
|
-
if args.length == 1 && Phlex::HTML === args[0]
|
26
|
-
output = yield(
|
27
|
-
args[0].unbuffered
|
28
|
-
)
|
29
|
-
else
|
30
|
-
output = yield(*args)
|
31
|
-
end
|
32
|
-
|
33
|
-
unchanged = (original_length == @_target.length)
|
34
|
-
|
35
|
-
if unchanged
|
36
|
-
if output.is_a?(ActiveSupport::SafeBuffer)
|
37
|
-
unsafe_raw(output)
|
38
|
-
else
|
39
|
-
text(output)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
nil
|
45
|
-
end.html_safe
|
46
|
-
else
|
47
|
-
call(view_context: view_context).html_safe
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def safe_append=(value)
|
52
|
-
return unless value
|
53
|
-
|
54
|
-
@_target << case value
|
55
|
-
when String then value
|
56
|
-
when Symbol then value.name
|
57
|
-
else value.to_s
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def append=(value)
|
62
|
-
return unless value
|
63
|
-
|
64
|
-
if value.html_safe?
|
65
|
-
self.safe_append = value
|
66
|
-
else
|
67
|
-
@_target << case value
|
68
|
-
when String then ERB::Util.html_escape(value)
|
69
|
-
when Symbol then ERB::Util.html_escape(value.name)
|
70
|
-
else ERB::Util.html_escape(value.to_s)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def capture
|
76
|
-
super&.html_safe
|
77
|
-
end
|
78
|
-
|
79
|
-
# Trick ViewComponent into thinking we're a ViewComponent to fix rendering output
|
80
|
-
def set_original_view_context(view_context)
|
81
|
-
end
|
82
|
-
|
83
|
-
private def yield_content(&block)
|
84
|
-
return unless block
|
85
|
-
|
86
|
-
case block.binding.receiver
|
87
|
-
when Phlex::HTML
|
88
|
-
super
|
89
|
-
else
|
90
|
-
@_view_context.with_output_buffer(self) { super }
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
private def yield_content_with_args(*args, &block)
|
95
|
-
return unless block
|
96
|
-
|
97
|
-
case block.binding.receiver
|
98
|
-
when Phlex::HTML
|
99
|
-
super
|
100
|
-
else
|
101
|
-
@_view_context.with_output_buffer(self) { super }
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|