|
# -*- coding: utf-8 -*- |
|
# config/initializers/date_time_selector.rb |
|
# based on actionpack-3.2.11/lib/action_view/helpers/date_helper.rb |
|
require "action_view/helpers/date_helper" |
|
class ActionView::Helpers::DateTimeSelector |
|
undef select_day |
|
def select_day |
|
if @options[:use_hidden] || @options[:discard_day] |
|
build_hidden(:day, day || 1) |
|
else |
|
build_options_and_select(:day, day, :start => 1, :end => 31, :leading_zeros => false, :use_two_digit_numbers => @options[:use_two_digit_numbers], :text_translator => @options[:day_text_translator]) |
|
end |
|
end |
|
|
|
undef select_year |
|
def select_year |
|
if !@datetime || @datetime == 0 |
|
val = '1' |
|
middle_year = Date.today.year |
|
else |
|
val = middle_year = year |
|
end |
|
|
|
if @options[:use_hidden] || @options[:discard_year] |
|
build_hidden(:year, val) |
|
else |
|
options = {} |
|
options[:start] = @options[:start_year] || middle_year - 5 |
|
options[:end] = @options[:end_year] || middle_year + 5 |
|
options[:step] = options[:start] < options[:end] ? 1 : -1 |
|
options[:leading_zeros] = false |
|
options[:max_years_allowed] = @options[:max_years_allowed] || 1000 |
|
options[:text_translator] = @options[:year_text_translator] |
|
|
|
if (options[:end] - options[:start]).abs > options[:max_years_allowed] |
|
raise ArgumentError, "There're too many years options to be built. Are you sure you haven't mistyped something? You can provide the :max_years_allowed parameter" |
|
end |
|
|
|
build_options_and_select(:year, val, options) |
|
end |
|
end |
|
|
|
undef build_options |
|
def build_options(selected, options = {}) |
|
start = options.delete(:start) || 0 |
|
stop = options.delete(:end) || 59 |
|
step = options.delete(:step) || 1 |
|
options.reverse_merge!({:leading_zeros => true, :ampm => false, :use_two_digit_numbers => false}) |
|
leading_zeros = options.delete(:leading_zeros) |
|
|
|
select_options = [] |
|
start.step(stop, step) do |i| |
|
value = leading_zeros ? sprintf("%02d", i) : i |
|
tag_options = { :value => value } |
|
tag_options[:selected] = "selected" if selected == i |
|
text = options[:use_two_digit_numbers] ? sprintf("%02d", i) : value |
|
text = options[:ampm] ? AMPM_TRANSLATION[i] : text |
|
text = options[:text_translator] ? options[:text_translator].call(text) : text |
|
select_options << content_tag(:option, text, tag_options) |
|
end |
|
(select_options.join("\n") + "\n").html_safe |
|
end |
|
|
|
end |