mirror of
https://github.com/discourse/discourse.git
synced 2024-11-22 15:16:08 +08:00
FIX: non-oneboxed links on separate lines should stay on separate lines
This commit is contained in:
parent
fcd20a70d7
commit
3c8b43bb01
|
@ -77,6 +77,8 @@ module Oneboxer
|
||||||
doc
|
doc
|
||||||
end
|
end
|
||||||
|
|
||||||
|
HTML5_BLOCK_ELEMENTS ||= %w{address article aside blockquote canvas center dd div dl dt fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hgroup hr li main nav noscript ol output p pre section table tfoot ul video}
|
||||||
|
|
||||||
def self.apply(string_or_doc, args = nil)
|
def self.apply(string_or_doc, args = nil)
|
||||||
doc = string_or_doc
|
doc = string_or_doc
|
||||||
doc = Nokogiri::HTML::fragment(doc) if doc.is_a?(String)
|
doc = Nokogiri::HTML::fragment(doc) if doc.is_a?(String)
|
||||||
|
@ -88,8 +90,9 @@ module Oneboxer
|
||||||
parsed_onebox = Nokogiri::HTML::fragment(onebox)
|
parsed_onebox = Nokogiri::HTML::fragment(onebox)
|
||||||
next unless parsed_onebox.children.count > 0
|
next unless parsed_onebox.children.count > 0
|
||||||
|
|
||||||
# special logic to strip empty p elements
|
if element&.parent&.node_name&.downcase == "p" &&
|
||||||
if element&.parent&.node_name&.downcase == "p" && element&.parent&.children&.count == 1
|
element.parent.children.count == 1 &&
|
||||||
|
HTML5_BLOCK_ELEMENTS.include?(parsed_onebox.children[0].node_name.downcase)
|
||||||
element = element.parent
|
element = element.parent
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -98,6 +101,9 @@ module Oneboxer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# strip empty <p> elements
|
||||||
|
doc.css("p").each { |p| p.remove if p.children.empty? }
|
||||||
|
|
||||||
Result.new(doc, changed)
|
Result.new(doc, changed)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -103,7 +103,7 @@ describe Oneboxer do
|
||||||
post = Fabricate(:post, raw: Discourse.base_url + "/new?'class=black")
|
post = Fabricate(:post, raw: Discourse.base_url + "/new?'class=black")
|
||||||
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
cpp = CookedPostProcessor.new(post, invalidate_oneboxes: true)
|
||||||
cpp.post_process_oneboxes
|
cpp.post_process_oneboxes
|
||||||
expect(cpp.html).to eq("<a href=\"#{Discourse.base_url}/new?%27class=black\">http://test.localhost/new?%27class=black</a>")
|
expect(cpp.html).to eq("<p><a href=\"#{Discourse.base_url}/new?%27class=black\">http://test.localhost/new?%27class=black</a></p>")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user