@@ -4,43 +4,46 @@ defmodule Helper.RichTextParser do
4
4
5
5
see https://editorjs.io/
6
6
"""
7
+ alias Helper.Sanitizer
8
+
7
9
@ html_class_prefix "cps-viewer"
8
10
9
11
def convert_to_html ( string ) when is_binary ( string ) do
10
12
with { :ok , parsed } = string_to_json ( string ) ,
11
13
true <- valid_editor_data? ( parsed ) do
12
14
content =
13
15
Enum . reduce ( parsed [ "blocks" ] , "" , fn block , acc ->
14
- acc <> parse_block ( block )
16
+ clean_html = block |> parse_block |> Sanitizer . sanitize ( )
17
+ acc <> clean_html
15
18
end )
16
19
17
20
"<div class=\" #{ @ html_class_prefix } \" >#{ content } <div>"
18
- |> IO . inspect ( label: "hello" )
21
+ # |> IO.inspect(label: "hello")
19
22
end
20
23
end
21
24
22
25
# IO.inspect(data, label: "parse header")
23
- # defp parse_block(%{"type" => "header", "data" => data}) do
24
- # text = get_in(data, ["text"])
25
- # level = get_in(data, ["level"])
26
+ defp parse_block ( % { "type" => "header" , "data" => data } ) do
27
+ text = get_in ( data , [ "text" ] )
28
+ level = get_in ( data , [ "level" ] )
26
29
27
- # "<h#{level}>#{text}</h#{level}>"
28
- # end
30
+ "<h#{ level } >#{ text } </h#{ level } >"
31
+ end
29
32
30
33
# IO.inspect(data, label: "parse paragraph")
31
- # defp parse_block(%{"type" => "paragraph", "data" => data}) do
32
- # text = get_in(data, ["text"])
34
+ defp parse_block ( % { "type" => "paragraph" , "data" => data } ) do
35
+ text = get_in ( data , [ "text" ] )
33
36
34
- # "<p>#{text}</p>"
35
- # end
37
+ "<p>#{ text } </p>"
38
+ end
36
39
37
- # defp parse_block(%{"type" => "image", "data" => data}) do
38
40
# IO.inspect(data, label: "parse image")
39
- # url = get_in(data, ["file", "url"])
41
+ defp parse_block ( % { "type" => "image" , "data" => data } ) do
42
+ url = get_in ( data , [ "file" , "url" ] )
40
43
41
- # "<div class=\"#{@html_class_prefix}-image\"><img src=\"#{url}\"></div>"
42
- # |> IO.inspect(label: "iamge ret")
43
- # end
44
+ "<div class=\" #{ @ html_class_prefix } -image\" ><img src=\" #{ url } \" ></div>"
45
+ # |> IO.inspect(label: "iamge ret")
46
+ end
44
47
45
48
defp parse_block ( % { "type" => "list" , "data" => % { "style" => "unordered" , "items" => items } } ) do
46
49
content =
@@ -81,10 +84,9 @@ defmodule Helper.RichTextParser do
81
84
# |> IO.inspect(label: "quote ret")
82
85
end
83
86
84
- defp parse_block ( block ) do
85
- IO . puts ( "." )
86
- ""
87
- # IO.inspect(block, label: "parse unknow")
87
+ defp parse_block ( _block ) do
88
+ # IO.puts("[unknow block]")
89
+ "[unknow block]"
88
90
end
89
91
90
92
def string_to_json ( string ) , do: Jason . decode ( string )