Module: ActiveScaffold::Bridges::DatePickerBridge

Defined in:
lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb

Defined Under Namespace

Modules: DatepickerColumnHelpers, FormColumnHelpers, SearchColumnHelpers

Constant Summary collapse

DATE_FORMAT_CONVERSION =
{
  '%a' => 'D',
  '%A' => 'DD',
  '%b' => 'M',
  '$B' => 'MM',
  '%d' => 'dd',
  '%e' => 'd',
  '%j' => 'oo',
  '%m' => 'mm',
  '%y' => 'y',
  '%Y' => 'yy',
  '%H' => 'hh', # options ampm => false
  '%I' => 'hh', # options ampm => true
  '%M' => 'mm',
  '%p' => 'tt',
  '%S' => 'ss'
}

Class Method Summary collapse

Class Method Details

.date_optionsObject



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 65

def self.date_options
  date_options = I18n.translate! 'date'
  date_picker_options = { :closeText => as_(:close),
    :prevText => as_(:previous),
    :nextText => as_(:next),
    :currentText => as_(:today),
    :monthNames => date_options[:month_names][1, (date_options[:month_names].length - 1)],
    :monthNamesShort => date_options[:abbr_month_names][1, (date_options[:abbr_month_names].length - 1)],
    :dayNames => date_options[:day_names],
    :dayNamesShort => date_options[:abbr_day_names],
    :dayNamesMin => date_options[:abbr_day_names],
    :changeYear => true,
    :changeMonth => true,
  }

  begin
    as_date_picker_options = I18n.translate! 'active_scaffold.date_picker_options'
    date_picker_options.merge!(as_date_picker_options) if as_date_picker_options.is_a? Hash
  rescue
    Rails.logger.warn "ActiveScaffold: Missing date picker localization for your locale: #{I18n.locale}"
  end

  js_format = self.to_datepicker_format(date_options[:formats][:default])
  date_picker_options[:dateFormat] = js_format unless js_format.nil? 
  date_picker_options
end

.datetime_optionsObject



92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 92

def self.datetime_options
  rails_time_format = I18n.translate! 'time.formats.default'
  datetime_options = I18n.translate! 'datetime.prompts'
  datetime_picker_options = {:ampm => false,
    :hourText => datetime_options[:hour],
:minuteText => datetime_options[:minute],
:secondText => datetime_options[:second],
  }
  
  begin
    as_datetime_picker_options = I18n.translate! 'active_scaffold.datetime_picker_options'
    datetime_picker_options.merge!(as_datetime_picker_options) if as_datetime_picker_options.is_a? Hash
  rescue
    Rails.logger.warn "ActiveScaffold: Missing datetime picker localization for your locale: #{I18n.locale}"
  end
  
  date_format, time_format = self.split_datetime_format(self.to_datepicker_format(rails_time_format))
  datetime_picker_options[:dateFormat] = date_format unless date_format.nil?
  unless time_format.nil?
    datetime_picker_options[:timeFormat] = time_format
    datetime_picker_options[:ampm] = true if rails_time_format.include?('%I')
  end
  datetime_picker_options
end

.localization(js_file) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 51

def self.localization(js_file)
  localization = "jQuery(function($){
  if (typeof($.datepicker) === 'object') {
    $.datepicker.regional['#{I18n.locale}'] = #{date_options.to_json};
    $.datepicker.setDefaults($.datepicker.regional['#{I18n.locale}']);
  }
  if (typeof($.timepicker) === 'object') {
    $.timepicker.regional['#{I18n.locale}'] = #{datetime_options.to_json};
    $.timepicker.setDefaults($.timepicker.regional['#{I18n.locale}']);
  }
});\n"        
  prepend_js_file(js_file, localization)        
end

.prepend_js_file(js_file, prepend) ⇒ Object



117
118
119
120
121
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 117

def self.prepend_js_file(js_file, prepend)
  content = File.binread(js_file)
  content.gsub!(/\A/, prepend)
  File.open(js_file, 'wb') { |file| file.write(content) }
end

.split_datetime_format(datetime_format) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 137

def self.split_datetime_format(datetime_format)
  date_format = datetime_format
  time_format = nil
  time_start_indicators = %w{hh mm tt ss}
  unless datetime_format.nil?
    start_indicator = time_start_indicators.detect {|indicator| datetime_format.include?(indicator)}
    unless start_indicator.nil?
      pos_time_format = datetime_format.index(start_indicator)
      date_format = datetime_format.to(pos_time_format - 1)
      time_format = datetime_format.from(pos_time_format)
    end
  end
  return date_format, time_format
end

.to_datepicker_format(rails_format) ⇒ Object



123
124
125
126
127
128
129
130
131
132
133
134
135
# File 'lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb', line 123

def self.to_datepicker_format(rails_format)
  return nil if rails_format.nil?
  if rails_format =~ /%[cUWwxXZz]/
    Rails.logger.warn("AS DatePickerBridge: Can t convert rails date format: #{rails_format} to jquery datepicker format. Options %c, %U, %W, %w, %x %X, %z, %Z are not supported by datepicker]")
    nil
  else
    js_format = rails_format.dup
    DATE_FORMAT_CONVERSION.each do |key, value|
      js_format.gsub!(Regexp.new("#{key}"), value)
    end
    js_format
  end
end