Skip to content

Commit 986e100

Browse files
committed
Add HTML export for embed elements
This is just a stub, until embedded objects are resolved properly via OEmbed calls.
1 parent 86be60f commit 986e100

File tree

5 files changed

+69
-3
lines changed

5 files changed

+69
-3
lines changed

lib/article_json.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@
4646
require_relative 'article_json/export/html/elements/image'
4747
require_relative 'article_json/export/html/elements/text_box'
4848
require_relative 'article_json/export/html/elements/quote'
49+
require_relative 'article_json/export/html/elements/embed'

lib/article_json/export/html/elements/base.rb

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,14 @@ def create_text_node(text)
3030
class << self
3131
def element_classes
3232
{
33+
text: Text,
34+
paragraph: Paragraph,
3335
heading: Heading,
34-
image: Image,
3536
list: List,
36-
paragraph: Paragraph,
37-
text: Text,
37+
image: Image,
3838
text_box: TextBox,
3939
quote: Quote,
40+
embed: Embed,
4041
}
4142
end
4243
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module ArticleJSON
2+
module Export
3+
module HTML
4+
module Elements
5+
class Embed < Base
6+
include Shared::Caption
7+
8+
def build
9+
create_element(:figure).tap do |figure|
10+
figure.add_child(embed_node)
11+
figure.add_child(caption_node(:figcaption))
12+
end
13+
end
14+
15+
private
16+
17+
def embed_node
18+
create_element(:div, embedded_object, class: 'embed')
19+
end
20+
21+
def embedded_object
22+
"Embedded Object: #{@element.embed_type}-#{@element.embed_id}"
23+
end
24+
end
25+
end
26+
end
27+
end
28+
end

spec/article_json/elements/export/html/base_spec.rb

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@
6363
end
6464
it { should eq '<aside><p>Foo Bar</p><small>Baz</small></aside>' }
6565
end
66+
67+
context 'when the source element is an embedded element' do
68+
let(:source_element) do
69+
ArticleJSON::Elements::Embed.new(
70+
embed_type: :something,
71+
embed_id: 666,
72+
caption: [sample_text]
73+
)
74+
end
75+
let(:expected_html) do
76+
'<figure><div class="embed">Embedded Object: something-666</div>' \
77+
'<figcaption>Foo Bar</figcaption></figure>'
78+
end
79+
it { should eq expected_html }
80+
end
6681
end
6782

6883
describe '#element_classes' do
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
describe ArticleJSON::Export::HTML::Elements::Embed do
2+
subject(:element) { described_class.new(source_element) }
3+
4+
let(:source_element) do
5+
ArticleJSON::Elements::Embed.new(
6+
embed_type: :something,
7+
embed_id: 666,
8+
caption: [ArticleJSON::Elements::Text.new(content: 'Foo Bar')],
9+
tags: %w(test)
10+
)
11+
end
12+
13+
describe '#build' do
14+
subject { element.build.to_html(save_with: 0) }
15+
let(:expected_html) do
16+
'<figure><div class="embed">Embedded Object: something-666</div>' \
17+
'<figcaption>Foo Bar</figcaption></figure>'
18+
end
19+
it { should eq expected_html }
20+
end
21+
end

0 commit comments

Comments
 (0)