2014-05-26 01:45:46 +00:00
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
2015-06-23 17:38:12 +00:00
def simple_picker ( object_name , method , options )
html = " <div class='simple-date-picker'>
< input type = 'text' class = 'span1' #{(options[:value] ? "value='#{options[:value].day}'" : "")} placeholder='Date' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) || event.keyCode == 9' onkeyup='this.value=(this.value.length <= 2 ? (parseInt(this.value) > 0 && parseInt(this.value) < 32 ? this.value : this.value.substring(0,this.value.length-1)) : this.value.substring(0,this.value.length-1))' onblur='var el = document.getElementById(\"#{object_name.to_s}_#{method.to_s}\");var k = el.value.split(\"-\");if(this.value){k[2]=this.value; el.value = k.join(\"-\")};'>
< select class = 'span2' onchange = 'var el = document.getElementById(\"#{object_name.to_s}_#{method.to_s}\");var k = el.value.split(\"-\");if(this.value){k[1]=this.value; el.value = k.join(\"-\")};' > "
[ " January " , " February " , " March " , " April " , " May " , " June " , " July " , " August " , " September " , " October " , " November " , " December " ] . each_with_index do | mon , index |
html = html + " <option value=' #{ ( index < 9 ? " 0 " : " " ) } #{ ( index + 1 ) . to_s } ' #{ ( options [ :value ] && options [ :value ] . month == ( index + 1 ) ? " selected='selected' " : " " ) } > #{ mon } </option> "
end
html = html + " </select><input type='text' class='span1' #{ ( options [ :value ] ? " value=' #{ options [ :value ] . year } ' " : " " ) } placeholder='Year' onkeypress='return (event.charCode >= 48 && event.charCode <= 57) || event.keyCode == 8 || event.keyCode == 46 || (event.keyCode >= 37 && event.keyCode <= 40) event.keyCode == 9' onkeyup='this.value=(this.value.length == 4 ? (parseInt(this.value) > 1900 && parseInt(this.value) < 3000 ? this.value : this.value.substring(0,this.value.length-1)) : (this.value.length > 4 ? this.value.substring(0,this.value.length-1) : this.value))' onblur='var el = document.getElementById( \" #{ object_name . to_s } _ #{ method . to_s } \" );var k = el.value.split( \" - \" );if(this.value){k[0]=this.value; el.value = k.join( \" - \" )};'> "
html = html + hidden_field ( object_name , method , :value = > options [ :value ] || " 1901-01-01 " )
html = html + " </div> "
html . html_safe
end
2014-05-26 01:45:46 +00:00
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 = { } )
2015-02-26 09:18:38 +00:00
# @template.datetime_picker(@object_name, method, objectify_options(options))
2014-05-26 01:45:46 +00:00
end
end