Skip to content

Commit 6c58ba3

Browse files
committed
Add CodeBlock::Snippet component for rendering snippets
1 parent 51c6dda commit 6c58ba3

File tree

3 files changed

+37
-10
lines changed

3 files changed

+37
-10
lines changed

app/views/components/code_block/article.rb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class CodeBlock::Article < ApplicationComponent
22
include Phlex::DeferredRender
33
prepend CodeBlock::AtomAware
44

5-
attr_reader :source, :language, :filename, :enable_run
5+
attr_reader :source, :language, :filename
66

77
def initialize(source = "", language: nil, filename: nil, header: true, **)
88
@source = source
@@ -32,10 +32,6 @@ def body(&)
3232
@source = capture(&)
3333
end
3434

35-
def data = {language: language, lines:}
36-
37-
def lines = source.scan("\n").count + 1
38-
3935
def title_content
4036
@title || ->(*) { filename || language }
4137
end
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
class CodeBlock::Snippet < ApplicationComponent
2+
include Phlex::DeferredRender
3+
prepend CodeBlock::AtomAware
4+
5+
attr_reader :snippet
6+
7+
def initialize(snippet, **)
8+
@snippet = snippet
9+
end
10+
11+
def view_template
12+
render CodeBlock::Container.new(language: language) do
13+
render CodeBlock::Header.new { title_content }
14+
15+
render CodeBlock::Body.new do
16+
render CodeBlock::Code.new(source, language: language)
17+
end
18+
end
19+
end
20+
21+
# Overwite the source code with a block
22+
def body(&)
23+
@source = capture(&)
24+
end
25+
26+
def title_content
27+
filename.presence || language.presence || ""
28+
end
29+
30+
def source
31+
snippet.source || ""
32+
end
33+
34+
delegate :language, :filename, to: :snippet
35+
end

app/views/snippets/_snippet.html.erb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
<div id="<%= dom_id(snippet, :code_block) %>">
2-
<%= render CodeBlock::Article.new(
3-
snippet.source || "",
4-
language: snippet.language,
5-
filename: snippet.filename,
6-
) %>
2+
<%= render CodeBlock::Snippet.new(snippet) %>
73
</div>

0 commit comments

Comments
 (0)