Skip to content
This repository was archived by the owner on Nov 8, 2022. It is now read-only.

Commit f51e197

Browse files
committed
refactor(editor): remove middle parse_block macro layer
1 parent 5129ae6 commit f51e197

File tree

8 files changed

+52
-209
lines changed

8 files changed

+52
-209
lines changed

lib/helper/converter/editor_to_html/class.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,15 @@ defmodule Helper.Converter.EditorToHTML.Class do
2525
"list" => %{
2626
"wrapper" => "list-wrapper",
2727
"item" => "list-item",
28-
"checklist_item" => "list-checklist__item",
2928
"label" => "list-label",
3029
"label__default" => "list-label__default",
3130
"label__red" => "list-label__red",
3231
"label__green" => "list-label__green",
3332
"label__warn" => "list-label__warn",
33+
"checklist_item" => "list-checklist__item",
34+
"checklist_checkbox" => "checklist__item-checkbox",
35+
"checklist_checkbox_checked" => "checklist__item-check-sign-active",
36+
"checklist_checksign" => "checklist__item-check-sign",
3437
"text" => "list-item-text",
3538
"checklist_text" => "list-checklist__item-text"
3639
}

lib/helper/converter/editor_to_html/frags/list.ex

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ defmodule Helper.Converter.EditorToHTML.Frags.List do
55
see https://editorjs.io/
66
"""
77
alias Helper.Converter.EditorToHTML.Class
8+
alias Helper.Types, as: T
89

910
@class get_in(Class.article(), ["list"])
1011

@@ -39,12 +40,16 @@ defmodule Helper.Converter.EditorToHTML.Frags.List do
3940
</div>)
4041
end
4142

42-
@spec frag(:checkbox, Boolean.t()) :: String.t()
43-
def frag(:checkbox, _checked) do
43+
@spec frag(:checkbox, Boolean.t()) :: T.html()
44+
def frag(:checkbox, checked) do
4445
checked_svg = svg(:checked)
4546

46-
~s(<div class="checklist__item-checkbox checklist__item-check-sign-active">
47-
<div class="checklist__item-check-sign">
47+
checkbox_class = @class["checklist_checkbox"]
48+
checkbox_checked_class = if checked, do: @class["checklist_checkbox_checked"], else: ""
49+
checkbox_checksign_class = @class["checklist_checksign"]
50+
51+
~s(<div class="#{checkbox_class} #{checkbox_checked_class}">
52+
<div class="#{checkbox_checksign_class}">
4853
#{checked_svg}
4954
</div>
5055
</div>)

lib/helper/converter/editor_to_html/header.ex

Lines changed: 0 additions & 21 deletions
This file was deleted.

lib/helper/converter/editor_to_html/index.ex

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,16 @@ defmodule Helper.Converter.EditorToHTML do
1212
see https://editorjs.io/
1313
"""
1414

15-
use Helper.Converter.EditorToHTML.{Header, Paragraph, List}
1615
alias Helper.Types, as: T
17-
1816
alias Helper.Utils
17+
1918
alias Helper.Converter.{EditorToHTML, HtmlSanitizer}
20-
alias EditorToHTML.{Class, Validator}
19+
alias EditorToHTML.{Class, Frags, Validator}
2120

2221
# alias EditorToHTML.Assets.{DelimiterIcons}
2322
@root_class Class.article()
2423

25-
@spec to_html(String.t()) :: T.ok_html()
24+
@spec to_html(String.t()) :: {:ok, T.html()}
2625
def to_html(string) when is_binary(string) do
2726
with {:ok, parsed} = string_to_json(string),
2827
{:ok, _} <- Validator.is_valid(parsed) do
@@ -49,6 +48,18 @@ defmodule Helper.Converter.EditorToHTML do
4948
{:ok, ~s(<div class="#{viewer_class}">#{content}</div>)}
5049
end
5150

51+
defp parse_block(%{"type" => "paragraph", "data" => %{"text" => text}}), do: "<p>#{text}</p>"
52+
53+
defp parse_block(%{"type" => "header", "data" => data}), do: Frags.Header.get(data)
54+
55+
defp parse_block(%{"type" => "list", "data" => data}) do
56+
%{"items" => items, "mode" => mode} = data
57+
58+
Enum.reduce(items, "", fn item, acc ->
59+
acc <> Frags.List.get_item(mode |> String.to_atom(), item)
60+
end)
61+
end
62+
5263
# defp parse_block(%{"type" => "image", "data" => data}) do
5364
# url = get_in(data, ["file", "url"])
5465

lib/helper/converter/editor_to_html/list.ex

Lines changed: 0 additions & 137 deletions
This file was deleted.

lib/helper/converter/editor_to_html/paragraph.ex

Lines changed: 0 additions & 14 deletions
This file was deleted.

lib/helper/types.ex

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,5 +42,4 @@ defmodule Helper.Types do
4242
html fragment
4343
"""
4444
@type html :: String.t()
45-
@type ok_html :: {:ok, String.t()}
4645
end

test/helper/converter/editor_to_html_test/list_test.exs

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,53 +4,50 @@ defmodule GroupherServer.Test.Helper.Converter.EditorToHTML.List do
44
use GroupherServerWeb.ConnCase, async: true
55

66
alias Helper.Converter.EditorToHTML, as: Parser
7-
alias Helper.Converter.EditorToHTML.{Class, Frags}
7+
alias Helper.Converter.EditorToHTML.Class
88

99
@root_class Class.article()
10-
# @class get_in(@root_class, ["list"])
10+
@class get_in(@root_class, ["list"])
1111

1212
describe "[list block unit]" do
13+
@items [
14+
%{
15+
"checked" => true,
16+
"hideLabel" => false,
17+
"indent" => 0,
18+
"label" => "label",
19+
"labelType" => "default",
20+
"text" => "list item"
21+
},
22+
%{
23+
"checked" => false,
24+
"hideLabel" => false,
25+
"indent" => 0,
26+
"label" => "label",
27+
"labelType" => "default",
28+
"text" => "list item"
29+
}
30+
]
1331
@editor_json %{
1432
"time" => 1_567_250_876_713,
1533
"blocks" => [
1634
%{
1735
"type" => "list",
1836
"data" => %{
1937
"mode" => "checklist",
20-
"items" => [
21-
%{
22-
"checked" => true,
23-
"hideLabel" => false,
24-
"indent" => 0,
25-
"label" => "label",
26-
"labelType" => "default",
27-
"text" => "list item"
28-
}
29-
]
38+
"items" => @items
3039
}
3140
}
3241
],
3342
"version" => "2.15.0"
3443
}
35-
@tag :wip
44+
@tag :wip2
3645
test "valid list parse should work" do
3746
{:ok, editor_string} = Jason.encode(@editor_json)
38-
# assert {:ok, converted} = Parser.to_html(editor_string)
3947
{:ok, converted} = Parser.to_html(editor_string)
4048

41-
real =
42-
Frags.List.get_item(:checklist, %{
43-
"checked" => true,
44-
"hideLabel" => false,
45-
"indent" => 0,
46-
"label" => "label",
47-
"labelType" => "default",
48-
"text" => "list item"
49-
})
50-
51-
viewer_class = @root_class["viewer"]
52-
bb = ~s(<div class="#{viewer_class}">#{real}</div>)
53-
assert converted == bb |> String.replace(" viewbox=\"", " viewBox=\"")
49+
checked_class = @class["checklist_checkbox_checked"]
50+
assert converted |> String.split(checked_class) |> length() == 2
5451
end
5552

5653
@editor_json %{

0 commit comments

Comments
 (0)