30 lines
764 B
Ruby
30 lines
764 B
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
require 'nokogiri'
|
||
|
|
||
|
module Gitlab
|
||
|
module Email
|
||
|
class HtmlToMarkdownParser < Html2Text
|
||
|
ADDITIONAL_TAGS = %w[em strong img details].freeze
|
||
|
IMG_ATTRS = %w[alt src].freeze
|
||
|
|
||
|
def self.convert(html)
|
||
|
html = fix_newlines(replace_entities(html))
|
||
|
doc = Nokogiri::HTML(html)
|
||
|
|
||
|
HtmlToMarkdownParser.new(doc).convert
|
||
|
end
|
||
|
|
||
|
def iterate_over(node)
|
||
|
return super unless ADDITIONAL_TAGS.include?(node.name)
|
||
|
|
||
|
if node.name == 'img'
|
||
|
node.keys.each { |key| node.remove_attribute(key) unless IMG_ATTRS.include?(key) } # rubocop:disable Style/HashEachMethods
|
||
|
end
|
||
|
|
||
|
Kramdown::Document.new(node.to_html, input: 'html').to_commonmark
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|