# frozen_string_literal: true

# name: discourse-details
# about: HTML5.1 Details polyfill for Discourse
# version: 0.4
# authors: RĂ©gis Hanol
# url: https://github.com/discourse/discourse/tree/main/plugins/discourse-details

enabled_site_setting :details_enabled
hide_plugin

register_asset "stylesheets/details.scss"

after_initialize do
  Email::Styles.register_plugin_style do |fragment|
    # remove all elided content
    fragment.css("details.elided").each(&:remove)

    # replace all details with their summary in emails
    fragment
      .css("details")
      .each do |details|
        summary = details.css("summary")
        if summary && summary[0]
          summary = summary[0]
          if summary && summary.respond_to?(:name)
            summary.name = "p"
            details.replace(summary)
          end
        end
      end
  end

  on(:reduce_cooked) do |fragment, post|
    fragment
      .css("details")
      .each do |el|
        text = el.css("summary").text
        link = fragment.document.create_element("a")
        link["href"] = post&.url.presence || Discourse.base_url
        link.content = I18n.t("details.excerpt_details")
        el.replace CGI.escapeHTML(text) + " " + link.to_html
      end
  end
end