2019-12-18 09:49:57 -06:00
|
|
|
# typed: true
|
2014-07-17 15:19:17 +02:00
|
|
|
module DateLabelHelper
|
2014-07-17 13:56:08 +02:00
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
class GenericDateView
|
2014-07-17 13:56:08 +02:00
|
|
|
include ActionView::Context
|
|
|
|
include ActionView::Helpers
|
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
COLORS = {
|
|
|
|
:overdue_by_more_than_one => :red,
|
|
|
|
:overdue_by_one => :red,
|
|
|
|
:today => :amber,
|
|
|
|
:tomorrow => :amber,
|
|
|
|
:this_week => :orange,
|
|
|
|
:more_than_a_week => :green
|
|
|
|
}
|
2014-07-17 13:56:08 +02:00
|
|
|
|
|
|
|
def initialize(date, prefs)
|
2014-07-17 15:14:12 +02:00
|
|
|
@date = date
|
|
|
|
@days = date.nil? ? nil : days_from_today(date)
|
|
|
|
@days_sym = days_to_sym(@days)
|
2014-07-17 13:56:08 +02:00
|
|
|
@prefs = prefs
|
|
|
|
end
|
|
|
|
|
|
|
|
def get_color
|
2014-07-17 15:14:12 +02:00
|
|
|
COLORS[@days_sym]
|
2014-07-17 13:56:08 +02:00
|
|
|
end
|
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
def days_from_today(date)
|
|
|
|
(date.in_time_zone.to_date - Date.current).to_i
|
|
|
|
end
|
|
|
|
|
|
|
|
def days_to_sym(days)
|
|
|
|
case days
|
|
|
|
when nil
|
|
|
|
return nil
|
2014-07-17 13:56:08 +02:00
|
|
|
when 0
|
2014-07-17 15:14:12 +02:00
|
|
|
return :today
|
2014-07-17 13:56:08 +02:00
|
|
|
when 1
|
2014-07-17 15:14:12 +02:00
|
|
|
return :tomorrow
|
2014-07-17 13:56:08 +02:00
|
|
|
when 2..7
|
2014-07-17 15:14:12 +02:00
|
|
|
return :this_week
|
2014-07-17 13:56:08 +02:00
|
|
|
else
|
2014-07-17 15:14:12 +02:00
|
|
|
if days == -1
|
|
|
|
return :overdue_by_one
|
|
|
|
elsif days < -1
|
|
|
|
return :overdue_by_more_than_one
|
2014-07-17 13:56:08 +02:00
|
|
|
else
|
2014-07-17 15:14:12 +02:00
|
|
|
return :more_than_a_week
|
2014-07-17 13:56:08 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
def date_html_wrapper
|
|
|
|
return "" if @date.nil?
|
2014-08-14 21:05:05 -05:00
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
return content_tag(:a, {:title => @prefs.format_date(@date)}) {
|
|
|
|
content_tag(:span, {:class => get_color}) {
|
|
|
|
yield
|
2014-07-17 13:56:08 +02:00
|
|
|
}
|
2014-07-17 15:14:12 +02:00
|
|
|
}
|
2014-07-17 13:56:08 +02:00
|
|
|
end
|
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
def date_mobile_html_wrapper
|
|
|
|
return "" if @date.nil?
|
2014-07-17 13:56:08 +02:00
|
|
|
|
|
|
|
return content_tag(:span, {:class => get_color}) {
|
2014-07-17 15:14:12 +02:00
|
|
|
yield
|
2014-07-17 13:56:08 +02:00
|
|
|
}
|
2014-07-17 15:14:12 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
class DueDateView < GenericDateView
|
|
|
|
|
|
|
|
def due_text
|
|
|
|
case @days_sym
|
|
|
|
when :overdue_by_one
|
|
|
|
t('todos.next_actions_due_date.overdue_by', :days => @days * -1)
|
|
|
|
when :overdue_by_more_than_one
|
|
|
|
t('todos.next_actions_due_date.overdue_by_plural', :days => @days * -1)
|
|
|
|
when :today
|
|
|
|
t('todos.next_actions_due_date.due_today')
|
|
|
|
when :tomorrow
|
|
|
|
t('todos.next_actions_due_date.due_tomorrow')
|
|
|
|
when :this_week
|
|
|
|
if @prefs.due_style == Preference.due_styles[:due_on]
|
|
|
|
# TODO: internationalize strftime here
|
|
|
|
t('models.preference.due_on', :date => @date.strftime("%A"))
|
|
|
|
else
|
|
|
|
t('models.preference.due_in', :days => @days)
|
|
|
|
end
|
|
|
|
else # should be :more_than_a_week
|
|
|
|
t('models.preference.due_in', :days => @days)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def due_date_html
|
|
|
|
date_html_wrapper { due_text }
|
|
|
|
end
|
|
|
|
|
|
|
|
def due_date_mobile_html
|
|
|
|
date_mobile_html_wrapper { @prefs.format_date(@due) }
|
2014-08-14 21:05:05 -05:00
|
|
|
end
|
2014-07-17 13:56:08 +02:00
|
|
|
|
2014-07-17 15:14:12 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
class ShowFromDateView < GenericDateView
|
|
|
|
|
|
|
|
def show_from_text
|
|
|
|
case @days_sym
|
|
|
|
when :overdue_by_more_than_one, :overdue_by_one
|
|
|
|
t('todos.scheduled_overdue', :days => @days * -1)
|
|
|
|
when :today
|
|
|
|
t('todos.show_today')
|
|
|
|
when :tomorrow
|
|
|
|
t('todos.show_tomorrow')
|
|
|
|
when :this_week
|
|
|
|
if @prefs.due_style == Preference.due_styles[:due_on]
|
|
|
|
t('todos.show_on_date', :date => @date.strftime("%A"))
|
|
|
|
else
|
|
|
|
t('todos.show_in_days', :days => @days.to_s)
|
|
|
|
end
|
|
|
|
else
|
|
|
|
t('todos.show_in_days', :days => @days.to_s)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def show_from_date_html
|
|
|
|
date_html_wrapper { show_from_text }
|
2014-07-17 13:56:08 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|
2014-08-14 21:05:05 -05:00
|
|
|
end
|