1
1
defmodule PardallMarkdown.Content.HtmlUtils do
2
- alias PardallMarkdown.Content . {
3
- Utils ,
4
- TOC
5
- }
2
+ alias PardallMarkdown.Content.Utils
6
3
7
4
def generate_summary_from_html ( html , expected_length \\ 157 )
8
5
def generate_summary_from_html ( html , _ ) when html == nil or html == "" , do: nil
@@ -104,7 +101,7 @@ defmodule PardallMarkdown.Content.HtmlUtils do
104
101
def generate_anchors_and_toc ( html , % { slug: slug } ) do
105
102
{ updated_tree , % { toc: toc } } =
106
103
Floki . parse_fragment! ( html )
107
- |> Floki . traverse_and_update ( % { counters: % { } , toc_links: [ ] , toc: [ ] , toc_positions: % { } } , fn
104
+ |> Floki . traverse_and_update ( % { counters: % { } , toc: [ ] , toc_positions: % { } } , fn
108
105
{ "h" <> header_level , attrs , children } = el , acc ->
109
106
case find_node_text ( children ) do
110
107
nil ->
@@ -138,15 +135,7 @@ defmodule PardallMarkdown.Content.HtmlUtils do
138
135
title: title
139
136
}
140
137
141
- # toc_link = %TOC.Link{
142
- # id: link_id,
143
- # header: int_header_level,
144
- # parent_slug: slug,
145
- # title: title
146
- # }
147
-
148
138
acc = put_in ( acc [ :counters ] [ id ] , increase_id_count ( count ) )
149
- # acc = put_in(acc[:toc_links], acc.toc_links ++ [toc_link])
150
139
acc = put_in ( acc [ :toc ] , acc . toc ++ [ link ] )
151
140
acc = put_in ( acc [ :toc_positions ] , positions )
152
141
@@ -157,9 +146,6 @@ defmodule PardallMarkdown.Content.HtmlUtils do
157
146
{ el , acc }
158
147
end )
159
148
160
- # toc = TOC.generate(toc_links)
161
- # toc = toc |> PardallMarkdown.Utils.StructUtils.struct_to_map()
162
-
163
149
{ :ok , updated_tree |> Floki . raw_html ( ) , toc }
164
150
end
165
151
@@ -170,27 +156,28 @@ defmodule PardallMarkdown.Content.HtmlUtils do
170
156
when header == curr_header , do:
171
157
{ :level , curr_level , :positions , % { level: curr_level , header: curr_header , index: idx + 1 } }
172
158
173
- # defp get_toc_level(_, header, %{level: curr_level, header: curr_header, index: idx})
174
- # when header > curr_header, do:
175
- # {:level, curr_level, :positions, %{level: curr_level, header: curr_header, index: idx + 1}}
176
-
177
159
defp get_toc_level ( toc , header , % { level: curr_level , header: curr_header , index: idx } )
178
160
when header < curr_header do
179
- level =
180
- toc
181
- |> Enum . reverse ( )
182
- |> Enum . reduce ( curr_level , fn
161
+ [ _ | reversed_toc ] = toc |> Enum . reverse ( )
162
+
163
+ { _ , level } =
164
+ reversed_toc
165
+ |> Enum . reduce ( { curr_header , curr_level } , fn
166
+ _ , { acc_header , _ } = acc
167
+ when acc_header <= header ->
168
+ acc
169
+
170
+ % { header: i_header , level: i_level } , _acc
171
+ when i_header < header ->
172
+ { i_header , i_level + 1 }
173
+
183
174
% { header: i_header , level: i_level } , _acc
184
175
when i_header == header ->
185
- i_level
176
+ { i_header , i_level }
186
177
187
178
% { header: i_header } , acc
188
179
when i_header > header ->
189
180
acc
190
-
191
- % { header: i_header , level: i_level } , _acc
192
- when i_header < header ->
193
- i_level + 1
194
181
end )
195
182
196
183
{ :level , level , :positions , % { level: level , header: header , index: idx + 1 } }
0 commit comments