@@ -29,7 +29,8 @@ defmodule Helper.Converter.Article do
29
29
with { :ok , body_map } <- to_editor_map ( body ) ,
30
30
{ :ok , body_html } <- EditorToHTML . to_html ( body_map ) ,
31
31
{ :ok , body_encode } <- Jason . encode ( body_map ) do
32
- % { body: body_encode , body_html: body_html , body_map: body_map } |> done
32
+ % { body: body_encode , body_html: body_html , body_map: body_map }
33
+ |> done
33
34
end
34
35
end
35
36
@@ -39,18 +40,47 @@ defmodule Helper.Converter.Article do
39
40
parse digest by concat all the paragraph blocks
40
41
"""
41
42
def parse_digest ( % { "blocks" => blocks } = body_map ) when is_map ( body_map ) do
42
- paragraph_blocks = Enum . filter ( blocks , & ( & 1 [ "type" ] == "paragraph" ) )
43
+ digest_blocks = Enum . filter ( blocks , & ( & 1 [ "type" ] == "paragraph" ) )
43
44
44
- Enum . reduce ( paragraph_blocks , "" , fn block , acc ->
45
+ Enum . reduce ( digest_blocks , "" , fn block , acc ->
45
46
text = block [ "data" ] [ "text" ] |> HtmlSanitizer . strip_all_tags ( )
46
47
acc <> text <> " "
47
48
end )
48
49
|> String . trim_trailing ( )
50
+ |> parse_other_blocks_ifneed ( blocks )
49
51
|> String . slice ( 0 , @ article_digest_length )
50
52
|> done
51
53
end
52
54
53
- def parse_digest ( _ ) , do: { :ok , "unknow digest" }
55
+ def parse_digest ( _ ) , do: { :ok , "无可预览摘要" }
56
+
57
+ # 如果文章里没有段落,可以使用列表内容(如果有的话)作为预览内容
58
+ defp parse_other_blocks_ifneed ( "" , blocks ) do
59
+ list_blocks = Enum . filter ( blocks , & ( & 1 [ "type" ] == "list" ) )
60
+
61
+ digest =
62
+ case list_blocks do
63
+ [ ] ->
64
+ "无可预览摘要"
65
+
66
+ _ ->
67
+ digest_block = list_blocks |> List . first ( )
68
+
69
+ Enum . reduce ( digest_block [ "data" ] [ "items" ] , "" , fn item , acc ->
70
+ text = item [ "text" ]
71
+ acc <> text <> " "
72
+ end )
73
+ |> String . trim_trailing ( )
74
+ |> HtmlSanitizer . strip_all_tags ( )
75
+ |> String . slice ( 0 , @ article_digest_length )
76
+ end
77
+
78
+ digest
79
+ end
80
+
81
+ defp parse_other_blocks_ifneed ( paragraph_digest , _blocks ) do
82
+ paragraph_digest
83
+ end
54
84
55
85
@ doc """
56
86
decode article body string to editor map and assign id for each block