app/helpers/application_helper.rb
# frozen_string_literal: true
# Methods to help across all application views.
module ApplicationHelper
def cancel
link_to 'Cancel', URI.parse(request.referer.to_s).path.blank? ? root_path : (URI.parse(request.referer.to_s).path), class: 'btn btn-default'
end
# Prints out '6 hours ago, Yesterday, 2 weeks ago, 5 months ago, 1 year ago'
def recent_activity(past_time)
return '' unless past_time.is_a? Time
time_ago_in_words(past_time)
seconds_ago = (Time.zone.now - past_time)
color = if seconds_ago < 60.minute then "#6DD1EC"
elsif seconds_ago < 1.day then "#ADDD1E"
elsif seconds_ago < 2.day then "#CEDC34"
elsif seconds_ago < 1.week then "#CEDC34"
elsif seconds_ago < 1.month then "#DCAA24"
elsif seconds_ago < 1.year then "#C2692A"
else "#AA2D2F"
end
"<span style='color:#{color};font-weight:bold;font-variant:small-caps;'>#{time_ago_in_words(past_time)} ago</span>".html_safe
end
def simple_date(past_date)
return '' if past_date.blank?
if past_date == Date.today
'Today'
elsif past_date == Date.today - 1.day
'Yesterday'
elsif past_date == Date.today + 1.day
'Tomorrow'
elsif past_date.year == Date.today.year
past_date.strftime("%b %d")
else
past_date.strftime("%b %d, %Y")
end
end
def simple_weekday(date)
return '' unless date.is_a?(Time) || date.is_a?(Date)
date.strftime("%a")
end
def simple_date_and_weekday(date)
[simple_date(date), simple_weekday(date)].select{|i| not i.blank?}.join(', ')
end
def simple_time(past_time)
return '' if past_time.blank?
if past_time.to_date == Date.today
past_time.strftime("at %I:%M %p")
elsif past_time.year == Date.today.year
past_time.strftime("on %b %d at %I:%M %p")
else
past_time.strftime("on %b %d, %Y at %I:%M %p")
end
end
def simple_check(checked)
checked ? '<span class="glyphicon glyphicon-ok"></span>'.html_safe : '<span class="glyphicon glyphicon-unchecked text-muted"></span>'.html_safe
end
def simple_markdown(text)
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, no_intra_emphasis: true, fenced_code_blocks: true, autolink: true, strikethrough: true, superscript: true)
result = text.to_s
result = markdown.render(result)
result = insert_checkboxes(result)
result = target_link_as_blank(result)
result
end
def th_sort_field(order, sort_field, display_name, extra_class: '')
sort_params = params.permit(:search)
sort_field_order = (order == sort_field) ? "#{sort_field} desc" : sort_field
if order == sort_field
selected_class = 'sort-selected'
elsif order == "#{sort_field} desc nulls last" || order == "#{sort_field} desc"
selected_class = 'sort-selected'
end
content_tag(:th, class: [selected_class, extra_class]) do
link_to url_for(sort_params.merge(order: sort_field_order)), style: 'text-decoration:none' do
display_name.to_s.html_safe
end
end.html_safe
end
private
def target_link_as_blank(text)
text.to_s.gsub(/<a(.*?)>/, '<a\1 target="_blank">').html_safe
end
def insert_checkboxes(text)
text = text.to_s.gsub(/\[\s\]/, '<span class="glyphicon glyphicon-unchecked"></span>')
text = text.to_s.gsub(/\[x\]/i, '<span class="glyphicon glyphicon-check"></span>')
end
def replace_numbers_with_ascii(text)
text.gsub(/^[ \t]*(\d)/){|m| ascii_number($1)}
end
def ascii_number(number)
"&##{(number.to_i + 48).to_s};"
end
end