mirror of
https://github.com/discourse/discourse.git
synced 2024-12-05 10:03:43 +08:00
2d51833ca9
It used to insert block Oneboxes inside paragraphs which resulted in
invalid HTML. This needed an additional parsing for removal of empty
paragraphs and the resulting HTML could still be invalid.
This commit ensure that block Oneboxes are inserted correctly, by
splitting the paragraph containing the link and putting the block
between the two. Paragraphs left with nothing but whitespaces will
be removed.
Follow up to 7f3a30d79f
.
32 lines
881 B
Ruby
32 lines
881 B
Ruby
# frozen_string_literal: true
|
|
|
|
require 'nokogiri/xml/parse_options'
|
|
RSpec::Matchers.define :match_html do |expected|
|
|
match do |actual|
|
|
make_canonical_html(expected).eql? make_canonical_html(actual)
|
|
end
|
|
|
|
failure_message do |actual|
|
|
"after sanitizing for extra white space and compactness, expected:\n#{actual}\n to match:\n#{expected}"
|
|
end
|
|
|
|
failure_message_when_negated do |actual|
|
|
"after sanitizing for extra white space and compactness, expected:\n#{actual}\n not to match:\n#{expected}"
|
|
end
|
|
|
|
def make_canonical_html(html)
|
|
doc = Nokogiri::HTML5(html) do |config|
|
|
config[:options] = Nokogiri::XML::ParseOptions::NOBLANKS | Nokogiri::XML::ParseOptions::COMPACT
|
|
end
|
|
|
|
doc.traverse do |node|
|
|
if node.node_name&.downcase == "text"
|
|
node.content = node.content.gsub(/\s+/, ' ').strip
|
|
end
|
|
end
|
|
|
|
doc.to_html
|
|
end
|
|
|
|
end
|