Files
timeoverflow/app/helpers/application_helper.rb
2025-03-23 16:49:27 +01:00

121 lines
2.9 KiB
Ruby

module ApplicationHelper
TEXT_SUCCESS = 'text-success'.freeze
TEXT_DANGER = 'text-danger'.freeze
def page_title
current_organization || 'TimeOverflow'
end
def avatar_url(user, size = 32)
user.avatar.attached? ?
user.avatar.variant(resize_to_fit: [size, size]) :
gravatar_url(user, size)
end
def gravatar_url(user, size = 32)
gravatar_id = Digest::MD5.hexdigest(user.email).downcase
gravatar_options = {
set: "set1",
gravatar: "hashed",
size: "#{size}x#{size}",
d: "identicon"
}
"https://www.gravatar.com/avatar/#{gravatar_id}.png?#{gravatar_options.to_param}"
end
def organization_logo
org = @organization || @current_organization
return unless org && org.logo.attached? && org.errors.details[:logo].blank?
return if "#{controller_name}##{action_name}".in? %w(organizations#index pages#show)
content_tag(:div, class: "row organization-logo") do
image_tag org.logo.variant(resize_to_fit: [200, nil])
end
end
def mdash
raw "—"
end
def seconds_to_hm(seconds, default = mdash)
sign = seconds <=> 0
if sign.try :nonzero?
minutes, _seconds = seconds.abs.divmod(60)
hours, minutes = minutes.divmod(60)
format("%s%d:%02d", ("-" if sign < 0), hours, minutes)
else
default
end
end
def tnc_path
document_path(Document.terms_and_conditions || 0, modal: true)
end
def show_error_messages!(resource)
return "" if resource.errors.empty?
messages = resource.errors.
full_messages.map { |msg| content_tag(:li, msg) }.join
html = <<-HTML
<div class="alert alert-danger d-flex justify-content-between">
<ul>
#{messages}
</ul>
<button type="button" class="btn-close" data-bs-dismiss="alert"></button>
</div>
HTML
html.html_safe
end
# Use as <%= markdown content %> or <%= m content %>
# Content can be nil, in that case
# it will be the same as an empty string.
def markdown(content)
RDiscount.new(content || ''.freeze).to_html.html_safe
end
alias m markdown
# Green or red CSS class depending on whether
# positive or negative amount
def green_red(amount)
case amount <=> 0
when -1 then TEXT_DANGER
when 0 then nil
when 1 then TEXT_SUCCESS
end
end
def get_body_css_class(controller)
classes = {
'home' => 'landing-page',
'sessions' => 'login-page',
'pages' => 'pages',
'unlocks' => 'unlocks-page',
'passwords' => 'passwords-page',
'confirmations' => 'confirmations-page'
}
"#{classes[controller]}"
end
def alert_class(alert)
case alert
when 'error', 'alert'
'alert-danger'
when 'notice'
'alert-success'
else
'alert-info'
end
end
def show_no_membership_warning?
current_user&.no_membership_warning? && !devise_controller?
end
end