mirror of
https://github.com/discourse/discourse.git
synced 2025-02-20 11:48:26 -06:00
FIX: don't validate and render the polls inside a quoted post. (#15019)
Previously, we had issues while approving posts since we validated the polls inside quotes.
This commit is contained in:
parent
10a4bbfa72
commit
461936f211
@ -71,7 +71,10 @@ function initializePolls(api) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
function attachPolls(elem, helper) {
|
function attachPolls(elem, helper) {
|
||||||
const pollNodes = elem.querySelectorAll(".poll");
|
let pollNodes = [...elem.querySelectorAll(".poll")];
|
||||||
|
pollNodes = pollNodes.filter(
|
||||||
|
(node) => node.parentNode.tagName !== "BLOCKQUOTE"
|
||||||
|
);
|
||||||
if (!pollNodes.length || !helper) {
|
if (!pollNodes.length || !helper) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -286,6 +286,7 @@ class DiscoursePoll::Poll
|
|||||||
def self.extract(raw, topic_id, user_id = nil)
|
def self.extract(raw, topic_id, user_id = nil)
|
||||||
# TODO: we should fix the callback mess so that the cooked version is available
|
# TODO: we should fix the callback mess so that the cooked version is available
|
||||||
# in the validators instead of cooking twice
|
# in the validators instead of cooking twice
|
||||||
|
raw = raw.sub(/\[quote.+\/quote\]/m, '')
|
||||||
cooked = PrettyText.cook(raw, topic_id: topic_id, user_id: user_id)
|
cooked = PrettyText.cook(raw, topic_id: topic_id, user_id: user_id)
|
||||||
|
|
||||||
Nokogiri::HTML5(cooked).css("div.poll").map do |p|
|
Nokogiri::HTML5(cooked).css("div.poll").map do |p|
|
||||||
|
@ -211,4 +211,37 @@ describe DiscoursePoll::Poll do
|
|||||||
expect(messages.count).to eq(0)
|
expect(messages.count).to eq(0)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '.extract' do
|
||||||
|
it "skips the polls inside quote" do
|
||||||
|
raw = <<~RAW
|
||||||
|
[quote="username, post:1, topic:2"]
|
||||||
|
[poll type=regular result=always]
|
||||||
|
* 1
|
||||||
|
* 2
|
||||||
|
[/poll]
|
||||||
|
[/quote]
|
||||||
|
|
||||||
|
[poll type=regular result=always]
|
||||||
|
* 3
|
||||||
|
* 4
|
||||||
|
[/poll]
|
||||||
|
|
||||||
|
Post with a poll and a quoted poll.
|
||||||
|
RAW
|
||||||
|
|
||||||
|
expect(DiscoursePoll::Poll.extract(raw, 2)).to contain_exactly({
|
||||||
|
"name" => "poll",
|
||||||
|
"options" => [{
|
||||||
|
"html" => "3",
|
||||||
|
"id" => "68b434ff88aeae7054e42cd05a4d9056"
|
||||||
|
}, {
|
||||||
|
"html" => "4",
|
||||||
|
"id" => "aa2393b424f2f395abb63bf785760a3b"
|
||||||
|
}],
|
||||||
|
"status" => "open",
|
||||||
|
"type" => "regular"
|
||||||
|
})
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
Reference in New Issue
Block a user