orbit-basic/app/helpers/orbit_form_helper.rb

108 lines
4.5 KiB
Ruby

module OrbitFormHelper
def self.included(base)
ActionView::Helpers::FormBuilder.send(:include, Orbit::FormBuilder)
end
def datetime_picker(object_name, method, options = {})
options[:icon_time] ||= 'icons-clock'
options[:icon_date] ||= 'icons-calendar'
options[:icon_clear] ||= 'icons-cross-3'
options[:input_class] ||= 'input-large'
options[:value] ||= options[:object].send(method) if options[:object] && options[:object][method]
case options[:picker_type]
when 'date'
content_tag :div, :id => options[:id], :class => options[:class] do
date_picker(object_name, method, options)
end
when 'time'
content_tag :div, :id => options[:id], :class => options[:class] do
time_picker(object_name, method, options)
end
when 'separated'
options[:label] ||= I18n.t('datetime_picker.separated.label')
content_tag :div, :id => options[:id], :class => "separated_picker #{options[:class]}" do
concat label_tag options[:label] unless options[:no_label]
concat hidden_field(object_name, method, :value => options[:value])
concat separated_picker(object_name, method, options)
end
else
content_tag :div, :id => options[:id], :class => options[:class] do
default_picker(object_name, method, options)
end
end
end
def date_picker(object_name, method, options)
custom = {}
custom[:format] = options[:format] || 'yyyy/MM'
custom[:value] = format_value(options[:value], custom[:format]) if options[:value]
custom[:picker_class] = 'date_picker'
custom[:label] = options[:label] || I18n.t('datetime_picker.date.label')
custom[:placeholder] = options[:placeholder] || I18n.t('datetime_picker.date.placeholder')
picker(object_name, method, options.merge(custom))
end
def default_picker(object_name, method, options)
custom = {}
custom[:format] = options[:format] || 'yyyy/MM/dd hh:mm'
custom[:value] = format_value(options[:value], custom[:format]) if options[:value]
custom[:picker_class] = 'default_picker'
custom[:label] = options[:label] || I18n.t('datetime_picker.default.label')
custom[:placeholder] = options[:placeholder] || I18n.t('datetime_picker.default.placeholder')
picker(object_name, method, options.merge(custom))
end
def time_picker(object_name, method, options)
custom = {}
custom[:format] = options[:format] || 'hh:mm'
custom[:value] = format_value(options[:value], custom[:format]) if options[:value]
custom[:picker_class] = 'time_picker'
custom[:label] = options[:label] || I18n.t('datetime_picker.time.label')
custom[:placeholder] = options[:placeholder] || I18n.t('datetime_picker.time.placeholder')
picker(object_name, method, options.merge(custom))
end
def separated_picker(object_name, method, options)
custom = {}
custom[:no_label] = true
custom[:separated] = true
date_picker(nil, nil, options.merge(custom)) + time_picker(nil, nil, options.merge(custom))
end
def single_picker(object_name, method, options)
content_tag :div, :id => options[:id], :class => options[:class] do
picker(object_name, method, options)
end
end
def double_picker(object_name, method, options)
end
def picker(object_name, method, options)
content_tag :div, :class => "#{options[:picker_class]} input-append", :style => "#{(options[:picker_class].eql?('time_picker') && options[:value].blank? && options[:separated]) ? 'pointer-events:none' : nil}" do
concat label_tag options[:label] unless options[:no_label]
concat text_field object_name, method, :placeholder => options[:placeholder], :class => options[:input_class], 'data-format' => options[:format], :value => options[:value]
concat (content_tag :span, :class => 'add-on clearDate' do
content_tag :i, nil, :class => options[:icon_clear]
end)
concat (content_tag :span, :class => 'add-on iconbtn' do
content_tag :i, nil, 'data-time-icon' => options[:icon_time], 'data-date-icon' => options[:icon_date]
end)
end
end
def format_value(value, format)
value.strftime(format.gsub('yyyy', '%Y').gsub('MM', '%m').gsub('dd', '%d').gsub('hh', '%H').gsub('mm', '%M'))
end
end
module Orbit::FormBuilder
# ActionPack's metaprogramming would have done this for us, if FormHelper#labeled_input
# had been defined at load. Instead we define it ourselves here.
def datetime_picker(method, options = {})
@template.datetime_picker(@object_name, method, objectify_options(options))
end
end