discourse/app/helpers/user_notifications_helper.rb
Sam Saffron 30990006a9 DEV: enable frozen string literal on all files
This reduces chances of errors where consumers of strings mutate inputs
and reduces memory usage of the app.

Test suite passes now, but there may be some stuff left, so we will run
a few sites on a branch prior to merging
2019-05-13 09:31:32 +08:00

113 lines
2.9 KiB
Ruby

# frozen_string_literal: true
module UserNotificationsHelper
include GlobalPath
def indent(text, by = 2)
spacer = " " * by
result = +""
text.each_line do |line|
result << spacer << line
end
result
end
def correct_top_margin(html, desired)
fragment = Nokogiri::HTML.fragment(html)
if para = fragment.css("p:first").first
para["style"] = "margin-top: #{desired};"
end
fragment.to_html.html_safe
end
def logo_url
logo_url = SiteSetting.site_digest_logo_url
logo_url = SiteSetting.site_logo_url if logo_url.blank? || logo_url =~ /\.svg$/i
return nil if logo_url.blank? || logo_url =~ /\.svg$/i
logo_url
end
def html_site_link(color)
"<a href='#{Discourse.base_url}' style='color: ##{color}'>#{@site_name}</a>"
end
def first_paragraphs_from(html)
doc = Nokogiri::HTML(html)
result = +""
length = 0
doc.css('body > p, aside.onebox, body > ul, body > blockquote').each do |node|
if node.text.present?
result << node.to_s
length += node.inner_text.length
return result if length >= SiteSetting.digest_min_excerpt_length
end
end
return result unless result.blank?
# If there is no first paragaph, return the first div (onebox)
doc.css('div').first
end
def email_excerpt(html_arg)
html = (first_paragraphs_from(html_arg) || html_arg).to_s
PrettyText.format_for_email(html).html_safe
end
def normalize_name(name)
name.downcase.gsub(/[\s_-]/, '')
end
def show_username_on_post(post)
return true if SiteSetting.prioritize_username_in_ux
return true unless SiteSetting.enable_names?
return true unless SiteSetting.display_name_on_posts?
return true unless post.user.name.present?
normalize_name(post.user.name) != normalize_name(post.user.username)
end
def show_name_on_post(post)
return true unless SiteSetting.prioritize_username_in_ux
SiteSetting.enable_names? &&
SiteSetting.display_name_on_posts? &&
post.user.name.present? &&
normalize_name(post.user.name) != normalize_name(post.user.username)
end
def format_for_email(post, use_excerpt)
html = use_excerpt ? post.excerpt : post.cooked
PrettyText.format_for_email(html, post).html_safe
end
def digest_custom_html(position_key)
digest_custom "user_notifications.digest.custom.html.#{position_key}"
end
def digest_custom_text(position_key)
digest_custom "user_notifications.digest.custom.text.#{position_key}"
end
def digest_custom(i18n_key)
PrettyText.format_for_email(I18n.t(i18n_key)).html_safe
end
def show_image_with_url(url)
!(url.nil? || url.downcase.end_with?('svg'))
end
def email_image_url(basename)
UrlHelper.absolute("#{Discourse.base_uri}/images/emails/#{basename}")
end
def url_for_email(href)
URI(href).host.present? ? href : UrlHelper.absolute("#{Discourse.base_uri}#{href}")
rescue URI::Error
href
end
end