scribe/src/components/page_content.cr

85 lines
1.7 KiB
Crystal

class PageContent < BaseComponent
include Nodes
needs page : Page
def render
page.nodes.each do |node|
render_child(node)
end
end
def render_children(children : Children)
children.each { |child| render_child(child) }
end
def render_child(node : BlockQuote)
blockquote { render_children(node.children) }
end
def render_child(node : Code)
code { render_children(node.children) }
end
def render_child(container : Container)
# Should never get called
raw "<!-- a Container was rendered -->"
end
def render_child(node : Emphasis)
em { render_children(node.children) }
end
def render_child(container : Empty)
# Should never get called
raw "<!-- an Empty was rendered -->"
end
def render_child(node : Heading3)
h3 { render_children(node.children) }
end
def render_child(node : Heading4)
h4 { render_children(node.children) }
end
def render_child(child : IFrame)
div class: "embedded" do
a href: child.href do
text "Click to visit embedded content"
end
end
end
def render_child(child : Image)
img src: child.src
end
def render_child(node : ListItem)
li { render_children(node.children) }
end
def render_child(node : OrderedList)
ol { render_children(node.children) }
end
def render_child(node : Paragraph)
para { render_children(node.children) }
end
def render_child(node : Preformatted)
pre { render_children(node.children) }
end
def render_child(node : Strong)
strong { render_children(node.children) }
end
def render_child(child : Text)
text child.content
end
def render_child(node : UnorderedList)
ul { render_children(node.children) }
end
end