FIX: handle clicks counters in full quotes

This commit is contained in:
Régis Hanol 2019-05-17 14:17:29 +02:00
parent 081eb76308
commit 7696b92c8c
2 changed files with 26 additions and 4 deletions

View File

@ -106,10 +106,15 @@ class CookedPostProcessor
return if previous.blank? return if previous.blank?
previous_text = Nokogiri::HTML::fragment(previous).text.strip # remove click counters
quoted_text = @doc.css("aside.quote:first-child blockquote").first&.text&.strip previous_doc = Nokogiri::HTML::fragment(previous)
previous_doc.css("span.clicks").remove
return if previous_text != quoted_text previous_text = previous_doc.text.strip
quoted_text = @doc.css("aside.quote:first-child blockquote").first&.text&.strip || ""
return if previous_text.gsub(/(\s){2,}/, '\1') != quoted_text.gsub(/(\s){2,}/, '\1')
quote_regexp = /\A\s*\[quote.+?\[\/quote\]/im quote_regexp = /\A\s*\[quote.+?\[\/quote\]/im
quoteless_raw = @post.raw.sub(quote_regexp, "").strip quoteless_raw = @post.raw.sub(quote_regexp, "").strip

View File

@ -1305,7 +1305,7 @@ describe CookedPostProcessor do
end end
context "remove direct reply full quote" do context "full quote on direct reply" do
fab!(:topic) { Fabricate(:topic) } fab!(:topic) { Fabricate(:topic) }
let!(:post) { Fabricate(:post, topic: topic, raw: 'this is the "first" post') } let!(:post) { Fabricate(:post, topic: topic, raw: 'this is the "first" post') }
@ -1384,6 +1384,23 @@ describe CookedPostProcessor do
expect(reply.raw).to eq("and this is the third reply") expect(reply.raw).to eq("and this is the third reply")
end end
it "works with click counters" do
post = Fabricate(:post,
topic: topic,
raw: "[Discourse](https://www.discourse.org) is amazing!",
cooked: %{<p><a href="https://www.discourse.org">Discourse <span class="badge badge-notification clicks" title="1 click">1</span></a> is amazing!</p>}
)
reply = Fabricate(:post,
topic: topic,
raw: "[quote]\n[Discourse](https://www.discourse.org) is amazing!\n[/quote]\nIt sure is :+1:"
)
CookedPostProcessor.new(reply).remove_full_quote_on_direct_reply
expect(reply.raw).to eq("It sure is :+1:")
end
end end
end end