23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
# File 'lib/brief/document/section/builder.rb', line 23
def run
source.length.times do
source.each_with_index do |item, index|
n = index + 1
level, fragments = item
next_level, next_fragments = source[n]
if next_level && (next_level == level) && (level > low)
new_fragment = (fragments + next_fragments).map(&:to_html).join('')
source[index] = [level, [Nokogiri::HTML.fragment(new_fragment)]]
source[n] = nil
end
end
source.compact!
end
until even? || maxed_out?
source.map! do |item|
level, fragments = item
[level, fragments.first]
end
source.each_with_index do |item, index|
level, fragment = item
n = index + 1
next_level, next_fragment = source[n]
if fragment && next_level && (next_level > level)
parent = fragment.css('section, article').first
parent.add_child(next_fragment)
source[index] = [level, fragment]
source[n] = nil
end
end
source.compact!
@cycles += 1
end
self.nodes = source.map(&:last).flatten
nodes.each do |node|
parent = node.css('section, article').first
parents_first_el = parent && parent.children.first
if parents_first_el && %w(h1 h2 h3 h4 h5 h6).include?(parent.children.first.name)
parent['data-heading'] = parents_first_el.text
end
end
nodes.map!(&:to_html)
end
|