ajmorris (owner)

Fork Of

gist: 7324 by jamie date_field helper for merb

Revisions

  • 010b99 ajmorris Mon Nov 17 11:32:07 -0800 2008
  • f8bba1 jamie Tue Aug 26 12:30:06 -0700 2008
gist: 25874 Download_button fork
public
Public Clone URL: git://gist.github.com/25874.git
Embed All Files: show embed
date_field.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Originally from http://www.benlog.org/2008/6/29/bare-bones-date-picker-for-merb
# Modified for new Merb 0.9.6 helpers
module Merb::Helpers::Form
  def date_field(*args)
    if bound?(*args)
      current_form_context.bound_date_field(*args)
    else
      current_form_context.unbound_date_field(*args)
    end
  end
end
 
module Merb::Helpers::Form::Builder
  class Base
    def bound_date_field(method, attrs = {})
      name = control_name(method)
      update_bound_controls(method, attrs, "text")
      unbound_date_field({:name => name, :value => @obj.send(method)}.merge(attrs))
    end
 
    def unbound_date_field(attrs)
      update_unbound_controls(attrs, "date")
      if attrs[:name] =~ /\[(.*)\]/
        date = @obj.send($1)
      end
      date = Date.new(Time.now.year) if date.nil?
      
      month_attrs = attrs.merge(
        :class => "date month",
        :selected => date.month,
        :name => attrs[:name] + '[month]',
        :id => attrs[:id] + '_month',
        :collection => (1..12).map{|i|[i, DateTime::MONTHNAMES[i]]}
      )
      
      day_attrs = attrs.merge(
        :class => "date day",
        :selected => date.day.to_s,
        :name => attrs[:name] + '[day]',
        :id => attrs[:id] + '_day',
        :collection => (1..31).map{|i|i.to_s},
        :label => nil
      )
      
      year_attrs = attrs.merge(
        :class => "date year",
        :selected => date.year.to_s,
        :name => attrs[:name] + '[year]',
        :id => attrs[:id] + '_year',
        :collection => (Time.now.year..Time.now.year + 1).map{|i|i.to_s}.reverse,
        :label => nil
      )
      
      unbound_select(month_attrs) + unbound_select(day_attrs) + unbound_select(year_attrs)
    end
    
  end
end