lookbook 2.2.2 → 2.3.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/README.md +9 -9
- data/app/components/lookbook/header/component.html.erb +1 -1
- data/app/components/lookbook/icon/component.html.erb +4 -2
- data/app/components/lookbook/icon/component.rb +0 -16
- data/app/components/lookbook/nav/entity/component.html.erb +3 -0
- data/app/components/lookbook/nav/item/component.js +8 -10
- data/app/controllers/lookbook/page_controller.rb +1 -1
- data/app/helpers/lookbook/application_helper.rb +10 -0
- data/app/views/layouts/lookbook/application.html.erb +98 -87
- data/app/views/layouts/lookbook/embed.html.erb +29 -17
- data/assets/js/app.js +7 -4
- data/assets/js/helpers/request.js +2 -2
- data/config/app.yml +2 -1
- data/lib/lookbook/preview_controller_actions.rb +17 -15
- data/lib/lookbook/services/templates/action_view_config_handler.rb +50 -0
- data/lib/lookbook/version.rb +1 -1
- data/public/lookbook-assets/css/lookbook.css +432 -237
- data/public/lookbook-assets/css/lookbook.css.map +1 -1
- data/public/lookbook-assets/js/index.js +130 -92
- data/public/lookbook-assets/js/index.js.map +1 -1
- metadata +5 -5
- data/lib/lookbook/services/templates/action_view_annotations_handler.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 351a34443300be5a8f4a3f1125a915f6e831f1dfb32a3a24515a64d07ef7cbba
|
4
|
+
data.tar.gz: 6394415689d62a66ee39c4715471389a82cdc8116b84c2c0f971fba2813855a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96cea87def8290537ecf96d5fee445e840e17c54800e1cbd1e9880abdbf6c44aa5c2f52f5e5f9911baec3e7c14c0b7480de89f0a0d3b7763baec5cb166e08225
|
7
|
+
data.tar.gz: 83cee3bec9ab9d4895c5da7ec8d82c5c674275964dbac2117c36d977403cdf70c86d9e0f53b2146ae73f1ca2bb8bf1e7368a9ac87157226d25439419e03ebb41
|
data/README.md
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
<p><strong><a href="https://lookbook.build">Documentation</a> | <a href="http://demo.lookbook.build/lookbook">Demo site</a></strong></p>
|
8
8
|
|
9
9
|
<p><a href="https://rubygems.org/gems/lookbook"><img src="https://img.shields.io/gem/v/lookbook" alt="Gem version"></a>
|
10
|
-
<a href="https://github.com/
|
10
|
+
<a href="https://github.com/lookbook-hq/lookbook/actions/workflows/ci.yml"><img src="https://github.com/lookbook-hq/lookbook/actions/workflows/ci.yml/badge.svg" alt="CI status"></a></p>
|
11
11
|
|
12
12
|
</div>
|
13
13
|
|
@@ -32,9 +32,9 @@ Lookbook is implemented as an isolated [Rails Engine](https://guides.rubyonrails
|
|
32
32
|
|
33
33
|
This repository contains:
|
34
34
|
|
35
|
-
* The Lookbook source code ([`/app`](https://github.com/
|
36
|
-
* The Lookbook [documentation site](#docs-site) source code and content ([`/docs`](https://github.com/
|
37
|
-
* A [test suite](#testing) with a 'runable' dummy app ([`/spec`](https://github.com/
|
35
|
+
* The Lookbook source code ([`/app`](https://github.com/lookbook-hq/lookbook/tree/main/app), [`/lib`](https://github.com/lookbook-hq/lookbook/tree/main/lib), [`/config`](https://github.com/lookbook-hq/lookbook/tree/main/config), etc)
|
36
|
+
* The Lookbook [documentation site](#docs-site) source code and content ([`/docs`](https://github.com/lookbook-hq/lookbook/tree/main/docs)).
|
37
|
+
* A [test suite](#testing) with a 'runable' dummy app ([`/spec`](https://github.com/lookbook-hq/lookbook/tree/main/spec)).
|
38
38
|
|
39
39
|
### Documentation site
|
40
40
|
|
@@ -61,22 +61,22 @@ Lookbook uses [Release It!](https://github.com/release-it/release-it) to automat
|
|
61
61
|
|
62
62
|
Running `npm run release` will start the process of publishing a new release and walks though all the steps from picking a version number to publishing the updated gem.
|
63
63
|
|
64
|
-
Publishing a release requires write permissions for this repository (
|
64
|
+
Publishing a release requires write permissions for this repository (lookbook-hq/lookbook) and 2FA publish permissions for Lookbook on RubyGems.
|
65
65
|
|
66
66
|
## Contributing
|
67
67
|
|
68
68
|
Lookbook is an un-funded open source project and contributions of all types and sizes are most welcome!
|
69
69
|
|
70
|
-
Please take the time to read over the [Contributing](./CONTRIBUTING.md) guide before making your first contribution and if anything isn't clear then [start a discussion](https://github.com/
|
70
|
+
Please take the time to read over the [Contributing](./CONTRIBUTING.md) guide before making your first contribution and if anything isn't clear then [start a discussion](https://github.com/lookbook-hq/lookbook/discussions) and we will do our best to help you out.
|
71
71
|
|
72
72
|
## Contributors
|
73
73
|
|
74
74
|
Lookbook was created by [Mark Perkins](https://github.com/allmarkedup) and continues to grow
|
75
|
-
& improve thanks to the ideas, suggestions and hard work of all of [these excellent humans](https://github.com/
|
75
|
+
& improve thanks to the ideas, suggestions and hard work of all of [these excellent humans](https://github.com/lookbook-hq/lookbook/graphs/contributors):
|
76
76
|
<br>
|
77
77
|
<br>
|
78
|
-
<a href="https://github.com/
|
79
|
-
<img src="https://contrib.rocks/image?repo=
|
78
|
+
<a href="https://github.com/lookbook-hq/lookbook/graphs/contributors">
|
79
|
+
<img src="https://contrib.rocks/image?repo=lookbook-hq/lookbook&columns=14" width="800" />
|
80
80
|
</a>
|
81
81
|
|
82
82
|
## License
|
@@ -34,7 +34,7 @@
|
|
34
34
|
<% menu = lookbook_render :debug_menu,
|
35
35
|
version: Lookbook::VERSION,
|
36
36
|
docs_url: "https://lookbook.build/guide",
|
37
|
-
repo_url: "https://github.com/
|
37
|
+
repo_url: "https://github.com/lookbook-hq/lookbook" do %>
|
38
38
|
<%= debug_data %>
|
39
39
|
<% end %>
|
40
40
|
<% button.with_dropdown.with_content(menu) %>
|
@@ -1,3 +1,5 @@
|
|
1
1
|
<%= render_component_tag :i, style: "height: #{size_rems}; width: #{size_rems}; #{@html_attrs[:style]}", class: "icon-stroke-#{stroke}" do %>
|
2
|
-
|
3
|
-
|
2
|
+
<svg>
|
3
|
+
<use href="/lookbook-assets/img/lucide-sprite.svg#<%= @icon_name %>"></use>
|
4
|
+
</svg>
|
5
|
+
<% end %>
|
@@ -14,21 +14,5 @@ module Lookbook
|
|
14
14
|
def size_rems
|
15
15
|
"#{@size * 0.25}rem"
|
16
16
|
end
|
17
|
-
|
18
|
-
def svg
|
19
|
-
ICON_CACHE[@icon_name] ||= read_svg
|
20
|
-
end
|
21
|
-
|
22
|
-
def read_svg
|
23
|
-
File.read(svg_path).html_safe
|
24
|
-
rescue
|
25
|
-
if Rails.env.development? || Rails.env.test?
|
26
|
-
raise "`#{@icon_name}` is not a valid icon name"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def svg_path
|
31
|
-
Lookbook::Engine.root.join("assets/icons/#{@icon_name}.svg")
|
32
|
-
end
|
33
17
|
end
|
34
18
|
end
|
@@ -2,7 +2,10 @@
|
|
2
2
|
id: id,
|
3
3
|
key: "#{id}-entity-#{type}",
|
4
4
|
class: "list-none",
|
5
|
+
"x-init": "$nextTick(() => checkActive())",
|
5
6
|
"x-show": "!filteredOut",
|
7
|
+
"@navigation:complete.window": "checkActive",
|
8
|
+
# "x-effect": "active = ($refs.link && (window.location.pathname === $refs.link.getAttribute('href')))",
|
6
9
|
data: { "entity-type": type.to_s.tr("_","-") },
|
7
10
|
cloak: true do %>
|
8
11
|
<%= lookbook_tag href.present? ? :a : :button,
|
@@ -6,20 +6,12 @@ export default function navItemComponent({ id, matchers }) {
|
|
6
6
|
return {
|
7
7
|
filteredOut: false,
|
8
8
|
|
9
|
+
active: false,
|
10
|
+
|
9
11
|
get open() {
|
10
12
|
return this.isCollection && this.isOpen(id);
|
11
13
|
},
|
12
14
|
|
13
|
-
get active() {
|
14
|
-
if (this.$refs.link) {
|
15
|
-
return (
|
16
|
-
this.location &&
|
17
|
-
this.location.pathname === this.$refs.link.getAttribute("href")
|
18
|
-
);
|
19
|
-
}
|
20
|
-
return false;
|
21
|
-
},
|
22
|
-
|
23
15
|
get children() {
|
24
16
|
return this.$refs.items ? Array.from(this.$refs.items.children) : [];
|
25
17
|
},
|
@@ -28,6 +20,12 @@ export default function navItemComponent({ id, matchers }) {
|
|
28
20
|
return !this.$refs.link;
|
29
21
|
},
|
30
22
|
|
23
|
+
checkActive() {
|
24
|
+
this.active =
|
25
|
+
this.$refs.link &&
|
26
|
+
window.location.pathname === this.$refs.link.getAttribute("href");
|
27
|
+
},
|
28
|
+
|
31
29
|
toggle() {
|
32
30
|
this.toggleOpen(id);
|
33
31
|
},
|
@@ -15,7 +15,7 @@ module Lookbook
|
|
15
15
|
@next_page = @pages.next(@page)
|
16
16
|
@previous_page = @pages.previous(@page)
|
17
17
|
|
18
|
-
content =
|
18
|
+
content = ActionViewConfigHandler.call do
|
19
19
|
render_to_string inline: @page.content, locals: {
|
20
20
|
page: @page,
|
21
21
|
next_page: @next_page,
|
@@ -1,88 +1,90 @@
|
|
1
1
|
<% content_for :body do %>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
<% if request_frame == "root" %>
|
3
|
+
<div
|
4
|
+
id="app"
|
5
|
+
x-data="app"
|
6
|
+
x-cloak
|
7
|
+
x-on:popstate.window="handleNavigation"
|
8
|
+
x-on:click.document="hijax"
|
9
|
+
x-on:navigation:start="closeMobileSidebar"
|
10
|
+
x-on:dom:update-complete.window="Lookbook.initEmbeds()"
|
11
|
+
class="w-screen h-screen grid grid-rows-[40px_1fr] relative">
|
11
12
|
|
12
|
-
|
13
|
+
<%= render "lookbook/partials/user_styles" %>
|
13
14
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
<%= lookbook_render :header,
|
16
|
+
id: "app-header",
|
17
|
+
debug_menu: @config.debug_menu,
|
18
|
+
project_name: @config.project_name,
|
19
|
+
project_logo: @config.project_logo %>
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
<% unless @blank_slate %>
|
22
|
+
|
23
|
+
<%= lookbook_render :split_layout,
|
24
|
+
alpine_data: "$store.layout.main",
|
25
|
+
":class": "$store.layout.mobile && '!block'" do |layout| %>
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
27
|
+
<% layout.with_pane id: "app-sidebar", class: "flex flex-col bg-lookbook-sidebar-bg relative translate-x-0",
|
28
|
+
":class": "{
|
29
|
+
'transition': $store.layout.mobile,
|
30
|
+
'translate-x-full': $store.layout.mobile && sidebarHidden,
|
31
|
+
'!absolute right-0 bottom-0 top-[40px] h-[calc(100%_-_40px)] w-full max-w-[420px] z-[1001] border-l border-lookbook-divider': $store.layout.mobile
|
32
|
+
}",
|
33
|
+
"x-on:click.outside": "closeMobileSidebar",
|
34
|
+
cloak: true do %>
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
<% if @sidebar_panels.any? %>
|
37
|
+
<%= lookbook_render :split_layout,
|
38
|
+
alpine_data: "$store.layout.#{@sidebar_panels.many? ? "sidebar" : "singleSectionSidebar"}",
|
39
|
+
style: "height: calc(100vh - 2.5rem);" do |layout| %>
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
41
|
+
<% @sidebar_panels.each do |panel| %>
|
42
|
+
<% if panel == :previews && @previews.any? %>
|
43
|
+
<% layout.with_pane class: "overflow-hidden" do %>
|
44
|
+
<%= lookbook_render :nav,
|
45
|
+
id: "previews-nav",
|
46
|
+
tree: @previews.to_tree,
|
47
|
+
alpine_data: "$store.nav.previews" do |nav| %>
|
48
|
+
<%= nav.with_toolbar do |toolbar| %>
|
49
|
+
<% toolbar.with_section padded: true do %>
|
50
|
+
<h4 class="pt-1"><%= @config.preview_collection_label %></h4>
|
51
|
+
<% end %>
|
52
|
+
<% toolbar.with_section align: :right, padded: false do %>
|
53
|
+
<%= lookbook_render :button_group, size: :xs do |group| %>
|
54
|
+
<% group.with_button icon: :minus_square,
|
55
|
+
tooltip: "Collapse all",
|
56
|
+
"x-on:click": "closeAll" %>
|
57
|
+
<% end %>
|
56
58
|
<% end %>
|
57
59
|
<% end %>
|
58
|
-
|
59
|
-
|
60
|
-
<%
|
60
|
+
<% if @config.preview_nav_filter %>
|
61
|
+
<% nav.with_filter store: "$store.nav.previews.filter", placeholder: "Filter previews by name…" %>
|
62
|
+
<% end %>
|
61
63
|
<% end %>
|
62
64
|
<% end %>
|
63
65
|
<% end %>
|
64
|
-
<% end %>
|
65
66
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
67
|
+
<% if panel == :pages && @pages.any? %>
|
68
|
+
<% layout.with_pane class: "overflow-hidden" do %>
|
69
|
+
<%= lookbook_render :nav,
|
70
|
+
id: "pages-nav",
|
71
|
+
tree: @pages.to_tree,
|
72
|
+
alpine_data: "$store.nav.pages" do |nav| %>
|
73
|
+
<%= nav.with_toolbar do |toolbar| %>
|
74
|
+
<% toolbar.with_section padded: true do %>
|
75
|
+
<h4 class="pt-1"><%= @config.page_collection_label %></h4>
|
76
|
+
<% end %>
|
77
|
+
<% toolbar.with_section align: :right, padded: false do %>
|
78
|
+
<%= lookbook_render :button_group, size: :xs do |group| %>
|
79
|
+
<% group.with_button icon: :minus_square,
|
80
|
+
tooltip: "Collapse all",
|
81
|
+
"x-on:click": "closeAll" %>
|
82
|
+
<% end %>
|
81
83
|
<% end %>
|
82
84
|
<% end %>
|
83
|
-
|
84
|
-
|
85
|
-
<%
|
85
|
+
<% if @config.page_nav_filter %>
|
86
|
+
<% nav.with_filter store: "$store.nav.pages.filter", placeholder: "Filter pages by name…" %>
|
87
|
+
<% end %>
|
86
88
|
<% end %>
|
87
89
|
<% end %>
|
88
90
|
<% end %>
|
@@ -90,26 +92,35 @@
|
|
90
92
|
<% end %>
|
91
93
|
<% end %>
|
92
94
|
<% end %>
|
93
|
-
<% end %>
|
94
95
|
|
95
|
-
|
96
|
-
|
96
|
+
<% layout.with_pane id: "app-main", class: "overflow-hidden h-full", ":class": "$store.layout.mobile && 'w-screen'" do %>
|
97
|
+
<%= content_for?(:main) ? yield(:main) : yield %>
|
98
|
+
<% end %>
|
97
99
|
<% end %>
|
100
|
+
<% else %>
|
101
|
+
<div id="app-main" class="w-screen h-full overflow-hidden">
|
102
|
+
<%= content_for?(:main) ? yield(:main) : yield %>
|
103
|
+
</div>
|
98
104
|
<% end %>
|
99
|
-
|
100
|
-
<div
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
105
|
+
|
106
|
+
<div class="absolute opacity-0 bg-black inset-0 top-[39px] z-[-1] transition-opacity" x-bind:class="($store.layout.mobile && !sidebarHidden) && '!opacity-30 !z-[1000]'" data-cloak></div>
|
107
|
+
|
108
|
+
<% if content_for? :dropdowns %>
|
109
|
+
<div class="hidden">
|
110
|
+
<%= content_for :dropdowns -%>
|
111
|
+
</div>
|
112
|
+
<% end %>
|
113
|
+
</div>
|
114
|
+
<% elsif request_frame == "main" %>
|
115
|
+
<div id="app-main">
|
116
|
+
<%= content_for?(:main) ? yield(:main) : yield %>
|
117
|
+
</div>
|
118
|
+
<% end %>
|
119
|
+
<% end %>
|
106
120
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
<% end %>
|
112
|
-
</div>
|
121
|
+
<% if frame_request? %>
|
122
|
+
<%= yield :body %>
|
123
|
+
<% else %>
|
124
|
+
<%= render template: "layouts/lookbook/skeleton" %>
|
113
125
|
<% end %>
|
114
126
|
|
115
|
-
<%= render template: "layouts/lookbook/skeleton" %>
|
@@ -1,22 +1,34 @@
|
|
1
1
|
<% content_for :body do %>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
2
|
+
<% if request_frame == "root" %>
|
3
|
+
<div
|
4
|
+
id="app"
|
5
|
+
x-data="app"
|
6
|
+
x-cloak
|
7
|
+
x-on:popstate.window="handleNavigation"
|
8
|
+
x-on:click.document="hijax"
|
9
|
+
class="overflow-hidden">
|
10
|
+
|
11
|
+
<%= render "lookbook/partials/user_styles" %>
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
<% if content_for? :dropdowns %>
|
16
|
-
<div class="hidden">
|
17
|
-
<%= content_for :dropdowns -%>
|
13
|
+
<div id="app-main" class="contents">
|
14
|
+
<%= content_for?(:main) ? yield(:main) : yield %>
|
15
|
+
</div>
|
18
16
|
</div>
|
19
|
-
|
17
|
+
|
18
|
+
<% if content_for? :dropdowns %>
|
19
|
+
<div class="hidden">
|
20
|
+
<%= content_for :dropdowns -%>
|
21
|
+
</div>
|
22
|
+
<% end %>
|
23
|
+
<% elsif request_frame == "main" %>
|
24
|
+
<div id="app-main">
|
25
|
+
<%= content_for?(:main) ? yield(:main) : yield %>
|
26
|
+
</div>
|
27
|
+
<% end %>
|
20
28
|
<% end %>
|
21
29
|
|
22
|
-
|
30
|
+
<% if frame_request? %>
|
31
|
+
<%= yield :body %>
|
32
|
+
<% else %>
|
33
|
+
<%= render template: "layouts/lookbook/skeleton" %>
|
34
|
+
<% end %>
|
data/assets/js/app.js
CHANGED
@@ -43,7 +43,9 @@ export default function app() {
|
|
43
43
|
this.debug("Navigating to ", window.location.pathname);
|
44
44
|
this.$dispatch("navigation:start");
|
45
45
|
this.location = window.location;
|
46
|
-
await this.updateDOM(
|
46
|
+
await this.updateDOM("#app-main", {
|
47
|
+
headers: { "X-Lookbook-Frame": "main" },
|
48
|
+
});
|
47
49
|
this.$dispatch("navigation:complete");
|
48
50
|
},
|
49
51
|
|
@@ -65,16 +67,17 @@ export default function app() {
|
|
65
67
|
}
|
66
68
|
},
|
67
69
|
|
68
|
-
async updateDOM() {
|
70
|
+
async updateDOM(rootSelector = `#${this.$root.id}`, options = {}) {
|
69
71
|
this.debug("Starting DOM update");
|
70
72
|
this.$dispatch("dom:update-start");
|
71
73
|
this.requestStart();
|
72
74
|
try {
|
73
75
|
const { fragment, title } = await fetchHTML(
|
74
76
|
window.location,
|
75
|
-
|
77
|
+
rootSelector,
|
78
|
+
options
|
76
79
|
);
|
77
|
-
morph(
|
80
|
+
morph(document.querySelector(rootSelector), fragment);
|
78
81
|
document.title = title;
|
79
82
|
this.requestEnd();
|
80
83
|
this.$dispatch("dom:update-complete");
|
@@ -1,5 +1,5 @@
|
|
1
|
-
async function fetchHTML(url, selector) {
|
2
|
-
const response = await fetch(url || window.document.location);
|
1
|
+
async function fetchHTML(url, selector, options = {}) {
|
2
|
+
const response = await fetch(url || window.document.location, options);
|
3
3
|
const html = await response.text();
|
4
4
|
const doc = new DOMParser().parseFromString(html, "text/html");
|
5
5
|
return {
|
data/config/app.yml
CHANGED
@@ -21,6 +21,7 @@ shared:
|
|
21
21
|
display_option_controls: true
|
22
22
|
preview_layout: ~
|
23
23
|
preview_disable_action_view_annotations: true
|
24
|
+
preview_disable_action_view_partial_prefixes: true
|
24
25
|
preview_type_default: view_component
|
25
26
|
preview_sort_scenarios: false
|
26
27
|
preview_disable_error_handling: false
|
@@ -66,7 +67,7 @@ shared:
|
|
66
67
|
links:
|
67
68
|
docs: https://v2.lookbook.build
|
68
69
|
demo: https://v2-demo.lookbook.build
|
69
|
-
repo: https://github.com/
|
70
|
+
repo: https://github.com/lookbook-hq/lookbook/tree/v2
|
70
71
|
|
71
72
|
development:
|
72
73
|
debug_menu: true
|
@@ -21,24 +21,23 @@ module Lookbook
|
|
21
21
|
opts[:assigns] = @render_args[:assigns] || {}
|
22
22
|
opts[:locals] = locals if locals.present?
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
if scenario.after_render_method.present?
|
27
|
-
render_context = Store.new({
|
28
|
-
preview: preview,
|
29
|
-
scenario: scenario,
|
30
|
-
params: user_request_parameters
|
31
|
-
})
|
32
|
-
rendered = @preview.after_render(method: scenario.after_render_method, html: rendered, context: render_context)
|
33
|
-
end
|
24
|
+
with_action_view_settings do
|
25
|
+
rendered = render_to_string(template, **opts)
|
34
26
|
|
35
|
-
|
27
|
+
if scenario.after_render_method.present?
|
28
|
+
render_context = Store.new({
|
29
|
+
preview: preview,
|
30
|
+
scenario: scenario,
|
31
|
+
params: user_request_parameters
|
32
|
+
})
|
33
|
+
rendered = @preview.after_render(method: scenario.after_render_method, html: rendered, context: render_context)
|
34
|
+
end
|
36
35
|
render html: rendered
|
37
36
|
end
|
38
37
|
end
|
39
38
|
|
40
39
|
def render_in_layout_to_string(template, locals, opts = {})
|
41
|
-
|
40
|
+
with_action_view_settings do
|
42
41
|
html = render_to_string(template, locals: locals, **determine_layout(opts[:layout]))
|
43
42
|
if opts[:append_html].present?
|
44
43
|
html += opts[:append_html]
|
@@ -49,9 +48,12 @@ module Lookbook
|
|
49
48
|
|
50
49
|
protected
|
51
50
|
|
52
|
-
def
|
53
|
-
|
54
|
-
|
51
|
+
def with_action_view_settings(&block)
|
52
|
+
ActionViewConfigHandler.call(
|
53
|
+
disable_annotations: Lookbook.config.preview_disable_action_view_annotations,
|
54
|
+
disable_partial_prefixes: Lookbook.config.preview_disable_action_view_partial_prefixes,
|
55
|
+
&block
|
56
|
+
)
|
55
57
|
end
|
56
58
|
|
57
59
|
def user_request_parameters
|
@@ -0,0 +1,50 @@
|
|
1
|
+
module Lookbook
|
2
|
+
class ActionViewConfigHandler < Service
|
3
|
+
attr_reader :disable_annotations, :disable_partial_prefixes
|
4
|
+
|
5
|
+
def initialize(disable_annotations: true, disable_partial_prefixes: true)
|
6
|
+
@disable_annotations = disable_annotations
|
7
|
+
@disable_partial_prefixes = disable_partial_prefixes
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
handle_annotations
|
12
|
+
handle_partial_prefixes
|
13
|
+
|
14
|
+
yield
|
15
|
+
ensure
|
16
|
+
restore_annotations
|
17
|
+
restore_partial_prefixes
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def handle_annotations
|
23
|
+
return unless disable_annotations && ActionView::Base.respond_to?(:annotate_rendered_view_with_filenames)
|
24
|
+
|
25
|
+
@original_annotations_value = ActionView::Base.annotate_rendered_view_with_filenames
|
26
|
+
ActionView::Base.annotate_rendered_view_with_filenames = false
|
27
|
+
end
|
28
|
+
|
29
|
+
def restore_annotations
|
30
|
+
return if @original_annotations_value.nil?
|
31
|
+
|
32
|
+
ActionView::Base.annotate_rendered_view_with_filenames = @original_annotations_value
|
33
|
+
@original_annotations_value = nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def handle_partial_prefixes
|
37
|
+
return unless disable_partial_prefixes && ActionView::Base.respond_to?(:prefix_partial_path_with_controller_namespace)
|
38
|
+
|
39
|
+
@original_partial_prefix_value = ActionView::Base.prefix_partial_path_with_controller_namespace
|
40
|
+
ActionView::Base.prefix_partial_path_with_controller_namespace = false
|
41
|
+
end
|
42
|
+
|
43
|
+
def restore_partial_prefixes
|
44
|
+
return if @original_partial_prefix_value.nil?
|
45
|
+
|
46
|
+
ActionView::Base.prefix_partial_path_with_controller_namespace = @original_partial_prefix_value
|
47
|
+
@original_partial_prefix_value = nil
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/lookbook/version.rb
CHANGED