discourse/app/helpers/email_helper.rb

126 lines
2.6 KiB
Ruby

# frozen_string_literal: true
require "erb"
module EmailHelper
def mailing_list_topic(topic, post_count)
render(
partial: partial_for("mailing_list_post"),
locals: {
topic: topic,
post_count: post_count,
},
)
end
def mailing_list_topic_text(topic)
url, title = extract_details(topic)
raw(@markdown_linker.create(title, url))
end
def private_topic_title(topic)
I18n.t("system_messages.private_topic_title", id: topic.id)
end
def email_topic_link(topic)
url, title = extract_details(topic)
raw "<a href='#{Discourse.base_url}#{url}' style='color: ##{@anchor_color}'>#{title}</a>"
end
def email_html_template
EmailStyle
.new
.html
.sub("%{email_content}") { capture { yield } }
.gsub("%{html_lang}", html_lang)
.gsub("%{dark_mode_meta_tags}", dark_mode_meta_tags)
.gsub("%{dark_mode_styles}", dark_mode_styles)
.html_safe
end
protected
def dark_mode_meta_tags
"
<meta name='color-scheme' content='light dark' />
<meta name='supported-color-schemes' content='light dark' />
"
end
def dark_mode_styles
"
<style>
@media (prefers-color-scheme: dark) {
html {
background: #151515 !important;
}
h1,
h2,
h3,
h4,
h5,
h6,
p,
span,
td {
color: inherit !important;
}
[data-stripped-secure-media] {
border-color: #454545 !important;
}
[data-stripped-secure-upload] {
border-color: #454545 !important;
}
[dm='text-color'] {
color: #dddddd;
}
[dm='header'] {
background: #151515 !important;
}
[dm='topic-body'] {
background: #151515 !important;
border-bottom: 1px solid #454545 !important;
}
[dm='triangle'] {
border-top-color: #151515 !important;
}
[dm='body'] {
background: #222222 !important;
color: #dddddd !important;
}
[dm='body_primary'] {
background: #062e3d !important;
color: #dddddd !important;
}
[dm='bg'] {
background: #323232 !important;
border-color: #454545 !important;
}
}
</style>
"
end
def extract_details(topic)
if SiteSetting.private_email?
[topic.slugless_url, private_topic_title(topic)]
else
[topic.relative_url, format_topic_title(topic.title)]
end
end
def partial_for(name)
SiteSetting.private_email? ? "email/secure_#{name}" : "email/#{name}"
end
end