Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 989 lines (906 sloc) 49.787 kB
db045db @dhh Initial
dhh authored
1 require "date"
cd937e6 @NZKoz Make date_helper use tag and content_tag. Move to assert_dom_equal i…
NZKoz authored
2 require 'action_view/helpers/tag_helper'
db045db @dhh Initial
dhh authored
3
4 module ActionView
5 module Helpers
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
6 # The Date Helper primarily creates select/option tags for different kinds of dates and date elements. All of the
7 # select-type methods share a number of common options that are as follows:
db045db @dhh Initial
dhh authored
8 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
9 # * <tt>:prefix</tt> - overwrites the default prefix of "date" used for the select names. So specifying "birthday"
10 # would give birthday[month] instead of date[month] if passed to the select_month method.
db045db @dhh Initial
dhh authored
11 # * <tt>:include_blank</tt> - set to true if it should be possible to set an empty date.
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
12 # * <tt>:discard_type</tt> - set to true if you want to discard the type part of the select name. If set to true,
13 # the select_month method would use simply "date" (which can be overwritten using <tt>:prefix</tt>) instead of
14 # "date[month]".
db045db @dhh Initial
dhh authored
15 module DateHelper
17f7eaa @dhh Improved resolution of DateHelper#distance_of_time_in_words for bette…
dhh authored
16 # Reports the approximate distance in time between two Time or Date objects or integers as seconds.
17 # Set <tt>include_seconds</tt> to true if you want more detailed approximations when distance < 1 min, 29 secs
a02c607 @dhh Docfix (closes #11263) [Irfy]
dhh authored
18 # Distances are reported based on the following table:
959707b @jeremy r1335@iwill: jeremy | 2005-06-17 11:41:50 -0700
jeremy authored
19 #
a02c607 @dhh Docfix (closes #11263) [Irfy]
dhh authored
20 # 0 <-> 29 secs # => less than a minute
21 # 30 secs <-> 1 min, 29 secs # => 1 minute
22 # 1 min, 30 secs <-> 44 mins, 29 secs # => [2..44] minutes
23 # 44 mins, 30 secs <-> 89 mins, 29 secs # => about 1 hour
24 # 89 mins, 29 secs <-> 23 hrs, 59 mins, 29 secs # => about [2..24] hours
25 # 23 hrs, 59 mins, 29 secs <-> 47 hrs, 59 mins, 29 secs # => 1 day
26 # 47 hrs, 59 mins, 29 secs <-> 29 days, 23 hrs, 59 mins, 29 secs # => [2..29] days
27 # 29 days, 23 hrs, 59 mins, 30 secs <-> 59 days, 23 hrs, 59 mins, 29 secs # => about 1 month
28 # 59 days, 23 hrs, 59 mins, 30 secs <-> 1 yr minus 1 sec # => [2..12] months
c9318e9 @jtrupiano Introduce :almost keyword for distance_of_time_in_words. Make 1.75 da…
jtrupiano authored
29 # 1 yr <-> 1 yr, 3 months # => about 1 year
30 # 1 yr, 3 months <-> 1 yr, 9 months # => over 1 year
31 # 1 yr, 9 months <-> 2 yr minus 1 sec # => almost 2 years
32 # 2 yrs <-> max time or date # => (same rules as 1 yr)
959707b @jeremy r1335@iwill: jeremy | 2005-06-17 11:41:50 -0700
jeremy authored
33 #
a02c607 @dhh Docfix (closes #11263) [Irfy]
dhh authored
34 # With <tt>include_seconds</tt> = true and the difference < 1 minute 29 seconds:
35 # 0-4 secs # => less than 5 seconds
36 # 5-9 secs # => less than 10 seconds
37 # 10-19 secs # => less than 20 seconds
38 # 20-39 secs # => half a minute
39 # 40-59 secs # => less than a minute
40 # 60-89 secs # => 1 minute
17f7eaa @dhh Improved resolution of DateHelper#distance_of_time_in_words for bette…
dhh authored
41 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
42 # ==== Examples
17f7eaa @dhh Improved resolution of DateHelper#distance_of_time_in_words for bette…
dhh authored
43 # from_time = Time.now
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
44 # distance_of_time_in_words(from_time, from_time + 50.minutes) # => about 1 hour
45 # distance_of_time_in_words(from_time, 50.minutes.from_now) # => about 1 hour
46 # distance_of_time_in_words(from_time, from_time + 15.seconds) # => less than a minute
47 # distance_of_time_in_words(from_time, from_time + 15.seconds, true) # => less than 20 seconds
8ef1cd9 Enhancing distance_of_time_in_words to prefix year output with over a…
Jay Pignata authored
48 # distance_of_time_in_words(from_time, 3.years.from_now) # => about 3 years
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
49 # distance_of_time_in_words(from_time, from_time + 60.hours) # => about 3 days
50 # distance_of_time_in_words(from_time, from_time + 45.seconds, true) # => less than a minute
51 # distance_of_time_in_words(from_time, from_time - 45.seconds, true) # => less than a minute
52 # distance_of_time_in_words(from_time, 76.seconds.from_now) # => 1 minute
931be6e @jeremy 1 years -> 1 year
jeremy authored
53 # distance_of_time_in_words(from_time, from_time + 1.year + 3.days) # => about 1 year
8ef1cd9 Enhancing distance_of_time_in_words to prefix year output with over a…
Jay Pignata authored
54 # distance_of_time_in_words(from_time, from_time + 3.years + 6.months) # => over 3 years
55 # distance_of_time_in_words(from_time, from_time + 4.years + 9.days + 30.minutes + 5.seconds) # => about 4 years
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
56 #
57 # to_time = Time.now + 6.years + 19.days
c9318e9 @jtrupiano Introduce :almost keyword for distance_of_time_in_words. Make 1.75 da…
jtrupiano authored
58 # distance_of_time_in_words(from_time, to_time, true) # => about 6 years
59 # distance_of_time_in_words(to_time, from_time, true) # => about 6 years
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
60 # distance_of_time_in_words(Time.now, Time.now) # => less than a minute
17f7eaa @dhh Improved resolution of DateHelper#distance_of_time_in_words for bette…
dhh authored
61 #
45d41f0 @svenfuchs integrating I18n into Rails
svenfuchs authored
62 def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false, options = {})
959707b @jeremy r1335@iwill: jeremy | 2005-06-17 11:41:50 -0700
jeremy authored
63 from_time = from_time.to_time if from_time.respond_to?(:to_time)
64 to_time = to_time.to_time if to_time.respond_to?(:to_time)
65 distance_in_minutes = (((to_time - from_time).abs)/60).round
66 distance_in_seconds = ((to_time - from_time).abs).round
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
67
c178a87 @svenfuchs remove call to self.locale from helpers
svenfuchs authored
68 I18n.with_options :locale => options[:locale], :scope => :'datetime.distance_in_words' do |locale|
45d41f0 @svenfuchs integrating I18n into Rails
svenfuchs authored
69 case distance_in_minutes
70 when 0..1
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
71 return distance_in_minutes == 0 ?
45d41f0 @svenfuchs integrating I18n into Rails
svenfuchs authored
72 locale.t(:less_than_x_minutes, :count => 1) :
73 locale.t(:x_minutes, :count => distance_in_minutes) unless include_seconds
74
75 case distance_in_seconds
76 when 0..4 then locale.t :less_than_x_seconds, :count => 5
77 when 5..9 then locale.t :less_than_x_seconds, :count => 10
78 when 10..19 then locale.t :less_than_x_seconds, :count => 20
79 when 20..39 then locale.t :half_a_minute
80 when 40..59 then locale.t :less_than_x_minutes, :count => 1
81 else locale.t :x_minutes, :count => 1
82 end
83
84 when 2..44 then locale.t :x_minutes, :count => distance_in_minutes
85 when 45..89 then locale.t :about_x_hours, :count => 1
86 when 90..1439 then locale.t :about_x_hours, :count => (distance_in_minutes.to_f / 60.0).round
c9318e9 @jtrupiano Introduce :almost keyword for distance_of_time_in_words. Make 1.75 da…
jtrupiano authored
87 when 1440..2529 then locale.t :x_days, :count => 1
88 when 2530..43199 then locale.t :x_days, :count => (distance_in_minutes.to_f / 1440.0).round
45d41f0 @svenfuchs integrating I18n into Rails
svenfuchs authored
89 when 43200..86399 then locale.t :about_x_months, :count => 1
c9318e9 @jtrupiano Introduce :almost keyword for distance_of_time_in_words. Make 1.75 da…
jtrupiano authored
90 when 86400..525599 then locale.t :x_months, :count => (distance_in_minutes.to_f / 43200.0).round
8ef1cd9 Enhancing distance_of_time_in_words to prefix year output with over a…
Jay Pignata authored
91 else
c9318e9 @jtrupiano Introduce :almost keyword for distance_of_time_in_words. Make 1.75 da…
jtrupiano authored
92 distance_in_years = distance_in_minutes / 525600
93 minute_offset_for_leap_year = (distance_in_years / 4) * 1440
94 remainder = ((distance_in_minutes - minute_offset_for_leap_year) % 525600)
95 if remainder < 131400
96 locale.t(:about_x_years, :count => distance_in_years)
97 elsif remainder < 394200
98 locale.t(:over_x_years, :count => distance_in_years)
99 else
100 locale.t(:almost_x_years, :count => distance_in_years + 1)
101 end
45d41f0 @svenfuchs integrating I18n into Rails
svenfuchs authored
102 end
db045db @dhh Initial
dhh authored
103 end
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
104 end
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
105
db045db @dhh Initial
dhh authored
106 # Like distance_of_time_in_words, but where <tt>to_time</tt> is fixed to <tt>Time.now</tt>.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
107 #
108 # ==== Examples
109 # time_ago_in_words(3.minutes.from_now) # => 3 minutes
110 # time_ago_in_words(Time.now - 15.hours) # => 15 hours
111 # time_ago_in_words(Time.now) # => less than a minute
112 #
113 # from_time = Time.now - 3.days - 14.minutes - 25.seconds # => 3 days
ea3016f @dhh Renamed DateHelper#distance_of_time_in_words_to_now to DateHelper#tim…
dhh authored
114 def time_ago_in_words(from_time, include_seconds = false)
520dae2 @dhh Added include_seconds option as the third parameter to distance_of_ti…
dhh authored
115 distance_of_time_in_words(from_time, Time.now, include_seconds)
db045db @dhh Initial
dhh authored
116 end
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
117
ea3016f @dhh Renamed DateHelper#distance_of_time_in_words_to_now to DateHelper#tim…
dhh authored
118 alias_method :distance_of_time_in_words_to_now, :time_ago_in_words
db045db @dhh Initial
dhh authored
119
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
120 # Returns a set of select tags (one for year, month, and day) pre-selected for accessing a specified date-based
5b92dcb Merge docrails
lifo authored
121 # attribute (identified by +method+) on an object assigned to the template (identified by +object+).
122 #
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
123 #
124 # ==== Options
125 # * <tt>:use_month_numbers</tt> - Set to true if you want to use month numbers rather than month names (e.g.
c3f53f4 @lifo Merge docrails
lifo authored
126 # "2" instead of "February").
e033b5d @lifo Merge docrails
lifo authored
127 # * <tt>:use_short_month</tt> - Set to true if you want to use abbreviated month names instead of full
128 # month names (e.g. "Feb" instead of "February").
129 # * <tt>:add_month_numbers</tt> - Set to true if you want to use both month numbers and month names (e.g.
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
130 # "2 - February" instead of "February").
131 # * <tt>:use_month_names</tt> - Set to an array with 12 month names if you want to customize month names.
e033b5d @lifo Merge docrails
lifo authored
132 # Note: You can also use Rails' i18n functionality for this.
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
133 # * <tt>:date_separator</tt> - Specifies a string to separate the date fields. Default is "" (i.e. nothing).
134 # * <tt>:start_year</tt> - Set the start year for the year select. Default is <tt>Time.now.year - 5</tt>.
135 # * <tt>:end_year</tt> - Set the end year for the year select. Default is <tt>Time.now.year + 5</tt>.
136 # * <tt>:discard_day</tt> - Set to true if you don't want to show a day select. This includes the day
137 # as a hidden field instead of showing a select field. Also note that this implicitly sets the day to be the
138 # first of the given month in order to not create invalid dates like 31 February.
139 # * <tt>:discard_month</tt> - Set to true if you don't want to show a month select. This includes the month
140 # as a hidden field instead of showing a select field. Also note that this implicitly sets :discard_day to true.
141 # * <tt>:discard_year</tt> - Set to true if you don't want to show a year select. This includes the year
142 # as a hidden field instead of showing a select field.
e033b5d @lifo Merge docrails
lifo authored
143 # * <tt>:order</tt> - Set to an array containing <tt>:day</tt>, <tt>:month</tt> and <tt>:year</tt> to
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
144 # customize the order in which the select fields are shown. If you leave out any of the symbols, the respective
145 # select will not be shown (like when you set <tt>:discard_xxx => true</tt>. Defaults to the order defined in
1211896 @svenfuchs use :en as a default locale (in favor of :en-US)
svenfuchs authored
146 # the respective locale (e.g. [:year, :month, :day] in the en locale that ships with Rails).
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
147 # * <tt>:include_blank</tt> - Include a blank option in every select field so it's possible to set empty
148 # dates.
149 # * <tt>:default</tt> - Set a default date if the affected date isn't set or is nil.
150 # * <tt>:disabled</tt> - Set to true if you want show the select fields as disabled.
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
151 # * <tt>:prompt</tt> - Set to true (for a generic prompt), a prompt string or a hash of prompt strings
152 # for <tt>:year</tt>, <tt>:month</tt>, <tt>:day</tt>, <tt>:hour</tt>, <tt>:minute</tt> and <tt>:second</tt>.
153 # Setting this option prepends a select option with a generic prompt (Day, Month, Year, Hour, Minute, Seconds)
154 # or the given prompt string.
b62243a @dhh Added :disabled option to all data selects that'll make the elements …
dhh authored
155 #
64092de @fxn Improve documentation coverage and markup
fxn authored
156 # If anything is passed in the +html_options+ hash it will be applied to every select tag in the set.
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
157 #
9b5ece8 @dhh Added :order option for date_select that allows control over the orde…
dhh authored
158 # NOTE: Discarded selects will default to 1. So if no month select is available, January will be assumed.
db045db @dhh Initial
dhh authored
159 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
160 # ==== Examples
161 # # Generates a date select that when POSTed is stored in the post variable, in the written_on attribute
db045db @dhh Initial
dhh authored
162 # date_select("post", "written_on")
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
163 #
164 # # Generates a date select that when POSTed is stored in the post variable, in the written_on attribute,
165 # # with the year in the year drop down box starting at 1995.
db045db @dhh Initial
dhh authored
166 # date_select("post", "written_on", :start_year => 1995)
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
167 #
168 # # Generates a date select that when POSTed is stored in the post variable, in the written_on attribute,
169 # # with the year in the year drop down box starting at 1995, numbers used for months instead of words,
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
170 # # and without a day select box.
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
171 # date_select("post", "written_on", :start_year => 1995, :use_month_numbers => true,
db045db @dhh Initial
dhh authored
172 # :discard_day => true, :include_blank => true)
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
173 #
174 # # Generates a date select that when POSTed is stored in the post variable, in the written_on attribute
175 # # with the fields ordered as day, month, year rather than month, day, year.
9b5ece8 @dhh Added :order option for date_select that allows control over the orde…
dhh authored
176 # date_select("post", "written_on", :order => [:day, :month, :year])
db045db @dhh Initial
dhh authored
177 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
178 # # Generates a date select that when POSTed is stored in the user variable, in the birthday attribute
179 # # lacking a year field.
180 # date_select("user", "birthday", :order => [:month, :day])
181 #
182 # # Generates a date select that when POSTed is stored in the user variable, in the birthday attribute
183 # # which is initially set to the date 3 days from the current date
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
184 # date_select("post", "written_on", :default => 3.days.from_now)
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
185 #
186 # # Generates a date select that when POSTed is stored in the credit_card variable, in the bill_due attribute
187 # # that will have a default day of 20.
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
188 # date_select("credit_card", "bill_due", :default => { :day => 20 })
189 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
190 # # Generates a date select with custom prompts
191 # date_select("post", "written_on", :prompt => { :day => 'Select day', :month => 'Select month', :year => 'Select year' })
192 #
db045db @dhh Initial
dhh authored
193 # The selects are prepared for multi-parameter assignment to an Active Record object.
0cf79f0 @dhh Fixed that DateHelper#date_select should set the day to the 1st when …
dhh authored
194 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
195 # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
196 # all month choices are valid.
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
197 def date_select(object_name, method, options = {}, html_options = {})
7098143 @NZKoz Remove unused local_binding option to InstanceTag's Constructor
NZKoz authored
198 InstanceTag.new(object_name, method, self, options.delete(:object)).to_date_select_tag(options, html_options)
db045db @dhh Initial
dhh authored
199 end
200
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
201 # Returns a set of select tags (one for hour, minute and optionally second) pre-selected for accessing a
202 # specified time-based attribute (identified by +method+) on an object assigned to the template (identified by
203 # +object+). You can include the seconds with <tt>:include_seconds</tt>.
570f5aa @miloops Allow date helpers to ignore date hidden field tags. [#503 state:reso…
miloops authored
204 #
205 # This method will also generate 3 input hidden tags, for the actual year, month and day unless the option
206 # <tt>:ignore_date</tt> is set to +true+.
207 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
208 # If anything is passed in the html_options hash it will be applied to every select tag in the set.
209 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
210 # ==== Examples
211 # # Creates a time select tag that, when POSTed, will be stored in the post variable in the sunrise attribute
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
212 # time_select("post", "sunrise")
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
213 #
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
214 # # Creates a time select tag that, when POSTed, will be stored in the order variable in the submitted
215 # # attribute
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
216 # time_select("order", "submitted")
217 #
218 # # Creates a time select tag that, when POSTed, will be stored in the mail variable in the sent_at attribute
219 # time_select("mail", "sent_at")
220 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
221 # # Creates a time select tag with a seconds field that, when POSTed, will be stored in the post variables in
222 # # the sunrise attribute.
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
223 # time_select("post", "start_time", :include_seconds => true)
224 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
225 # # Creates a time select tag with a seconds field that, when POSTed, will be stored in the entry variables in
226 # # the submission_time attribute.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
227 # time_select("entry", "submission_time", :include_seconds => true)
228 #
4e7d332 Document :minute_step option for time_select. Closes #8814 [brupm]
Marcel Molina authored
229 # # You can set the :minute_step to 15 which will give you: 00, 15, 30 and 45.
230 # time_select 'game', 'game_time', {:minute_step => 15}
231 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
232 # # Creates a time select tag with a custom prompt. Use :prompt => true for generic prompts.
233 # time_select("post", "written_on", :prompt => {:hour => 'Choose hour', :minute => 'Choose minute', :second => 'Choose seconds'})
234 # time_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
235 # time_select("post", "written_on", :prompt => true) # generic prompts for all
236 #
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
237 # The selects are prepared for multi-parameter assignment to an Active Record object.
0cf79f0 @dhh Fixed that DateHelper#date_select should set the day to the 1st when …
dhh authored
238 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
239 # Note: If the day is not included as an option but the month is, the day will be set to the 1st to ensure that
240 # all month choices are valid.
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
241 def time_select(object_name, method, options = {}, html_options = {})
7098143 @NZKoz Remove unused local_binding option to InstanceTag's Constructor
NZKoz authored
242 InstanceTag.new(object_name, method, self, options.delete(:object)).to_time_select_tag(options, html_options)
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
243 end
244
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
245 # Returns a set of select tags (one for year, month, day, hour, and minute) pre-selected for accessing a
246 # specified datetime-based attribute (identified by +method+) on an object assigned to the template (identified
5b92dcb Merge docrails
lifo authored
247 # by +object+).
db045db @dhh Initial
dhh authored
248 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
249 # If anything is passed in the html_options hash it will be applied to every select tag in the set.
250 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
251 # ==== Examples
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
252 # # Generates a datetime select that, when POSTed, will be stored in the post variable in the written_on
253 # # attribute
db045db @dhh Initial
dhh authored
254 # datetime_select("post", "written_on")
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
255 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
256 # # Generates a datetime select with a year select that starts at 1995 that, when POSTed, will be stored in the
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
257 # # post variable in the written_on attribute.
db045db @dhh Initial
dhh authored
258 # datetime_select("post", "written_on", :start_year => 1995)
259 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
260 # # Generates a datetime select with a default value of 3 days from the current time that, when POSTed, will
261 # # be stored in the trip variable in the departing attribute.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
262 # datetime_select("trip", "departing", :default => 3.days.from_now)
263 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
264 # # Generates a datetime select that discards the type that, when POSTed, will be stored in the post variable
265 # # as the written_on attribute.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
266 # datetime_select("post", "written_on", :discard_type => true)
267 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
268 # # Generates a datetime select with a custom prompt. Use :prompt=>true for generic prompts.
269 # datetime_select("post", "written_on", :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
270 # datetime_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
271 # datetime_select("post", "written_on", :prompt => true) # generic prompts for all
272 #
db045db @dhh Initial
dhh authored
273 # The selects are prepared for multi-parameter assignment to an Active Record object.
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
274 def datetime_select(object_name, method, options = {}, html_options = {})
7098143 @NZKoz Remove unused local_binding option to InstanceTag's Constructor
NZKoz authored
275 InstanceTag.new(object_name, method, self, options.delete(:object)).to_datetime_select_tag(options, html_options)
db045db @dhh Initial
dhh authored
276 end
277
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
278 # Returns a set of html select-tags (one for year, month, day, hour, and minute) pre-selected with the
279 # +datetime+. It's also possible to explicitly set the order of the tags using the <tt>:order</tt> option with
280 # an array of symbols <tt>:year</tt>, <tt>:month</tt> and <tt>:day</tt> in the desired order. If you do not
281 # supply a Symbol, it will be appended onto the <tt>:order</tt> passed in. You can also add
282 # <tt>:date_separator</tt>, <tt>:datetime_separator</tt> and <tt>:time_separator</tt> keys to the +options+ to
283 # control visual display of the elements.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
284 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
285 # If anything is passed in the html_options hash it will be applied to every select tag in the set.
286 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
287 # ==== Examples
288 # my_date_time = Time.now + 4.days
289 #
290 # # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
291 # select_datetime(my_date_time)
292 #
293 # # Generates a datetime select that defaults to today (no specified datetime)
294 # select_datetime()
295 #
296 # # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
2af36bb @dhh Fix typos (closes #10378)
dhh authored
297 # # with the fields ordered year, month, day rather than month, day, year.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
298 # select_datetime(my_date_time, :order => [:year, :month, :day])
299 #
300 # # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
301 # # with a '/' between each date field.
302 # select_datetime(my_date_time, :date_separator => '/')
303 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
304 # # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
305 # # with a date fields separated by '/', time fields separated by '' and the date and time fields
306 # # separated by a comma (',').
307 # select_datetime(my_date_time, :date_separator => '/', :time_separator => '', :datetime_separator => ',')
308 #
309 # # Generates a datetime select that discards the type of the field and defaults to the datetime in
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
310 # # my_date_time (four days after today)
311 # select_datetime(my_date_time, :discard_type => true)
312 #
313 # # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
314 # # prefixed with 'payday' rather than 'date'
315 # select_datetime(my_date_time, :prefix => 'payday')
316 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
317 # # Generates a datetime select with a custom prompt. Use :prompt=>true for generic prompts.
318 # select_datetime(my_date_time, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
319 # select_datetime(my_date_time, :prompt => {:hour => true}) # generic prompt for hours
320 # select_datetime(my_date_time, :prompt => true) # generic prompts for all
321 #
f757f58 @gbuesing select_datetime and select_time default to Time.zone.now when config.…
gbuesing authored
322 def select_datetime(datetime = Time.current, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
323 DateTimeSelector.new(datetime, options, html_options).select_datetime
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
324 end
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
325
db045db @dhh Initial
dhh authored
326 # Returns a set of html select-tags (one for year, month, and day) pre-selected with the +date+.
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
327 # It's possible to explicitly set the order of the tags using the <tt>:order</tt> option with an array of
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
328 # symbols <tt>:year</tt>, <tt>:month</tt> and <tt>:day</tt> in the desired order. If you do not supply a Symbol,
329 # it will be appended onto the <tt>:order</tt> passed in.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
330 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
331 # If anything is passed in the html_options hash it will be applied to every select tag in the set.
332 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
333 # ==== Examples
334 # my_date = Time.today + 6.days
335 #
336 # # Generates a date select that defaults to the date in my_date (six days after today)
337 # select_date(my_date)
338 #
339 # # Generates a date select that defaults to today (no specified date)
340 # select_date()
341 #
342 # # Generates a date select that defaults to the date in my_date (six days after today)
2af36bb @dhh Fix typos (closes #10378)
dhh authored
343 # # with the fields ordered year, month, day rather than month, day, year.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
344 # select_date(my_date, :order => [:year, :month, :day])
345 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
346 # # Generates a date select that discards the type of the field and defaults to the date in
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
347 # # my_date (six days after today)
0432d15 @lifo Merge with docrails.
lifo authored
348 # select_date(my_date, :discard_type => true)
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
349 #
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
350 # # Generates a date select that defaults to the date in my_date,
351 # # which has fields separated by '/'
352 # select_date(my_date, :date_separator => '/')
353 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
354 # # Generates a date select that defaults to the datetime in my_date (six days after today)
355 # # prefixed with 'payday' rather than 'date'
0432d15 @lifo Merge with docrails.
lifo authored
356 # select_date(my_date, :prefix => 'payday')
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
357 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
358 # # Generates a date select with a custom prompt. Use :prompt=>true for generic prompts.
359 # select_date(my_date, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
360 # select_date(my_date, :prompt => {:hour => true}) # generic prompt for hours
361 # select_date(my_date, :prompt => true) # generic prompts for all
362 #
6672808 @gbuesing Adding Date.current, which returns Time.zone.today if config.time_zon…
gbuesing authored
363 def select_date(date = Date.current, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
364 DateTimeSelector.new(date, options, html_options).select_date
db045db @dhh Initial
dhh authored
365 end
366
ce58e5c @dhh Added DateHelper#select_time and DateHelper#select_second #373 [Scott…
dhh authored
367 # Returns a set of html select-tags (one for hour and minute)
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
368 # You can set <tt>:time_separator</tt> key to format the output, and
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
369 # the <tt>:include_seconds</tt> option to include an input for seconds.
370 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
371 # If anything is passed in the html_options hash it will be applied to every select tag in the set.
372 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
373 # ==== Examples
374 # my_time = Time.now + 5.days + 7.hours + 3.minutes + 14.seconds
375 #
376 # # Generates a time select that defaults to the time in my_time
377 # select_time(my_time)
378 #
379 # # Generates a time select that defaults to the current time (no specified time)
380 # select_time()
381 #
382 # # Generates a time select that defaults to the time in my_time,
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
383 # # which has fields separated by ':'
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
384 # select_time(my_time, :time_separator => ':')
385 #
386 # # Generates a time select that defaults to the time in my_time,
387 # # that also includes an input for seconds
388 # select_time(my_time, :include_seconds => true)
389 #
390 # # Generates a time select that defaults to the time in my_time, that has fields
391 # # separated by ':' and includes an input for seconds
392 # select_time(my_time, :time_separator => ':', :include_seconds => true)
393 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
394 # # Generates a time select with a custom prompt. Use :prompt=>true for generic prompts.
395 # select_time(my_time, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
396 # select_time(my_time, :prompt => {:hour => true}) # generic prompt for hours
397 # select_time(my_time, :prompt => true) # generic prompts for all
398 #
f757f58 @gbuesing select_datetime and select_time default to Time.zone.now when config.…
gbuesing authored
399 def select_time(datetime = Time.current, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
400 DateTimeSelector.new(datetime, options, html_options).select_time
ce58e5c @dhh Added DateHelper#select_time and DateHelper#select_second #373 [Scott…
dhh authored
401 end
402
403 # Returns a select tag with options for each of the seconds 0 through 59 with the current second selected.
404 # The <tt>second</tt> can also be substituted for a second number.
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
405 # Override the field name using the <tt>:field_name</tt> option, 'second' by default.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
406 #
407 # ==== Examples
408 # my_time = Time.now + 16.minutes
409 #
410 # # Generates a select field for seconds that defaults to the seconds for the time in my_time
411 # select_second(my_time)
412 #
413 # # Generates a select field for seconds that defaults to the number given
414 # select_second(33)
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
415 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
416 # # Generates a select field for seconds that defaults to the seconds for the time in my_time
417 # # that is named 'interval' rather than 'second'
418 # select_second(my_time, :field_name => 'interval')
419 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
420 # # Generates a select field for seconds with a custom prompt. Use :prompt=>true for a
421 # # generic prompt.
422 # select_minute(14, :prompt => 'Choose seconds')
423 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
424 def select_second(datetime, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
425 DateTimeSelector.new(datetime, options, html_options).select_second
ce58e5c @dhh Added DateHelper#select_time and DateHelper#select_second #373 [Scott…
dhh authored
426 end
427
db045db @dhh Initial
dhh authored
428 # Returns a select tag with options for each of the minutes 0 through 59 with the current minute selected.
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
429 # Also can return a select tag with options by <tt>minute_step</tt> from 0 through 59 with the 00 minute
430 # selected. The <tt>minute</tt> can also be substituted for a minute number.
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
431 # Override the field name using the <tt>:field_name</tt> option, 'minute' by default.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
432 #
433 # ==== Examples
434 # my_time = Time.now + 6.hours
435 #
436 # # Generates a select field for minutes that defaults to the minutes for the time in my_time
437 # select_minute(my_time)
438 #
439 # # Generates a select field for minutes that defaults to the number given
440 # select_minute(14)
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
441 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
442 # # Generates a select field for minutes that defaults to the minutes for the time in my_time
443 # # that is named 'stride' rather than 'second'
444 # select_minute(my_time, :field_name => 'stride')
445 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
446 # # Generates a select field for minutes with a custom prompt. Use :prompt=>true for a
447 # # generic prompt.
448 # select_minute(14, :prompt => 'Choose minutes')
449 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
450 def select_minute(datetime, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
451 DateTimeSelector.new(datetime, options, html_options).select_minute
db045db @dhh Initial
dhh authored
452 end
453
454 # Returns a select tag with options for each of the hours 0 through 23 with the current hour selected.
455 # The <tt>hour</tt> can also be substituted for a hour number.
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
456 # Override the field name using the <tt>:field_name</tt> option, 'hour' by default.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
457 #
458 # ==== Examples
459 # my_time = Time.now + 6.hours
460 #
a03e2b3 @lifo Merge with docrails. Also add a rake task to generate guides in your …
lifo authored
461 # # Generates a select field for hours that defaults to the hour for the time in my_time
462 # select_hour(my_time)
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
463 #
a03e2b3 @lifo Merge with docrails. Also add a rake task to generate guides in your …
lifo authored
464 # # Generates a select field for hours that defaults to the number given
465 # select_hour(13)
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
466 #
a03e2b3 @lifo Merge with docrails. Also add a rake task to generate guides in your …
lifo authored
467 # # Generates a select field for hours that defaults to the minutes for the time in my_time
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
468 # # that is named 'stride' rather than 'second'
a03e2b3 @lifo Merge with docrails. Also add a rake task to generate guides in your …
lifo authored
469 # select_hour(my_time, :field_name => 'stride')
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
470 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
471 # # Generates a select field for hours with a custom prompt. Use :prompt => true for a
472 # # generic prompt.
473 # select_hour(13, :prompt =>'Choose hour')
474 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
475 def select_hour(datetime, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
476 DateTimeSelector.new(datetime, options, html_options).select_hour
db045db @dhh Initial
dhh authored
477 end
478
479 # Returns a select tag with options for each of the days 1 through 31 with the current day selected.
480 # The <tt>date</tt> can also be substituted for a hour number.
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
481 # Override the field name using the <tt>:field_name</tt> option, 'day' by default.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
482 #
483 # ==== Examples
484 # my_date = Time.today + 2.days
485 #
486 # # Generates a select field for days that defaults to the day for the date in my_date
487 # select_day(my_time)
488 #
489 # # Generates a select field for days that defaults to the number given
490 # select_day(5)
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
491 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
492 # # Generates a select field for days that defaults to the day for the date in my_date
493 # # that is named 'due' rather than 'day'
494 # select_day(my_time, :field_name => 'due')
495 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
496 # # Generates a select field for days with a custom prompt. Use :prompt => true for a
497 # # generic prompt.
498 # select_day(5, :prompt => 'Choose day')
499 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
500 def select_day(date, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
501 DateTimeSelector.new(date, options, html_options).select_day
db045db @dhh Initial
dhh authored
502 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
503
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
504 # Returns a select tag with options for each of the months January through December with the current month
505 # selected. The month names are presented as keys (what's shown to the user) and the month numbers (1-12) are
506 # used as values (what's submitted to the server). It's also possible to use month numbers for the presentation
507 # instead of names -- set the <tt>:use_month_numbers</tt> key in +options+ to true for this to happen. If you
508 # want both numbers and names, set the <tt>:add_month_numbers</tt> key in +options+ to true. If you would prefer
509 # to show month names as abbreviations, set the <tt>:use_short_month</tt> key in +options+ to true. If you want
510 # to use your own month names, set the <tt>:use_month_names</tt> key in +options+ to an array of 12 month names.
511 # Override the field name using the <tt>:field_name</tt> option, 'month' by default.
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
512 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
513 # ==== Examples
514 # # Generates a select field for months that defaults to the current month that
515 # # will use keys like "January", "March".
516 # select_month(Date.today)
db045db @dhh Initial
dhh authored
517 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
518 # # Generates a select field for months that defaults to the current month that
519 # # is named "start" rather than "month"
520 # select_month(Date.today, :field_name => 'start')
521 #
522 # # Generates a select field for months that defaults to the current month that
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
523 # # will use keys like "1", "3".
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
524 # select_month(Date.today, :use_month_numbers => true)
525 #
526 # # Generates a select field for months that defaults to the current month that
527 # # will use keys like "1 - January", "3 - March".
528 # select_month(Date.today, :add_month_numbers => true)
529 #
530 # # Generates a select field for months that defaults to the current month that
531 # # will use keys like "Jan", "Mar".
532 # select_month(Date.today, :use_short_month => true)
533 #
534 # # Generates a select field for months that defaults to the current month that
535 # # will use keys like "Januar", "Marts."
536 # select_month(Date.today, :use_month_names => %w(Januar Februar Marts ...))
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
537 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
538 # # Generates a select field for months with a custom prompt. Use :prompt => true for a
539 # # generic prompt.
540 # select_month(14, :prompt => 'Choose month')
541 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
542 def select_month(date, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
543 DateTimeSelector.new(date, options, html_options).select_month
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
544 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
545
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
546 # Returns a select tag with options for each of the five years on each side of the current, which is selected.
547 # The five year radius can be changed using the <tt>:start_year</tt> and <tt>:end_year</tt> keys in the
548 # +options+. Both ascending and descending year lists are supported by making <tt>:start_year</tt> less than or
549 # greater than <tt>:end_year</tt>. The <tt>date</tt> can also be substituted for a year given as a number.
550 # Override the field name using the <tt>:field_name</tt> option, 'year' by default.
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
551 #
552 # ==== Examples
553 # # Generates a select field for years that defaults to the current year that
554 # # has ascending year values
555 # select_year(Date.today, :start_year => 1992, :end_year => 2007)
556 #
557 # # Generates a select field for years that defaults to the current year that
558 # # is named 'birth' rather than 'year'
559 # select_year(Date.today, :field_name => 'birth')
560 #
561 # # Generates a select field for years that defaults to the current year that
562 # # has descending year values
563 # select_year(Date.today, :start_year => 2005, :end_year => 1900)
db045db @dhh Initial
dhh authored
564 #
b00e6a9 @dhh Massive documentation update for all helpers (closes #8223, #8177, #8…
dhh authored
565 # # Generates a select field for years that defaults to the year 2006 that
566 # # has ascending year values
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
567 # select_year(2006, :start_year => 2000, :end_year => 2010)
c6ab8f5 @dhh Added :field_name option to DateHelper#select_(year|month|day) to dev…
dhh authored
568 #
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
569 # # Generates a select field for years with a custom prompt. Use :prompt => true for a
570 # # generic prompt.
571 # select_year(14, :prompt => 'Choose year')
572 #
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
573 def select_year(date, options = {}, html_options = {})
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
574 DateTimeSelector.new(date, options, html_options).select_year
575 end
576 end
577
578 class DateTimeSelector #:nodoc:
579 extend ActiveSupport::Memoizable
580 include ActionView::Helpers::TagHelper
581
582 DEFAULT_PREFIX = 'date'.freeze unless const_defined?('DEFAULT_PREFIX')
583 POSITION = {
584 :year => 1, :month => 2, :day => 3, :hour => 4, :minute => 5, :second => 6
585 }.freeze unless const_defined?('POSITION')
586
587 def initialize(datetime, options = {}, html_options = {})
588 @options = options.dup
589 @html_options = html_options.dup
590 @datetime = datetime
591 end
592
593 def select_datetime
594 # TODO: Remove tag conditional
595 # Ideally we could just join select_date and select_date for the tag case
596 if @options[:tag] && @options[:ignore_date]
597 select_time
598 elsif @options[:tag]
599 order = date_order.dup
600 order -= [:hour, :minute, :second]
601
602 @options[:discard_year] ||= true unless order.include?(:year)
603 @options[:discard_month] ||= true unless order.include?(:month)
604 @options[:discard_day] ||= true if @options[:discard_month] || !order.include?(:day)
605 @options[:discard_minute] ||= true if @options[:discard_hour]
606 @options[:discard_second] ||= true unless @options[:include_seconds] && !@options[:discard_minute]
607
608 # If the day is hidden and the month is visible, the day should be set to the 1st so all month choices are
609 # valid (otherwise it could be 31 and february wouldn't be a valid date)
b2cd318 @bernardo Fix regression bug that made date_select and datetime_select raise a …
bernardo authored
610 if @datetime && @options[:discard_day] && !@options[:discard_month]
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
611 @datetime = @datetime.change(:day => 1)
612 end
613
614 [:day, :month, :year].each { |o| order.unshift(o) unless order.include?(o) }
615 order += [:hour, :minute, :second] unless @options[:discard_hour]
616
617 build_selects_from_types(order)
618 else
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
619 "#{select_date}#{@options[:datetime_separator]}#{select_time}".html_safe
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
620 end
621 end
622
623 def select_date
624 order = date_order.dup
625
626 # TODO: Remove tag conditional
627 if @options[:tag]
628 @options[:discard_hour] = true
629 @options[:discard_minute] = true
630 @options[:discard_second] = true
631
632 @options[:discard_year] ||= true unless order.include?(:year)
633 @options[:discard_month] ||= true unless order.include?(:month)
634 @options[:discard_day] ||= true if @options[:discard_month] || !order.include?(:day)
635
636 # If the day is hidden and the month is visible, the day should be set to the 1st so all month choices are
637 # valid (otherwise it could be 31 and february wouldn't be a valid date)
b2cd318 @bernardo Fix regression bug that made date_select and datetime_select raise a …
bernardo authored
638 if @datetime && @options[:discard_day] && !@options[:discard_month]
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
639 @datetime = @datetime.change(:day => 1)
640 end
641 end
642
643 [:day, :month, :year].each { |o| order.unshift(o) unless order.include?(o) }
644
645 build_selects_from_types(order)
646 end
647
648 def select_time
649 order = []
650
651 # TODO: Remove tag conditional
652 if @options[:tag]
653 @options[:discard_month] = true
654 @options[:discard_year] = true
655 @options[:discard_day] = true
656 @options[:discard_second] ||= true unless @options[:include_seconds]
657
658 order += [:year, :month, :day] unless @options[:ignore_date]
659 end
660
661 order += [:hour, :minute]
662 order << :second if @options[:include_seconds]
663
664 build_selects_from_types(order)
665 end
666
667 def select_second
668 if @options[:use_hidden] || @options[:discard_second]
669 build_hidden(:second, sec) if @options[:include_seconds]
670 else
671 build_options_and_select(:second, sec)
672 end
673 end
674
675 def select_minute
676 if @options[:use_hidden] || @options[:discard_minute]
677 build_hidden(:minute, min)
678 else
679 build_options_and_select(:minute, min, :step => @options[:minute_step])
680 end
681 end
682
683 def select_hour
684 if @options[:use_hidden] || @options[:discard_hour]
685 build_hidden(:hour, hour)
686 else
687 build_options_and_select(:hour, hour, :end => 23)
688 end
689 end
690
691 def select_day
692 if @options[:use_hidden] || @options[:discard_day]
693 build_hidden(:day, day)
694 else
695 build_options_and_select(:day, day, :start => 1, :end => 31, :leading_zeros => false)
696 end
697 end
698
699 def select_month
700 if @options[:use_hidden] || @options[:discard_month]
701 build_hidden(:month, month)
702 else
703 month_options = []
704 1.upto(12) do |month_number|
705 options = { :value => month_number }
706 options[:selected] = "selected" if month == month_number
707 month_options << content_tag(:option, month_name(month_number), options) + "\n"
708 end
709 build_select(:month, month_options.join)
710 end
711 end
712
713 def select_year
714 if !@datetime || @datetime == 0
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
715 val = ''
5dd10d6 @NZKoz Remove nested ternary operators from select_year in favour of conditi…
NZKoz authored
716 middle_year = Date.today.year
717 else
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
718 val = middle_year = year
5dd10d6 @NZKoz Remove nested ternary operators from select_year in favour of conditi…
NZKoz authored
719 end
720
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
721 if @options[:use_hidden] || @options[:discard_year]
722 build_hidden(:year, val)
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
723 else
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
724 options = {}
725 options[:start] = @options[:start_year] || middle_year - 5
726 options[:end] = @options[:end_year] || middle_year + 5
727 options[:step] = options[:start] < options[:end] ? 1 : -1
728 options[:leading_zeros] = false
729
730 build_options_and_select(:year, val, options)
db045db @dhh Initial
dhh authored
731 end
732 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
733
db045db @dhh Initial
dhh authored
734 private
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
735 %w( sec min hour day month year ).each do |method|
736 define_method(method) do
737 @datetime.kind_of?(Fixnum) ? @datetime : @datetime.send(method) if @datetime
738 end
739 end
740
741 # Returns translated month names, but also ensures that a custom month
742 # name array has a leading nil element
743 def month_names
744 month_names = @options[:use_month_names] || translated_month_names
745 month_names.unshift(nil) if month_names.size < 13
746 month_names
747 end
748 memoize :month_names
749
750 # Returns translated month names
751 # => [nil, "January", "February", "March",
752 # "April", "May", "June", "July",
753 # "August", "September", "October",
754 # "November", "December"]
755 #
756 # If :use_short_month option is set
757 # => [nil, "Jan", "Feb", "Mar", "Apr", "May", "Jun",
758 # "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
759 def translated_month_names
760 begin
761 key = @options[:use_short_month] ? :'date.abbr_month_names' : :'date.month_names'
762 I18n.translate(key, :locale => @options[:locale])
763 end
764 end
765
766 # Lookup month name for number
767 # month_name(1) => "January"
768 #
769 # If :use_month_numbers option is passed
770 # month_name(1) => 1
771 #
772 # If :add_month_numbers option is passed
773 # month_name(1) => "1 - January"
774 def month_name(number)
775 if @options[:use_month_numbers]
776 number
777 elsif @options[:add_month_numbers]
778 "#{number} - #{month_names[number]}"
779 else
780 month_names[number]
781 end
782 end
783
784 def date_order
785 @options[:order] || translated_date_order
786 end
787 memoize :date_order
788
789 def translated_date_order
790 begin
791 I18n.translate(:'date.order', :locale => @options[:locale]) || []
792 end
793 end
794
795 # Build full select tag from date type and options
796 def build_options_and_select(type, selected, options = {})
797 build_select(type, build_options(selected, options))
798 end
799
800 # Build select option html from date value and options
801 # build_options(15, :start => 1, :end => 31)
802 # => "<option value="1">1</option>
803 # <option value=\"2\">2</option>
804 # <option value=\"3\">3</option>..."
805 def build_options(selected, options = {})
806 start = options.delete(:start) || 0
807 stop = options.delete(:end) || 59
808 step = options.delete(:step) || 1
809 leading_zeros = options.delete(:leading_zeros).nil? ? true : false
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
810
811 select_options = []
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
812 start.step(stop, step) do |i|
813 value = leading_zeros ? sprintf("%02d", i) : i
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
814 tag_options = { :value => value }
815 tag_options[:selected] = "selected" if selected == i
816 select_options << content_tag(:option, value, tag_options)
817 end
f86421f @nono content_tag should escape its input
nono authored
818 (select_options.join("\n") + "\n").html_safe
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
819 end
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
820
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
821 # Builds select tag from date type and html select options
822 # build_select(:month, "<option value="1">January</option>...")
823 # => "<select id="post_written_on_2i" name="post[written_on(2i)]">
824 # <option value="1">January</option>...
825 # </select>"
826 def build_select(type, select_options_as_html)
827 select_options = {
828 :id => input_id_from_type(type),
829 :name => input_name_from_type(type)
830 }.merge(@html_options)
831 select_options.merge!(:disabled => 'disabled') if @options[:disabled]
832
cd937e6 @NZKoz Make date_helper use tag and content_tag. Move to assert_dom_equal i…
NZKoz authored
833 select_html = "\n"
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
834 select_html << content_tag(:option, '', :value => '') + "\n" if @options[:include_blank]
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
835 select_html << prompt_option_tag(type, @options[:prompt]) + "\n" if @options[:prompt]
f86421f @nono content_tag should escape its input
nono authored
836 select_html << select_options_as_html
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
837
f86421f @nono content_tag should escape its input
nono authored
838 (content_tag(:select, select_html.html_safe, select_options) + "\n").html_safe
db045db @dhh Initial
dhh authored
839 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
840
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
841 # Builds a prompt option tag with supplied options or from default options
842 # prompt_option_tag(:month, :prompt => 'Select month')
843 # => "<option value="">Select month</option>"
844 def prompt_option_tag(type, options)
845 default_options = {:year => false, :month => false, :day => false, :hour => false, :minute => false, :second => false}
846
847 case options
848 when Hash
849 prompt = default_options.merge(options)[type.to_sym]
850 when String
851 prompt = options
852 else
70456ae @samoli Use I18n for date/time select helpers prompt text [#561 state:resolved]
samoli authored
853 prompt = I18n.translate(('datetime.prompts.' + type.to_s).to_sym, :locale => @options[:locale])
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
854 end
855
70456ae @samoli Use I18n for date/time select helpers prompt text [#561 state:resolved]
samoli authored
856 prompt ? content_tag(:option, prompt, :value => '') : ''
389534c @samoli Added prompt options to date helpers [#561 state:resolved]
samoli authored
857 end
858
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
859 # Builds hidden input tag for date part and value
860 # build_hidden(:year, 2008)
861 # => "<input id="post_written_on_1i" name="post[written_on(1i)]" type="hidden" value="2008" />"
862 def build_hidden(type, value)
188d521 @dhh Fixed that much of DateHelper wouldn't return html_safe? strings [DHH]
dhh authored
863 (tag(:input, {
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
864 :type => "hidden",
865 :id => input_id_from_type(type),
866 :name => input_name_from_type(type),
867 :value => value
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
868 }) + "\n").html_safe
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
869 end
870
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
871 # Returns the name attribute for the input tag
872 # => post[written_on(1i)]
873 def input_name_from_type(type)
874 prefix = @options[:prefix] || ActionView::Helpers::DateTimeSelector::DEFAULT_PREFIX
7260852 Fix date_select within fields_for with an index [#1666 state:resolved…
Josh authored
875 prefix += "[#{@options[:index]}]" if @options.has_key?(:index)
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
876
877 field_name = @options[:field_name] || type
878 if @options[:include_position]
879 field_name += "(#{ActionView::Helpers::DateTimeSelector::POSITION[type]}i)"
880 end
881
882 @options[:discard_type] ? prefix : "#{prefix}[#{field_name}]"
883 end
884
885 # Returns the id attribute for the input tag
886 # => "post_written_on_1i"
887 def input_id_from_type(type)
888 input_name_from_type(type).gsub(/([\[\(])|(\]\[)/, '_').gsub(/[\]\)]/, '')
889 end
890
18eb80c @lifo Merge docrails
lifo authored
891 # Given an ordering of datetime components, create the selection HTML
892 # and join them with their appropriate separators.
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
893 def build_selects_from_types(order)
894 select = ''
895 order.reverse.each do |type|
896 separator = separator(type) unless type == order.first # don't add on last field
897 select.insert(0, separator.to_s + send("select_#{type}").to_s)
898 end
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
899 select.html_safe
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
900 end
901
902 # Returns the separator for a given datetime component
903 def separator(type)
904 case type
905 when :month, :day
906 @options[:date_separator]
907 when :hour
908 (@options[:discard_year] && @options[:discard_day]) ? "" : @options[:datetime_separator]
909 when :minute
910 @options[:time_separator]
911 when :second
912 @options[:include_seconds] ? @options[:time_separator] : ""
913 end
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
914 end
db045db @dhh Initial
dhh authored
915 end
916
917 class InstanceTag #:nodoc:
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
918 def to_date_select_tag(options = {}, html_options = {})
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
919 datetime_selector(options, html_options).select_date.html_safe
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
920 end
db045db @dhh Initial
dhh authored
921
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
922 def to_time_select_tag(options = {}, html_options = {})
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
923 datetime_selector(options, html_options).select_time.html_safe
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
924 end
9b5ece8 @dhh Added :order option for date_select that allows control over the orde…
dhh authored
925
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
926 def to_datetime_select_tag(options = {}, html_options = {})
4cbb9db For performance reasons, you can no longer call html_safe! on Strings…
Yehuda Katz authored
927 datetime_selector(options, html_options).select_datetime.html_safe
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
928 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
929
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
930 private
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
931 def datetime_selector(options, html_options)
932 datetime = value(object) || default_datetime(options)
933
934 options = options.dup
935 options[:field_name] = @method_name
936 options[:include_position] = true
937 options[:prefix] ||= @object_name
7260852 Fix date_select within fields_for with an index [#1666 state:resolved…
Josh authored
938 options[:index] = @auto_index if @auto_index && !options.has_key?(:index)
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
939 options[:datetime_separator] ||= ' &mdash; '
940 options[:time_separator] ||= ' : '
941
942 DateTimeSelector.new(datetime, options.merge(:tag => true), html_options)
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
943 end
dfac1ce @dhh Fixed that form helpers would treat string and symbol keys differentl…
dhh authored
944
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
945 def default_datetime(options)
f04346d @samoli Stops date select helpers from defaulting the selected date to today …
samoli authored
946 return if options[:include_blank] || options[:prompt]
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
947
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
948 case options[:default]
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
949 when nil
c2c7790 @gbuesing datetime_select defaults to Time.zone.now when config.time_zone is set
gbuesing authored
950 Time.current
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
951 when Date, Time
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
952 options[:default]
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
953 else
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
954 default = options[:default].dup
955
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
956 # Rename :minute and :second to :min and :sec
957 default[:min] ||= default[:minute]
958 default[:sec] ||= default[:second]
959
bfbf03e @gbuesing ActionView::InstanceTag#default_time_from_options with hash args uses…
gbuesing authored
960 time = Time.current
ff9f6fc @clemens Refactor DateHelper and improve test coverage [#665 state:resolved]
clemens authored
961
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
962 [:year, :month, :day, :hour, :min, :sec].each do |key|
bfbf03e @gbuesing ActionView::InstanceTag#default_time_from_options with hash args uses…
gbuesing authored
963 default[key] ||= time.send(key)
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
964 end
965
105093f @clemens Refactor DateHelper to use DateTimeSelector presenter pattern
clemens authored
966 Time.utc_time(
967 default[:year], default[:month], default[:day],
968 default[:hour], default[:min], default[:sec]
969 )
970 end
d6d94c7 @jeremy date_select and datetime_select take a :default option. Closes #7052.
jeremy authored
971 end
db045db @dhh Initial
dhh authored
972 end
947cec2 @dhh Added FormHelper#form_for and FormHelper#fields_for that makes it eas…
dhh authored
973
974 class FormBuilder
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
975 def date_select(method, options = {}, html_options = {})
7260852 Fix date_select within fields_for with an index [#1666 state:resolved…
Josh authored
976 @template.date_select(@object_name, method, objectify_options(options), html_options)
947cec2 @dhh Added FormHelper#form_for and FormHelper#fields_for that makes it eas…
dhh authored
977 end
978
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
979 def time_select(method, options = {}, html_options = {})
7260852 Fix date_select within fields_for with an index [#1666 state:resolved…
Josh authored
980 @template.time_select(@object_name, method, objectify_options(options), html_options)
07423be @jeremy Bob's raining patches: fixes date_helper bugs and usability issues. R…
jeremy authored
981 end
982
4673c47 @NZKoz Allow html_options to be passed to all the date helpers. Closes #600…
NZKoz authored
983 def datetime_select(method, options = {}, html_options = {})
7260852 Fix date_select within fields_for with an index [#1666 state:resolved…
Josh authored
984 @template.datetime_select(@object_name, method, objectify_options(options), html_options)
947cec2 @dhh Added FormHelper#form_for and FormHelper#fields_for that makes it eas…
dhh authored
985 end
986 end
db045db @dhh Initial
dhh authored
987 end
202d5c0 @dhh Added support for descending year values in DateHelper#select_year, l…
dhh authored
988 end
Something went wrong with that request. Please try again.