discourse/app/models/post_stripper.rb
Andrei Prigorshnev be2eb3df44
FIX: user got notified about a mention inside a chat message quote (#24229)
When quoting a chat message in a post, if that message contains a mention, 
that mention should be ignored. But we've been detecting them and sending 
notifications to users. This PR fixes the problem. Since this fix is for 
the chat plugin, I had to introduce a new API for plugins:

    # We strip posts before detecting mentions, oneboxes, attachments etc. 
    # We strip those elements that shouldn't be detected. For example, 
    # a mention inside a quote should be ignored, so we strip it off. 
    # Using this API plugins can register their own post strippers. 
    def register_post_stripper(&block) 
    end
2023-11-08 23:13:25 +04:00

29 lines
869 B
Ruby

# frozen_string_literal: true
# We strip posts before detecting mentions, oneboxes, attachments etc.
# We strip those elements that shouldn't be detected. For example,
# a mention inside a quote should be ignored, so we strip it off.
class PostStripper
def self.strip(nokogiri_fragment)
run_core_strippers(nokogiri_fragment)
run_plugin_strippers(nokogiri_fragment)
nokogiri_fragment
end
private
def self.run_core_strippers(nokogiri_fragment)
nokogiri_fragment.css(
"pre .mention, aside.quote > .title, aside.quote .mention, aside.quote .mention-group, .onebox, .elided",
).remove
end
def self.run_plugin_strippers(nokogiri_fragment)
DiscoursePluginRegistry.post_strippers.each do |stripper|
stripper[:block].call(nokogiri_fragment)
end
end
private_class_method :run_core_strippers, :run_plugin_strippers
end