view_component 2.49.1 → 3.23.2
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/LICENSE.txt +1 -1
- data/app/assets/vendor/prism.css +3 -195
- data/app/assets/vendor/prism.min.js +11 -11
- data/app/controllers/concerns/view_component/preview_actions.rb +108 -0
- data/app/controllers/view_components_controller.rb +1 -87
- data/app/controllers/view_components_system_test_controller.rb +30 -0
- data/app/helpers/preview_helper.rb +30 -12
- data/app/views/view_components/_preview_source.html.erb +3 -3
- data/app/views/view_components/preview.html.erb +2 -2
- data/docs/CHANGELOG.md +1653 -24
- data/lib/rails/generators/abstract_generator.rb +16 -10
- data/lib/rails/generators/component/component_generator.rb +8 -4
- data/lib/rails/generators/component/templates/component.rb.tt +3 -2
- data/lib/rails/generators/erb/component_generator.rb +1 -1
- data/lib/rails/generators/locale/component_generator.rb +4 -4
- data/lib/rails/generators/preview/component_generator.rb +17 -3
- data/lib/rails/generators/preview/templates/component_preview.rb.tt +5 -1
- data/lib/rails/generators/rspec/component_generator.rb +15 -3
- data/lib/rails/generators/rspec/templates/component_spec.rb.tt +3 -1
- data/lib/rails/generators/stimulus/component_generator.rb +8 -3
- data/lib/rails/generators/stimulus/templates/component_controller.ts.tt +9 -0
- data/lib/rails/generators/test_unit/templates/component_test.rb.tt +3 -1
- data/lib/view_component/base.rb +352 -196
- data/lib/view_component/capture_compatibility.rb +44 -0
- data/lib/view_component/collection.rb +28 -9
- data/lib/view_component/compiler.rb +162 -193
- data/lib/view_component/config.rb +225 -0
- data/lib/view_component/configurable.rb +17 -0
- data/lib/view_component/deprecation.rb +8 -0
- data/lib/view_component/engine.rb +74 -47
- data/lib/view_component/errors.rb +240 -0
- data/lib/view_component/inline_template.rb +55 -0
- data/lib/view_component/instrumentation.rb +10 -2
- data/lib/view_component/preview.rb +21 -19
- data/lib/view_component/rails/tasks/view_component.rake +11 -2
- data/lib/view_component/render_component_helper.rb +1 -0
- data/lib/view_component/render_component_to_string_helper.rb +1 -1
- data/lib/view_component/render_to_string_monkey_patch.rb +1 -1
- data/lib/view_component/rendering_component_helper.rb +1 -1
- data/lib/view_component/rendering_monkey_patch.rb +1 -1
- data/lib/view_component/slot.rb +119 -1
- data/lib/view_component/slotable.rb +393 -96
- data/lib/view_component/slotable_default.rb +20 -0
- data/lib/view_component/system_test_case.rb +13 -0
- data/lib/view_component/system_test_helpers.rb +27 -0
- data/lib/view_component/template.rb +134 -0
- data/lib/view_component/test_helpers.rb +208 -47
- data/lib/view_component/translatable.rb +51 -33
- data/lib/view_component/use_helpers.rb +42 -0
- data/lib/view_component/version.rb +5 -4
- data/lib/view_component/with_content_helper.rb +3 -8
- data/lib/view_component.rb +7 -12
- metadata +339 -57
- data/lib/rails/generators/component/USAGE +0 -13
- data/lib/view_component/content_areas.rb +0 -57
- data/lib/view_component/polymorphic_slots.rb +0 -73
- data/lib/view_component/preview_template_error.rb +0 -6
- data/lib/view_component/previewable.rb +0 -62
- data/lib/view_component/slot_v2.rb +0 -104
- data/lib/view_component/slotable_v2.rb +0 -307
- data/lib/view_component/template_error.rb +0 -9
- data/lib/yard/mattr_accessor_handler.rb +0 -19
@@ -1,50 +1,62 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module PreviewHelper
|
4
|
-
|
4
|
+
# :nocov:
|
5
|
+
include ActionView::Helpers::AssetUrlHelper if Rails.version.to_f < 6.1
|
6
|
+
# :nocov:
|
7
|
+
|
8
|
+
AVAILABLE_PRISM_LANGUAGES = %w[ruby erb haml]
|
5
9
|
FALLBACK_LANGUAGE = "ruby"
|
6
10
|
|
7
11
|
def preview_source
|
8
12
|
return if @render_args.nil?
|
9
13
|
|
10
|
-
render "preview_source"
|
14
|
+
render "preview_source"
|
15
|
+
end
|
16
|
+
|
17
|
+
def prism_css_source_url
|
18
|
+
serve_static_preview_assets? ? asset_path("prism.css", skip_pipeline: true) : "https://cdn.jsdelivr.net/npm/prismjs@1.28.0/themes/prism.min.css"
|
11
19
|
end
|
12
20
|
|
13
|
-
def
|
21
|
+
def prism_js_source_url
|
22
|
+
serve_static_preview_assets? ? asset_path("prism.min.js", skip_pipeline: true) : "https://cdn.jsdelivr.net/npm/prismjs@1.28.0/prism.min.js"
|
23
|
+
end
|
24
|
+
|
25
|
+
def find_template_data_for_preview_source(lookup_context:, template_identifier:)
|
14
26
|
template = lookup_context.find_template(template_identifier)
|
15
27
|
|
16
28
|
if Rails.version.to_f >= 6.1 || template.source.present?
|
17
|
-
|
29
|
+
{
|
18
30
|
source: template.source,
|
19
31
|
prism_language_name: prism_language_name_by_template(template: template)
|
20
32
|
}
|
33
|
+
# :nocov:
|
21
34
|
else
|
22
35
|
# Fetch template source via finding it through preview paths
|
23
36
|
# to accomodate source view when exclusively using templates
|
24
37
|
# for previews for Rails < 6.1.
|
25
|
-
all_template_paths = ViewComponent::Base.preview_paths.map do |preview_path|
|
38
|
+
all_template_paths = ViewComponent::Base.config.preview_paths.map do |preview_path|
|
26
39
|
Dir.glob("#{preview_path}/**/*")
|
27
40
|
end.flatten
|
28
41
|
|
29
42
|
# Search for templates the contain `html`.
|
30
|
-
matching_templates = all_template_paths.find_all do |
|
31
|
-
|
43
|
+
matching_templates = all_template_paths.find_all do |path|
|
44
|
+
path =~ /#{template_identifier}*.(html)/
|
32
45
|
end
|
33
46
|
|
34
|
-
|
35
|
-
|
36
|
-
raise "found 0 matches for templates for #{template_identifier}." if matching_templates.empty?
|
37
|
-
raise "found multiple templates for #{template_identifier}." if matching_templates.size > 1
|
47
|
+
raise ViewComponent::NoMatchingTemplatesForPreviewError.new(template_identifier) if matching_templates.empty?
|
48
|
+
raise ViewComponent::MultipleMatchingTemplatesForPreviewError.new(template_identifier) if matching_templates.size > 1
|
38
49
|
|
39
50
|
template_file_path = matching_templates.first
|
40
51
|
template_source = File.read(template_file_path)
|
41
52
|
prism_language_name = prism_language_name_by_template_path(template_file_path: template_file_path)
|
42
53
|
|
43
|
-
|
54
|
+
{
|
44
55
|
source: template_source,
|
45
56
|
prism_language_name: prism_language_name
|
46
57
|
}
|
47
58
|
end
|
59
|
+
# :nocov:
|
48
60
|
end
|
49
61
|
|
50
62
|
private
|
@@ -57,6 +69,7 @@ module PreviewHelper
|
|
57
69
|
language
|
58
70
|
end
|
59
71
|
|
72
|
+
# :nocov:
|
60
73
|
def prism_language_name_by_template_path(template_file_path:)
|
61
74
|
language = template_file_path.gsub(".html", "").split(".").last
|
62
75
|
|
@@ -64,4 +77,9 @@ module PreviewHelper
|
|
64
77
|
|
65
78
|
language
|
66
79
|
end
|
80
|
+
# :nocov:
|
81
|
+
|
82
|
+
def serve_static_preview_assets?
|
83
|
+
ViewComponent::Base.config.show_previews && Rails.application.config.public_file_server.enabled
|
84
|
+
end
|
67
85
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<link href="<%=
|
1
|
+
<link href="<%= prism_css_source_url %>" media="screen" rel="stylesheet" type="text/css">
|
2
2
|
<div class="view-component-source-example">
|
3
3
|
<h2>Source:</h2>
|
4
4
|
<pre class="source">
|
@@ -7,11 +7,11 @@
|
|
7
7
|
<%= h @preview.preview_source(@example_name) %>
|
8
8
|
</code>
|
9
9
|
<% else %>
|
10
|
-
<% template_data =
|
10
|
+
<% template_data = find_template_data_for_preview_source(lookup_context: @view_renderer.lookup_context, template_identifier: @render_args[:template]) %>
|
11
11
|
<code class="language-<%= template_data[:prism_language_name] %>">
|
12
12
|
<%= h template_data[:source] %>
|
13
13
|
</code>
|
14
14
|
<% end %>
|
15
15
|
</pre>
|
16
16
|
</div>
|
17
|
-
<script type="text/javascript" src="<%=
|
17
|
+
<script type="text/javascript" src="<%= prism_js_source_url %>"></script>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<% if @render_args[:component] %>
|
2
|
-
<% if ViewComponent::Base.render_monkey_patch_enabled || Rails.version.to_f >= 6.1 %>
|
2
|
+
<% if ViewComponent::Base.config.render_monkey_patch_enabled || Rails.version.to_f >= 6.1 %>
|
3
3
|
<%= render(@render_args[:component], @render_args[:args], &@render_args[:block]) %>
|
4
4
|
<% else %>
|
5
5
|
<%= render_component(@render_args[:component], &@render_args[:block]) %>
|
@@ -8,6 +8,6 @@
|
|
8
8
|
<%= render template: @render_args[:template], locals: @render_args[:locals] || {} %>
|
9
9
|
<% end %>
|
10
10
|
|
11
|
-
<% if ViewComponent::Base.show_previews_source %>
|
11
|
+
<% if ViewComponent::Base.config.show_previews_source %>
|
12
12
|
<%= preview_source %>
|
13
13
|
<% end %>
|