Skip to content

Commit

Permalink
Merge pull request #43 from RubyOnWorld/helpers
Browse files Browse the repository at this point in the history
helpers application
  • Loading branch information
xmas7 authored Nov 4, 2022
2 parents 12693fc + 96ec054 commit 8bd2450
Show file tree
Hide file tree
Showing 3 changed files with 150 additions and 0 deletions.
16 changes: 16 additions & 0 deletions app/helpers/topic_post_bookmarkable_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# frozen_string_literal: true

module TopicPostBookmarkableHelper
extend ActiveSupport::Concern

module ClassMethods
def sync_topic_user_bookmarked(user, topic, opts)
return if opts.key?(:auto_track) && !opts[:auto_track]
TopicUser.change(
user.id,
topic.id,
bookmarked: Bookmark.for_user_in_topic(user.id, topic).exists?
)
end
end
end
24 changes: 24 additions & 0 deletions app/helpers/topics_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# frozen_string_literal: true

module TopicsHelper
include ApplicationHelper

def render_topic_title(topic)
link_to(Emoji.gsub_emoji_to_unicode(topic.title), topic.relative_url)
end

def categories_breadcrumb(topic)
breadcrumb = []
category = topic.category

if category && !category.uncategorized?
breadcrumb.push(url: category.url, name: category.name, color: category.color)
while category = category.parent_category
breadcrumb.prepend(url: category.url, name: category.name, color: category.color)
end
end

Plugin::Filter.apply(:topic_categories_breadcrumb, topic, breadcrumb)
end

end
110 changes: 110 additions & 0 deletions app/helpers/user_notifications_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# 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::HTML5.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
"<a href='#{Discourse.base_url}'>#{@site_name}</a>"
end

def first_paragraphs_from(html)
doc = Nokogiri::HTML5(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 paragraph with text, return the first paragraph with
# something else (an image) or div (a onebox).
doc.css('body > p:not(:empty), body > div:not(:empty), body > p > div.lightbox-wrapper img').first
end

def email_excerpt(html_arg, post = nil)
html = (first_paragraphs_from(html_arg) || html_arg).to_s
PrettyText.format_for_email(html, post).html_safe
end

def normalize_name(name)
name.downcase.gsub(/[\s_-]/, '')
end

def show_username_on_post(post)
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)
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_path}/images/emails/#{basename}")
end

def url_for_email(href)
URI(href).host.present? ? href : UrlHelper.absolute("#{Discourse.base_path}#{href}")
rescue URI::Error
href
end

end

0 comments on commit 8bd2450

Please sign in to comment.