diff --git a/spec/classes/markup_converter_spec.cr b/spec/classes/markup_converter_spec.cr index f034a99..f77022e 100644 --- a/spec/classes/markup_converter_spec.cr +++ b/spec/classes/markup_converter_spec.cr @@ -126,7 +126,7 @@ describe MarkupConverter do result.should eq([ Text.new("I am a "), - Anchor.new(text: "Link", href: "https://example.com"), + Anchor.new(children: [Text.new("Link")] of Child, href: "https://example.com"), ]) end @@ -160,7 +160,7 @@ describe MarkupConverter do result.should eq([ Text.new("Hi "), - UserAnchor.new(text: "Dr Nick", userId: "abc123"), + UserAnchor.new(children: [Text.new("Dr Nick")] of Child, userId: "abc123"), Text.new("!"), ]) end diff --git a/spec/classes/paragraph_converter_spec.cr b/spec/classes/paragraph_converter_spec.cr index 0591690..4eda931 100644 --- a/spec/classes/paragraph_converter_spec.cr +++ b/spec/classes/paragraph_converter_spec.cr @@ -190,7 +190,10 @@ describe ParagraphConverter do Image.new(src: "image.png", originalWidth: 1000, originalHeight: 600), FigureCaption.new(children: [ Text.new("Image by "), - Anchor.new(href: "https://unsplash.com/@someuser", text: "someuser"), + Anchor.new( + children: [Text.new("someuser")] of Child, + href: "https://unsplash.com/@someuser" + ), ] of Child), ] of Child), ] diff --git a/spec/components/page_content_spec.cr b/spec/components/page_content_spec.cr index 32195f9..fdb07bb 100644 --- a/spec/components/page_content_spec.cr +++ b/spec/components/page_content_spec.cr @@ -40,7 +40,7 @@ describe PageContent do it "renders an anchor" do page = Page.new(nodes: [ - Anchor.new(href: "https://example.com", text: "link"), + Anchor.new(children: [Text.new("link")] of Child, href: "https://example.com"), ] of Child) html = PageContent.new(page: page).render_to_string @@ -229,7 +229,7 @@ describe PageContent do it "renders a user anchor" do page = Page.new(nodes: [ - UserAnchor.new(userId: "abc123", text: "Some User"), + UserAnchor.new(children: [Text.new("Some User")] of Child, userId: "abc123"), ] of Child) html = PageContent.new(page: page).render_to_string diff --git a/src/classes/markup_converter.cr b/src/classes/markup_converter.cr index 5830d77..56ebfe9 100644 --- a/src/classes/markup_converter.cr +++ b/src/classes/markup_converter.cr @@ -39,9 +39,9 @@ class MarkupConverter case markup.type when PostResponse::MarkupType::A if href = markup.href - container = Anchor.new(href: href, text: to_be_marked) + container = Anchor.new(children: [Text.new(to_be_marked)] of Child, href: href) elsif userId = markup.userId - container = UserAnchor.new(userId: userId, text: to_be_marked) + container = UserAnchor.new(children: [Text.new(to_be_marked)] of Child, userId: userId) else container = Empty.new end diff --git a/src/components/page_content.cr b/src/components/page_content.cr index 3019b6e..9ccf7cd 100644 --- a/src/components/page_content.cr +++ b/src/components/page_content.cr @@ -13,7 +13,7 @@ class PageContent < BaseComponent end def render_child(node : Anchor) - a(href: node.href) { text node.text } + a(href: node.href) { render_children(node.children) } end def render_child(node : BlockQuote) @@ -95,6 +95,6 @@ class PageContent < BaseComponent end def render_child(node : UserAnchor) - a(href: node.href) { text node.text } + a(href: node.href) { render_children(node.children) } end end diff --git a/src/models/nodes.cr b/src/models/nodes.cr index cf699e6..f17d450 100644 --- a/src/models/nodes.cr +++ b/src/models/nodes.cr @@ -1,5 +1,5 @@ module Nodes - alias Leaf = Text | Image | IFrame | Anchor | UserAnchor + alias Leaf = Text | Image | IFrame alias Child = Container | Leaf | Empty alias Children = Array(Child) @@ -136,15 +136,14 @@ module Nodes end end - class Anchor + class Anchor < Container getter href : String - getter text : String - def initialize(@href : String, @text : String) + def initialize(@children : Children, @href : String) end def ==(other : Anchor) - other.href == href && other.text == text + other.children == children && other.href == href end def empty? @@ -152,18 +151,17 @@ module Nodes end end - class UserAnchor + class UserAnchor < Container USER_BASE_URL = "https://medium.com/u/" getter href : String - getter text : String - def initialize(userId : String, @text : String) + def initialize(@children : Children, userId : String) @href = USER_BASE_URL + userId end def ==(other : UserAnchor) - other.href == href && other.text == text + other.children == children && other.href == href end def empty?