Add latest changes from gitlab-org/gitlab@master

This commit is contained in:
GitLab Bot
2023-03-08 15:08:00 +00:00
parent 012f9a4b9e
commit 684838d4be
106 changed files with 825 additions and 183 deletions

View File

@ -5,25 +5,46 @@ require 'nokogiri'
module Gitlab
module Email
class HtmlToMarkdownParser < Html2Text
ADDITIONAL_TAGS = %w[em strong img details].freeze
IMG_ATTRS = %w[alt src].freeze
extend Gitlab::Utils::Override
# List of tags to be converted by Markdown.
#
# All attributes are removed except for the defined ones.
#
# <tag> => [<attribute to keep>, ...]
ALLOWED_TAG_ATTRIBUTES = {
'em' => [],
'strong' => [],
'details' => [],
'img' => %w[alt src]
}.freeze
private_constant :ALLOWED_TAG_ATTRIBUTES
# This redefinition can be removed once https://github.com/soundasleep/html2text_ruby/pull/30
# is merged and released.
def self.convert(html)
html = fix_newlines(replace_entities(html))
doc = Nokogiri::HTML(html)
HtmlToMarkdownParser.new(doc).convert
new(doc).convert
end
def iterate_over(node)
return super unless ADDITIONAL_TAGS.include?(node.name)
private
if node.name == 'img'
node.keys.each { |key| node.remove_attribute(key) unless IMG_ATTRS.include?(key) } # rubocop:disable Style/HashEachMethods
end
override :iterate_over
def iterate_over(node)
allowed_attributes = ALLOWED_TAG_ATTRIBUTES[node.name]
return super unless allowed_attributes
remove_attributes(node, allowed_attributes)
Kramdown::Document.new(node.to_html, input: 'html').to_commonmark
end
def remove_attributes(node, allowed_attributes)
to_remove = (node.keys - allowed_attributes)
to_remove.each { |key| node.remove_attribute(key) }
end
end
end
end