lookbook 0.3.1 → 0.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/lookbook/app_controller.rb +3 -3
- data/app/views/lookbook/app/index.html.erb +2 -2
- data/app/views/lookbook/app/show.html.erb +1 -1
- data/app/views/lookbook/layouts/app.html.erb +3 -3
- data/app/views/lookbook/nav/_collection.html.erb +4 -4
- data/app/views/lookbook/nav/_node.html.erb +2 -2
- data/app/views/lookbook/nav/_preview.html.erb +4 -4
- data/app/views/lookbook/shared/_header.html.erb +1 -1
- data/app/views/lookbook/{_sidebar.html.erb → shared/_sidebar.html.erb} +3 -3
- data/app/views/lookbook/{_workbench.html.erb → shared/_workbench.html.erb} +5 -5
- data/app/views/lookbook/workbench/_header.html.erb +2 -2
- data/app/views/lookbook/workbench/_inspector.html.erb +3 -3
- data/lib/lookbook/collection.rb +3 -3
- data/lib/lookbook/engine.rb +14 -4
- data/lib/lookbook/null_logger.rb +47 -0
- data/lib/lookbook/parser.rb +1 -1
- data/lib/lookbook/preview.rb +1 -3
- data/lib/lookbook/taggable.rb +5 -3
- data/lib/lookbook/version.rb +1 -1
- data/lib/lookbook.rb +1 -0
- data/lib/tasks/lookbook_tasks.rake +1 -1
- data/public/lookbook-assets/app.css +102 -87
- data/public/lookbook-assets/app.js +329 -212
- metadata +5 -5
- data/lib/lookbook/navigation.rb +0 -68
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d2f6afc23ec83a6ed2c19314540d26f83406da564385337fe29f9769253a432
|
4
|
+
data.tar.gz: bc239282a1bbbca50a72da683e270efafd60f515cf59a9b56ffc98b73f5e53a6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08d4cf77cc06512be08c1f1baf567b55ac4e8d0328281896ddb2dd7381051b9ed538e8c2333a4437629cfc3e7852f5398672d013a271cacfae4dad0bc8769d97'
|
7
|
+
data.tar.gz: b748d37275d69d82522b7e7746d31ed54d296dac939c5610d3559834207fc0488d682ee86b161c42418af71a80eaee79ec10f16cd276b4d510a87e3446379253
|
@@ -50,7 +50,7 @@ module Lookbook
|
|
50
50
|
def find_preview
|
51
51
|
candidates = []
|
52
52
|
params[:path].to_s.scan(%r{/|$}) { candidates << $` }
|
53
|
-
match = candidates.detect { |candidate| Lookbook::Preview.exists?(candidate) }
|
53
|
+
match = candidates.reverse.detect { |candidate| Lookbook::Preview.exists?(candidate) }
|
54
54
|
@preview = match ? Lookbook::Preview.find(match) : nil
|
55
55
|
end
|
56
56
|
|
@@ -95,7 +95,7 @@ module Lookbook
|
|
95
95
|
html: preview_controller.render_example_to_string(@preview, example.name)
|
96
96
|
}
|
97
97
|
end
|
98
|
-
joined = render_to_string "
|
98
|
+
joined = render_to_string "lookbook/preview_group", locals: {examples: examples}, layout: nil
|
99
99
|
preview_controller.render_in_layout_to_string(joined, @preview.lookbook_layout)
|
100
100
|
else
|
101
101
|
preview_controller.request.params[:path] = "#{@preview.preview_name}/#{@example.name}".chomp("/")
|
@@ -152,7 +152,7 @@ module Lookbook
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def previews
|
155
|
-
Lookbook::Preview.all
|
155
|
+
Lookbook::Preview.all.sort_by(&:label)
|
156
156
|
end
|
157
157
|
|
158
158
|
def preview_controller
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div class="flex flex-col h-full min-h-fill w-full">
|
2
|
-
<%= render "
|
2
|
+
<%= render "shared/header" %>
|
3
3
|
<div class="flex flex-col items-center justify-center h-full min-h-fill">
|
4
4
|
<div class="p-4 text-center">
|
5
5
|
<svg class="feather w-10 h-10 text-gray-300 mx-auto">
|
@@ -8,4 +8,4 @@
|
|
8
8
|
<h5 class="mt-4 text-gray-400 text-base">Select a preview to get started</h5>
|
9
9
|
</div>
|
10
10
|
</div>
|
11
|
-
</div>
|
11
|
+
</div>
|
@@ -1 +1 @@
|
|
1
|
-
<%= render "
|
1
|
+
<%= render "shared/workbench" %>
|
@@ -10,7 +10,7 @@
|
|
10
10
|
|
11
11
|
<% if config.auto_refresh %>
|
12
12
|
<script>
|
13
|
-
window.SOCKET_PATH = "
|
13
|
+
window.SOCKET_PATH = "<%= Lookbook::Engine.websocket_mount_path %>";
|
14
14
|
</script>
|
15
15
|
<% end %>
|
16
16
|
<script src="/lookbook-assets/app.js" defer></script>
|
@@ -21,14 +21,14 @@
|
|
21
21
|
<div
|
22
22
|
x-data="page"
|
23
23
|
x-effect="updateTitle"
|
24
|
-
@refresh.document="fetchHTML().then(doc => $dispatch('document:updated', {doc}))"
|
24
|
+
@refresh.document="fetchHTML().then(doc => $dispatch('document:updated', {doc}))"
|
25
25
|
@popstate.window="fetchHTML().then(doc => { $dispatch('document:loaded', {doc}); sidebarOpenMobile = false})"
|
26
26
|
@sidebar:toggle.window="sidebarOpenMobile = !sidebarOpenMobile"
|
27
27
|
:style="`grid-template-columns: ${$store.nav.width}px 1px 1fr;`"
|
28
28
|
class="md:grid w-screen h-screen"
|
29
29
|
>
|
30
30
|
<div class="h-full bg-gray-100 overflow-hidden" x-show="$screen('md') || sidebarOpenMobile" x-cloak>
|
31
|
-
<%= render "
|
31
|
+
<%= render "shared/sidebar" %>
|
32
32
|
</div>
|
33
33
|
<div x-data="split(splitProps)" class="h-full gutter border-r border-gray-300 relative" x-show="$screen('md')" x-cloak>
|
34
34
|
<div class="w-[9px] h-full bg-transparent hover:bg-indigo-100 hover:bg-opacity-20 transition absolute top-0 bottom-0 transform -translate-x-1/2 cursor-[col-resize] z-10"></div>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
<%= render "
|
1
|
+
<%= render "nav/node", node: node do %>
|
2
2
|
<% node.items.each do |item| %>
|
3
|
-
<%= render "
|
4
|
-
<% end %>
|
5
|
-
<% end %>
|
3
|
+
<%= render "nav/#{item.type.to_s}", node: item %>
|
4
|
+
<% end %>
|
5
|
+
<% end %>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<li id="<%= node.id %>" x-data="navNode" <% if node.hierarchy_depth == 1 %> class="py-1 border-b border-gray-300 cursor-pointer"<% end %> :class="{hidden}" x-cloak>
|
2
|
-
<div @click="toggle
|
2
|
+
<div @click="toggle" style="<%= nav_padding_style(node.hierarchy_depth) %>" class="hover:bg-gray-200 hover:bg-opacity-50">
|
3
3
|
<div class="flex items-center cursor-pointer pr-3 py-[5px]">
|
4
4
|
<svg class="feather w-3 h-3 mr-1 text-gray-500 flex-none">
|
5
5
|
<use xlink:href="/lookbook-assets/feather-sprite.svg#chevron-down" x-show="open" x-cloak />
|
@@ -8,7 +8,7 @@
|
|
8
8
|
<svg class="feather h-3.5 w-3.5 mr-1.5 flex-none text-indigo-500">
|
9
9
|
<use xlink:href="/lookbook-assets/feather-sprite.svg#<%= node.type == :preview ? 'layers' : 'folder' %>" />
|
10
10
|
</svg>
|
11
|
-
<div class="truncate whitespace-nowrap text-left <%= "font-bold" if node.type == :preview %>">
|
11
|
+
<div class="truncate w-full whitespace-nowrap text-left <%= "font-bold" if node.type == :preview %>" @click.stop="toggle(); if (open()) { <%= "navigate('#{path}')" if defined?(path) %>}">
|
12
12
|
<%= node.label %>
|
13
13
|
</div>
|
14
14
|
</div>
|
@@ -1,11 +1,11 @@
|
|
1
1
|
<% examples = node.get_examples %>
|
2
2
|
<% if examples.many? %>
|
3
|
-
<%= render "
|
3
|
+
<%= render "nav/node", node: node, path: show_path(examples.first.path) do %>
|
4
4
|
<% examples.each do |example| %>
|
5
|
-
<%= render "
|
5
|
+
<%= render "nav/leaf", leaf: example, depth: example.hierarchy_depth + 1 %>
|
6
6
|
<% end %>
|
7
7
|
<% end %>
|
8
8
|
<% else %>
|
9
9
|
<% example = examples.first %>
|
10
|
-
<%= render "
|
11
|
-
<% end %>
|
10
|
+
<%= render "nav/leaf", leaf: example, depth: example.hierarchy_depth, label: node.label, display: :node %>
|
11
|
+
<% end %>
|
@@ -27,7 +27,7 @@
|
|
27
27
|
<% if @nav.items.any? %>
|
28
28
|
<ul x-ref="items">
|
29
29
|
<% @nav.items.each do |item| %>
|
30
|
-
<%= render "
|
30
|
+
<%= render "nav/#{item.type.to_s}", node: item %>
|
31
31
|
<% end %>
|
32
32
|
</ul>
|
33
33
|
<div class="p-4 text-center" x-show="hidden" x-cloak>
|
@@ -41,5 +41,5 @@
|
|
41
41
|
<% end %>
|
42
42
|
</nav>
|
43
43
|
</div>
|
44
|
-
</div>
|
45
|
-
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
<div id="workbench" class="bg-gray-50 h-screen flex flex-col" x-data="workbench">
|
2
|
-
<%= render "
|
2
|
+
<%= render "workbench/header" %>
|
3
3
|
<div class="md:grid flex-grow" :style="`grid-template-rows: 1fr 1px ${$store.inspector.height}px`">
|
4
|
-
<%= render "
|
4
|
+
<%= render "workbench/preview" %>
|
5
5
|
<div class="w-full gutter border-t border-gray-300 relative" x-data="split(splitProps)" x-show="$screen('md')">
|
6
6
|
<div class="h-[11px] w-full bg-transparent hover:bg-indigo-100 hover:bg-opacity-20 transition absolute left-0 right-0 transform -translate-y-1/2 cursor-[row-resize]"></div>
|
7
7
|
</div>
|
8
8
|
<% if @inspector %>
|
9
|
-
<%= render "
|
9
|
+
<%= render "workbench/inspector", **@inspector %>
|
10
10
|
<% end %>
|
11
|
-
</div>
|
12
|
-
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<%= render "
|
1
|
+
<%= render "shared/header" do %>
|
2
2
|
<div class="flex items-center">
|
3
3
|
<div class="flex items-center space-x-1">
|
4
4
|
<strong class="whitespace-nowrap truncate"><%= @preview.label %></strong>
|
@@ -36,4 +36,4 @@
|
|
36
36
|
</svg>
|
37
37
|
</a>
|
38
38
|
</div>
|
39
|
-
<% end %>
|
39
|
+
<% end %>
|
@@ -21,12 +21,12 @@
|
|
21
21
|
<% panes.each do |key, props| %>
|
22
22
|
<div class="flex flex-col h-full relative" x-show="active('<%= key %>')" x-cloak>
|
23
23
|
<% if props[:clipboard].present? %>
|
24
|
-
<%= render "
|
24
|
+
<%= render "shared/clipboard" do %><%= h props[:clipboard].strip %><% end %>
|
25
25
|
<% end %>
|
26
26
|
<div class="flex flex-col h-full overflow-auto">
|
27
|
-
<%= render "
|
27
|
+
<%= render "workbench/inspector/#{props[:template]}", key: key, **props %>
|
28
28
|
</div>
|
29
29
|
</div>
|
30
30
|
<% end %>
|
31
31
|
</div>
|
32
|
-
</div>
|
32
|
+
</div>
|
data/lib/lookbook/collection.rb
CHANGED
@@ -12,11 +12,11 @@ module Lookbook
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def name
|
15
|
-
@path ? @path.split("/").last : "root"
|
15
|
+
@path.present? ? @path.split("/").last : "root"
|
16
16
|
end
|
17
17
|
|
18
18
|
def label
|
19
|
-
name
|
19
|
+
name&.titleize
|
20
20
|
end
|
21
21
|
|
22
22
|
def hierarchy_depth
|
@@ -24,7 +24,7 @@ module Lookbook
|
|
24
24
|
end
|
25
25
|
|
26
26
|
def items(sorted = true)
|
27
|
-
sorted ? @items.sort_by(&:
|
27
|
+
sorted ? @items.sort_by(&:label) : @items
|
28
28
|
end
|
29
29
|
|
30
30
|
def add(item)
|
data/lib/lookbook/engine.rb
CHANGED
@@ -23,6 +23,7 @@ module Lookbook
|
|
23
23
|
|
24
24
|
options.auto_refresh = true if options.auto_refresh.nil?
|
25
25
|
options.sort_examples = false if options.sort_examples.nil?
|
26
|
+
options.debug = false unless options.debug == true
|
26
27
|
|
27
28
|
options.preview_paths = options.preview_paths.map(&:to_s)
|
28
29
|
options.preview_paths += vc_options.preview_paths
|
@@ -43,10 +44,6 @@ module Lookbook
|
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
46
|
-
initializer "lookbook.cable.logger" do
|
47
|
-
Lookbook::Engine.cable.logger ||= Rails.logger
|
48
|
-
end
|
49
|
-
|
50
47
|
initializer "lookbook.parser.tags" do
|
51
48
|
Lookbook::Parser.define_tags
|
52
49
|
end
|
@@ -58,6 +55,15 @@ module Lookbook
|
|
58
55
|
)
|
59
56
|
end
|
60
57
|
|
58
|
+
initializer "lookbook.logging" do
|
59
|
+
if config.lookbook.debug == true
|
60
|
+
Lookbook::Engine.cable.logger ||= Rails.logger
|
61
|
+
else
|
62
|
+
Lookbook::Engine.cable.logger = Lookbook::NullLogger.new
|
63
|
+
config.action_view.logger = Lookbook::NullLogger.new
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
61
67
|
initializer "lookbook.preview.extend" do
|
62
68
|
ActiveSupport.on_load(:view_component) do
|
63
69
|
ViewComponent::Preview.extend Lookbook::Preview
|
@@ -93,6 +99,10 @@ module Lookbook
|
|
93
99
|
end
|
94
100
|
end
|
95
101
|
|
102
|
+
def websocket_mount_path
|
103
|
+
"#{Lookbook::Engine.routes.find_script_name({})}#{cable.mount_path}"
|
104
|
+
end
|
105
|
+
|
96
106
|
def cable
|
97
107
|
@cable ||= ActionCable::Server::Configuration.new
|
98
108
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Lookbook
|
2
|
+
class NullLogger
|
3
|
+
def unknown(*)
|
4
|
+
nil
|
5
|
+
end
|
6
|
+
|
7
|
+
def fatal(*)
|
8
|
+
nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def fatal?
|
12
|
+
false
|
13
|
+
end
|
14
|
+
|
15
|
+
def error(*)
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def error?
|
20
|
+
false
|
21
|
+
end
|
22
|
+
|
23
|
+
def warn(*)
|
24
|
+
nil
|
25
|
+
end
|
26
|
+
|
27
|
+
def warn?
|
28
|
+
false
|
29
|
+
end
|
30
|
+
|
31
|
+
def info(*)
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
|
35
|
+
def info?
|
36
|
+
false
|
37
|
+
end
|
38
|
+
|
39
|
+
def debug(*)
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def debug?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/lib/lookbook/parser.rb
CHANGED
data/lib/lookbook/preview.rb
CHANGED
@@ -80,7 +80,7 @@ module Lookbook
|
|
80
80
|
|
81
81
|
class << self
|
82
82
|
def all
|
83
|
-
ViewComponent::Preview.all
|
83
|
+
ViewComponent::Preview.all.sort_by(&:label)
|
84
84
|
end
|
85
85
|
|
86
86
|
def find(path)
|
@@ -90,8 +90,6 @@ module Lookbook
|
|
90
90
|
def exists?(path)
|
91
91
|
!!find(path)
|
92
92
|
end
|
93
|
-
|
94
|
-
|
95
93
|
end
|
96
94
|
|
97
95
|
private
|
data/lib/lookbook/taggable.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
module Lookbook
|
2
2
|
module Taggable
|
3
3
|
def lookbook_hidden?
|
4
|
-
if code_object
|
4
|
+
if code_object&.tag(:hidden)
|
5
5
|
code_object.tag(:hidden).text.strip != "false"
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
9
9
|
def lookbook_label
|
10
|
-
code_object
|
10
|
+
code_object&.tag(:label)&.text
|
11
11
|
end
|
12
12
|
|
13
13
|
def lookbook_notes
|
14
|
-
code_object
|
14
|
+
if code_object&.docstring
|
15
|
+
code_object.docstring.to_s.strip
|
16
|
+
end
|
15
17
|
end
|
16
18
|
|
17
19
|
def lookbook_group
|
data/lib/lookbook/version.rb
CHANGED
data/lib/lookbook.rb
CHANGED
@@ -6,7 +6,7 @@ namespace :lookbook do
|
|
6
6
|
task :bump_version, [:version] do |t, args|
|
7
7
|
filename = Lookbook::Engine.root.join("lib/lookbook/version.rb")
|
8
8
|
current_version = Lookbook::VERSION.to_s
|
9
|
-
new_version = args[:version].sub("v", "").
|
9
|
+
new_version = args[:version].sub("v", "").tr("-", ".")
|
10
10
|
file = File.open(filename)
|
11
11
|
contents = file.read
|
12
12
|
File.write(filename, contents.gsub(current_version, new_version))
|