67 lines
1.6 KiB
Ruby
Executable File
67 lines
1.6 KiB
Ruby
Executable File
class DatePickerInput < SimpleForm::Inputs::StringInput
|
|
def input(wrapper_options)
|
|
set_html_options
|
|
set_value_html_option
|
|
|
|
template.content_tag :div, class: 'input-group date datetimepicker' do
|
|
input = super(wrapper_options) # leave StringInput do the real rendering
|
|
input + input_button
|
|
end
|
|
end
|
|
|
|
def input_html_classes
|
|
super.push '' # 'form-control'
|
|
end
|
|
|
|
private
|
|
|
|
def input_button
|
|
template.content_tag :span, class: 'input-group-btn' do
|
|
template.content_tag :button, class: 'btn btn-default', type: 'button' do
|
|
template.content_tag :span, '', class: 'fa fa-calendar'
|
|
end
|
|
end
|
|
end
|
|
|
|
def set_html_options
|
|
input_html_options[:type] = 'text'
|
|
input_html_options[:data] ||= {}
|
|
input_html_options[:data].merge!(date_options: date_options)
|
|
end
|
|
|
|
def set_value_html_option
|
|
return unless value.present?
|
|
input_html_options[:value] ||= I18n.localize(value, format: display_pattern)
|
|
end
|
|
|
|
def value
|
|
object.send(attribute_name) if object.respond_to? attribute_name
|
|
end
|
|
|
|
def display_pattern
|
|
I18n.t('datepicker.dformat', default: '%d/%m/%Y')
|
|
end
|
|
|
|
def picker_pattern
|
|
I18n.t('datepicker.pformat', default: 'DD/MM/YYYY')
|
|
end
|
|
|
|
def date_view_header_format
|
|
I18n.t('dayViewHeaderFormat', default: 'MMMM YYYY')
|
|
end
|
|
|
|
def date_options_base
|
|
{
|
|
locale: I18n.locale.to_s,
|
|
format: picker_pattern,
|
|
dayViewHeaderFormat: date_view_header_format
|
|
}
|
|
end
|
|
|
|
def date_options
|
|
custom_options = input_html_options[:data][:date_options] || {}
|
|
date_options_base.merge!(custom_options)
|
|
end
|
|
|
|
end
|