2013-06-03 16:12:24 -04:00
module UserNotificationsHelper
2014-07-08 22:33:11 +05:30
2014-01-22 15:30:30 -05:00
def self . sanitize_options
return @sanitize_options if @sanitize_options
@sanitize_options = Sanitize :: Config :: RELAXED . deep_dup
@sanitize_options [ :elements ] << 'aside' << 'div'
@sanitize_options [ :attributes ] [ :all ] << 'class'
@sanitize_options
end
2013-06-03 16:12:24 -04:00
def indent ( text , by = 2 )
spacer = " " * by
result = " "
text . each_line do | line |
result << spacer << line
end
result
end
2013-07-24 17:13:15 +10:00
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
2013-11-28 17:20:56 -05:00
def logo_url
2014-03-18 15:56:17 -04:00
logo_url = SiteSetting . digest_logo_url
logo_url = SiteSetting . logo_url if logo_url . blank?
2014-07-21 14:18:32 -04:00
return nil if logo_url . blank?
2013-11-28 17:20:56 -05:00
if logo_url !~ / http(s)? \ : \/ \/ /
logo_url = " #{ Discourse . base_url } #{ logo_url } "
end
logo_url
end
def html_site_link
" <a href=' #{ Discourse . base_url } '> #{ @site_name } </a> "
end
2014-01-22 15:30:30 -05:00
def first_paragraph_from ( html )
doc = Nokogiri :: HTML ( html )
2014-02-13 16:11:01 -05:00
result = " "
2014-01-22 15:30:30 -05:00
doc . css ( 'p' ) . each do | p |
2014-02-13 16:11:01 -05:00
if p . text . present?
result << p . to_s
return result if result . size > = 100
end
2014-01-22 15:30:30 -05:00
end
2014-02-13 16:11:01 -05:00
return result unless result . blank?
2014-01-22 15:30:30 -05:00
# If there is no first paragaph, return the first div (onebox)
doc . css ( 'div' ) . first
end
2014-01-22 12:37:37 -05:00
def email_excerpt ( html , posts_count )
# If there's only one post, include the whole thing.
if posts_count == 1
2014-01-27 15:11:51 -05:00
raw Sanitize . clean ( html , UserNotificationsHelper . sanitize_options )
2014-01-22 12:37:37 -05:00
else
# Otherwise, try just the first paragraph.
2014-01-22 15:30:30 -05:00
para = first_paragraph_from ( html )
2014-02-21 16:25:19 -05:00
raw Sanitize . clean ( para . to_s , UserNotificationsHelper . sanitize_options )
2014-01-22 12:37:37 -05:00
end
2013-11-28 17:20:56 -05:00
end
2014-04-17 12:32:51 -04:00
def cooked_post_for_email ( post )
PrettyText . format_for_email ( post . cooked ) . html_safe
end
2014-04-17 14:40:30 -04:00
2014-04-17 16:42:40 -04:00
def email_category ( category , opts = nil )
opts = opts || { }
# If there is no category, bail
return " " if category . blank?
# By default hide uncategorized
return " " if category . uncategorized? && ! opts [ :show_uncategorized ]
2014-04-17 14:40:30 -04:00
result = " "
if category . parent_category . present?
2014-10-23 10:53:27 -07:00
result << " <span style='background-color: # #{ category . parent_category . color } ; font-size: 12px; padding: 4px 2px; font-weight: bold; margin: 0; width: 2px; white-space:nowrap;'> </span> "
2014-04-17 14:40:30 -04:00
end
2014-10-23 10:53:27 -07:00
result << " <span style='background-color: # #{ category . color } ; color: # #{ category . text_color } ; font-size: 12px; padding: 4px 6px; font-weight: bold; margin: 0; white-space:nowrap;'> #{ category . name } </span> "
2014-04-17 14:40:30 -04:00
result . html_safe
end
2013-06-03 16:12:24 -04:00
end