|
1 | 1 | module DecidimZuerich |
2 | 2 | module Upgrade |
3 | | - class WysiwygMigrator |
4 | | - class << self |
5 | | - def convert_list(list) |
6 | | - parent = Nokogiri::XML::Node.new(list.name, doc) |
7 | | - |
8 | | - create_item = lambda do |
9 | | - li = Nokogiri::XML::Node.new("li", doc) |
10 | | - paragraph = Nokogiri::XML::Node.new("p", doc) |
11 | | - li.add_child(paragraph) |
12 | | - [li, paragraph] |
13 | | - end |
14 | | - add_empty_child = lambda do |child_parent| |
15 | | - li, paragraph = create_item.call |
16 | | - child_parent.add_child(li) |
17 | | - [li, paragraph] |
18 | | - end |
19 | | - |
20 | | - li = paragraph = nil |
21 | | - current_parent = parent |
22 | | - current_level = 0 |
23 | | - list.children.each do |item| |
24 | | - next unless item.is_a?(Nokogiri::XML::Element) && item.name == "li" |
| 3 | + module WysiwygMigrator |
| 4 | + def convert_list(list) |
| 5 | + parent = Nokogiri::XML::Node.new(list.name, doc) |
| 6 | + |
| 7 | + create_item = lambda do |
| 8 | + li = Nokogiri::XML::Node.new("li", doc) |
| 9 | + paragraph = Nokogiri::XML::Node.new("p", doc) |
| 10 | + li.add_child(paragraph) |
| 11 | + [li, paragraph] |
| 12 | + end |
| 13 | + add_empty_child = lambda do |child_parent| |
| 14 | + li, paragraph = create_item.call |
| 15 | + child_parent.add_child(li) |
| 16 | + [li, paragraph] |
| 17 | + end |
25 | 18 |
|
26 | | - indent = detect_indent(item) |
27 | | - if indent == current_level || li.nil? |
28 | | - if item.child&.name == "p" |
29 | | - # This content has already been migrated so we do not need to |
30 | | - # re-migrate it. |
31 | | - append_node(current_parent, convert_node(item)) |
32 | | - next |
33 | | - else |
34 | | - li, paragraph = add_empty_child.call(current_parent) |
35 | | - end |
| 19 | + li = paragraph = nil |
| 20 | + current_parent = parent |
| 21 | + current_level = 0 |
| 22 | + list.children.each do |item| |
| 23 | + next unless item.is_a?(Nokogiri::XML::Element) && item.name == "li" |
| 24 | + |
| 25 | + indent = detect_indent(item) |
| 26 | + if indent == current_level || li.nil? |
| 27 | + if item.child&.name == "p" |
| 28 | + # This content has already been migrated so we do not need to |
| 29 | + # re-migrate it. |
| 30 | + append_node(current_parent, convert_node(item)) |
| 31 | + next |
| 32 | + else |
| 33 | + puts 'item.child is empty' if item.child.nil? |
| 34 | + li, paragraph = add_empty_child.call(current_parent) |
36 | 35 | end |
| 36 | + end |
37 | 37 |
|
38 | | - while indent > current_level |
39 | | - sublist = Nokogiri::XML::Node.new(list.name, doc) |
40 | | - li.add_child(sublist) |
41 | | - li, paragraph = create_item.call |
42 | | - sublist.add_child(li) |
43 | | - |
44 | | - current_level += 1 |
45 | | - current_parent = sublist |
46 | | - end |
47 | | - while indent < current_level |
48 | | - current_level -= 1 |
49 | | - li = current_parent.parent |
50 | | - current_parent = li.parent |
51 | | - paragraph = li.child |
| 38 | + while indent > current_level |
| 39 | + sublist = Nokogiri::XML::Node.new(list.name, doc) |
| 40 | + li.add_child(sublist) |
| 41 | + li, paragraph = create_item.call |
| 42 | + sublist.add_child(li) |
52 | 43 |
|
53 | | - li, paragraph = add_empty_child.call(current_parent) if indent == current_level |
54 | | - end |
| 44 | + current_level += 1 |
| 45 | + current_parent = sublist |
| 46 | + end |
| 47 | + while indent < current_level |
| 48 | + current_level -= 1 |
| 49 | + li = current_parent.parent |
| 50 | + current_parent = li.parent |
| 51 | + paragraph = li.child |
55 | 52 |
|
56 | | - item.children.each { |child| append_node(paragraph, convert_node(child)) } |
| 53 | + li, paragraph = add_empty_child.call(current_parent) if indent == current_level |
57 | 54 | end |
58 | 55 |
|
59 | | - parent |
| 56 | + item.children.each { |child| append_node(paragraph, convert_node(child)) } |
60 | 57 | end |
| 58 | + |
| 59 | + parent |
61 | 60 | end |
62 | 61 | end |
63 | 62 | end |
|
0 commit comments