# 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