Module: IsoDoc::HtmlFunction::Comments
- Included in:
- IsoDoc::HeadlessHtmlConvert, IsoDoc::HtmlConvert, PdfConvert
- Defined in:
- lib/isodoc/html_function/comments.rb
Constant Summary collapse
- COMMENT_IN_COMMENT_LIST =
'//div[@style="mso-element:comment-list"]//'\ 'span[@style="MsoCommentReference"]'.freeze
- COMMENT_TARGET_XREFS =
"//span[@style='mso-special-character:comment']/@target".freeze
Instance Method Summary collapse
- #comment_attributes(docxml, x) ⇒ Object
- #comment_cleanup(docxml) ⇒ Object
- #comment_link_attrs(fnote, node) ⇒ Object
- #comments(div) ⇒ Object
- #embed_comment_in_comment_list(docxml) ⇒ Object
- #get_comments_from_text(docxml, link_order) ⇒ Object
- #in_comment ⇒ Object
- #insert_comment_cont(from, upto, target) ⇒ Object
-
#make_comment_link(out, fnote, node) ⇒ Object
add in from and to links to move the comment into place.
- #make_comment_target(out) ⇒ Object
- #make_comment_text(node, fnote) ⇒ Object
- #move_comment_link_to_from(docxml) ⇒ Object
- #move_comment_link_to_from1(x, fromlink) ⇒ Object
- #reorder_comments_by_comment_link(docxml) ⇒ Object
- #review_note_parse(node, out) ⇒ Object
- #skip_comment_wrap(from) ⇒ Object
- #wrap_comment_cont(from, target) ⇒ Object
Instance Method Details
#comment_attributes(docxml, x) ⇒ Object
79 80 81 82 83 84 85 86 |
# File 'lib/isodoc/html_function/comments.rb', line 79 def comment_attributes(docxml, x) fromlink = docxml.at("//*[@id='#{x['from']}']") return(nil) if fromlink.nil? tolink = docxml.at("//*[@id='#{x['to']}']") || fromlink target = docxml.at("//*[@id='#{x['target']}']") { from: fromlink, to: tolink, target: target } end |
#comment_cleanup(docxml) ⇒ Object
54 55 56 57 58 |
# File 'lib/isodoc/html_function/comments.rb', line 54 def comment_cleanup(docxml) # move_comment_link_to_from(docxml) # reorder_comments_by_comment_link(docxml) # embed_comment_in_comment_list(docxml) end |
#comment_link_attrs(fnote, node) ⇒ Object
23 24 25 26 27 |
# File 'lib/isodoc/html_function/comments.rb', line 23 def comment_link_attrs(fnote, node) { style: "MsoCommentReference", target: fnote, class: "commentLink", from: node["from"], to: node["to"] } end |
#comments(div) ⇒ Object
8 9 10 11 12 13 |
# File 'lib/isodoc/html_function/comments.rb', line 8 def comments(div) # return if @comments.empty? # div.div **{ style: "mso-element:comment-list" } do |div1| # @comments.each { |fn| div1.parent << fn } # end end |
#embed_comment_in_comment_list(docxml) ⇒ Object
64 65 66 67 68 69 70 |
# File 'lib/isodoc/html_function/comments.rb', line 64 def (docxml) docxml.xpath(COMMENT_IN_COMMENT_LIST).each do |x| n = x.next_element n&.children&.first&.add_previous_sibling(x.remove) end docxml end |
#get_comments_from_text(docxml, link_order) ⇒ Object
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/isodoc/html_function/comments.rb', line 117 def get_comments_from_text(docxml, link_order) comments = [] docxml.xpath("//div[@style='mso-element:comment']").each do |c| next unless c["id"] && !link_order[c["id"]].nil? comments << { text: c.remove.to_s, id: c["id"] } end comments.sort! { |a, b| link_order[a[:id]] <=> link_order[b[:id]] } # comments end |
#in_comment ⇒ Object
4 5 6 |
# File 'lib/isodoc/html_function/comments.rb', line 4 def in_comment @in_comment end |
#insert_comment_cont(from, upto, target) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/isodoc/html_function/comments.rb', line 97 def insert_comment_cont(from, upto, target) # includes_to = from.at(".//*[@id='#{upto}']") while !from.nil? && from["id"] != upto following = from.xpath("./following::*") (from = following.shift) && incl_to = from.at(".//*[@id='#{upto}']") while !incl_to.nil? && !from.nil? && skip_comment_wrap(from) (from = following.shift) && incl_to = from.at(".//*[@id='#{upto}']") end wrap_comment_cont(from, target) if !from.nil? end end |
#make_comment_link(out, fnote, node) ⇒ Object
add in from and to links to move the comment into place
30 31 32 33 34 35 36 |
# File 'lib/isodoc/html_function/comments.rb', line 30 def make_comment_link(out, fnote, node) out.span(**comment_link_attrs(fnote, node)) do |s1| s1.a **{ style: "mso-comment-reference:SMC_#{fnote};"\ "mso-comment-date:#{node['date'].gsub(/[-:Z]/, '')}" } end end |
#make_comment_target(out) ⇒ Object
38 39 40 41 42 |
# File 'lib/isodoc/html_function/comments.rb', line 38 def make_comment_target(out) out.span **{ style: "MsoCommentReference" } do |s1| s1.span **{ style: "mso-special-character:comment" } end end |
#make_comment_text(node, fnote) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/isodoc/html_function/comments.rb', line 44 def make_comment_text(node, fnote) noko do |xml| xml.div **{ style: "mso-element:comment", id: fnote } do |div| div.span **{ style: %{mso-comment-author:"#{node['reviewer']}"} } make_comment_target(div) node.children.each { |n| parse(n, div) } end end.join("\n") end |
#move_comment_link_to_from(docxml) ⇒ Object
109 110 111 112 113 114 115 |
# File 'lib/isodoc/html_function/comments.rb', line 109 def move_comment_link_to_from(docxml) docxml.xpath('//span[@style="MsoCommentReference"][@from]').each do |x| attrs = comment_attributes(docxml, x) || next move_comment_link_to_from1(x, attrs[:from]) insert_comment_cont(attrs[:from], x["to"], x["target"]) end end |
#move_comment_link_to_from1(x, fromlink) ⇒ Object
72 73 74 75 76 77 |
# File 'lib/isodoc/html_function/comments.rb', line 72 def move_comment_link_to_from1(x, fromlink) x.remove link = x.at(".//a") fromlink.replace(x) link.children = fromlink end |
#reorder_comments_by_comment_link(docxml) ⇒ Object
131 132 133 134 135 136 137 138 139 |
# File 'lib/isodoc/html_function/comments.rb', line 131 def reorder_comments_by_comment_link(docxml) link_order = {} docxml.xpath(COMMENT_TARGET_XREFS).each_with_index do |target, i| link_order[target.value] = i end comments = get_comments_from_text(docxml, link_order) list = docxml.at("//*[@style='mso-element:comment-list']") || return list.children = comments.map { |c| c[:text] }.join("\n") end |
#review_note_parse(node, out) ⇒ Object
15 16 17 18 19 20 21 |
# File 'lib/isodoc/html_function/comments.rb', line 15 def review_note_parse(node, out) # fn = @comments.length + 1 # make_comment_link(out, fn, node) # @in_comment = true # @comments << make_comment_text(node, fn) # @in_comment = false end |
#skip_comment_wrap(from) ⇒ Object
93 94 95 |
# File 'lib/isodoc/html_function/comments.rb', line 93 def skip_comment_wrap(from) from["style"] != "mso-special-character:comment" end |
#wrap_comment_cont(from, target) ⇒ Object
88 89 90 91 |
# File 'lib/isodoc/html_function/comments.rb', line 88 def wrap_comment_cont(from, target) s = from.replace("<span style='mso-comment-continuation:#{target}'>") s.first.children = from end |