Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
7d7a353f
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
7d7a353f
编写于
5月 07, 2011
作者:
J
José Valim
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #343 from asanghi/ampm
Allow AM/PM format in datetime selectors
上级
f77cd7c7
8bce6e76
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
85 addition
and
4 deletion
+85
-4
actionpack/lib/action_view/helpers/date_helper.rb
actionpack/lib/action_view/helpers/date_helper.rb
+30
-4
actionpack/test/template/date_helper_test.rb
actionpack/test/template/date_helper_test.rb
+55
-0
未找到文件。
actionpack/lib/action_view/helpers/date_helper.rb
浏览文件 @
7d7a353f
...
...
@@ -218,7 +218,8 @@ def date_select(object_name, method, options = {}, html_options = {})
# Returns a set of select tags (one for hour, minute and optionally second) pre-selected for accessing a
# specified time-based attribute (identified by +method+) on an object assigned to the template (identified by
# +object+). You can include the seconds with <tt>:include_seconds</tt>.
# +object+). You can include the seconds with <tt>:include_seconds</tt>. You can get hours in the AM/PM format
# with <tt>:ampm</tt> option.
#
# This method will also generate 3 input hidden tags, for the actual year, month and day unless the option
# <tt>:ignore_date</tt> is set to +true+.
...
...
@@ -241,6 +242,9 @@ def date_select(object_name, method, options = {}, html_options = {})
# time_select("post", "written_on", :prompt => {:hour => true}) # generic prompt for hours
# time_select("post", "written_on", :prompt => true) # generic prompts for all
#
# # You can set :ampm option to true which will show the hours as: 12 PM, 01 AM .. 11 PM.
# time_select 'game', 'game_time', {:ampm => true}
#
# The selects are prepared for multi-parameter assignment to an Active Record object.
#
# 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
...
...
@@ -268,6 +272,9 @@ def time_select(object_name, method, options = {}, html_options = {})
# # be stored in the trip variable in the departing attribute.
# datetime_select("trip", "departing", :default => 3.days.from_now)
#
# # Generate a datetime select with hours in the AM/PM format
# datetime_select("post", "written_on", :ampm => true)
#
# # Generates a datetime select that discards the type that, when POSTed, will be stored in the post variable
# # as the written_on attribute.
# datetime_select("post", "written_on", :discard_type => true)
...
...
@@ -317,6 +324,9 @@ def datetime_select(object_name, method, options = {}, html_options = {})
# # my_date_time (four days after today)
# select_datetime(my_date_time, :discard_type => true)
#
# # Generate a datetime field with hours in the AM/PM format
# select_datetime(my_date_time, :ampm => true)
#
# # Generates a datetime select that defaults to the datetime in my_date_time (four days after today)
# # prefixed with 'payday' rather than 'date'
# select_datetime(my_date_time, :prefix => 'payday')
...
...
@@ -398,6 +408,9 @@ def select_date(date = Date.current, options = {}, html_options = {})
# # separated by ':' and includes an input for seconds
# select_time(my_time, :time_separator => ':', :include_seconds => true)
#
# # Generate a time select field with hours in the AM/PM format
# select_time(my_time, :ampm => true)
#
# # Generates a time select with a custom prompt. Use :prompt=>true for generic prompts.
# select_time(my_time, :prompt => {:day => 'Choose day', :month => 'Choose month', :year => 'Choose year'})
# select_time(my_time, :prompt => {:hour => true}) # generic prompt for hours
...
...
@@ -479,6 +492,9 @@ def select_minute(datetime, options = {}, html_options = {})
# # generic prompt.
# select_hour(13, :prompt => 'Choose hour')
#
# # Generate a select field for hours in the AM/PM format
# select_hour(my_time, :ampm => true)
#
def
select_hour
(
datetime
,
options
=
{},
html_options
=
{})
DateTimeSelector
.
new
(
datetime
,
options
,
html_options
).
select_hour
end
...
...
@@ -612,6 +628,15 @@ class DateTimeSelector #:nodoc:
:year
=>
1
,
:month
=>
2
,
:day
=>
3
,
:hour
=>
4
,
:minute
=>
5
,
:second
=>
6
}.
freeze
AMPM_TRANSLATION
=
Hash
[
[[
0
,
"12 AM"
],
[
1
,
"01 AM"
],
[
2
,
"02 AM"
],
[
3
,
"03 AM"
],
[
4
,
"04 AM"
],
[
5
,
"05 AM"
],
[
6
,
"06 AM"
],
[
7
,
"07 AM"
],
[
8
,
"08 AM"
],
[
9
,
"09 AM"
],
[
10
,
"10 AM"
],
[
11
,
"11 AM"
],
[
12
,
"12 PM"
],
[
13
,
"01 PM"
],
[
14
,
"02 PM"
],
[
15
,
"03 PM"
],
[
16
,
"04 PM"
],
[
17
,
"05 PM"
],
[
18
,
"06 PM"
],
[
19
,
"07 PM"
],
[
20
,
"08 PM"
],
[
21
,
"09 PM"
],
[
22
,
"10 PM"
],
[
23
,
"11 PM"
]]
].
freeze
def
initialize
(
datetime
,
options
=
{},
html_options
=
{})
@options
=
options
.
dup
@html_options
=
html_options
.
dup
...
...
@@ -703,7 +728,7 @@ def select_hour
if
@options
[
:use_hidden
]
||
@options
[
:discard_hour
]
build_hidden
(
:hour
,
hour
)
else
build_options_and_select
(
:hour
,
hour
,
:end
=>
23
)
build_options_and_select
(
:hour
,
hour
,
:end
=>
23
,
:ampm
=>
@options
[
:ampm
]
)
end
end
...
...
@@ -821,7 +846,7 @@ def build_options(selected, options = {})
start
=
options
.
delete
(
:start
)
||
0
stop
=
options
.
delete
(
:end
)
||
59
step
=
options
.
delete
(
:step
)
||
1
options
.
reverse_merge!
({
:leading_zeros
=>
true
})
options
.
reverse_merge!
({
:leading_zeros
=>
true
,
:ampm
=>
false
})
leading_zeros
=
options
.
delete
(
:leading_zeros
)
select_options
=
[]
...
...
@@ -829,7 +854,8 @@ def build_options(selected, options = {})
value
=
leading_zeros
?
sprintf
(
"%02d"
,
i
)
:
i
tag_options
=
{
:value
=>
value
}
tag_options
[
:selected
]
=
"selected"
if
selected
==
i
select_options
<<
content_tag
(
:option
,
value
,
tag_options
)
text
=
options
[
:ampm
]
?
AMPM_TRANSLATION
[
i
]
:
value
select_options
<<
content_tag
(
:option
,
text
,
tag_options
)
end
(
select_options
.
join
(
"
\n
"
)
+
"
\n
"
).
html_safe
end
...
...
actionpack/test/template/date_helper_test.rb
浏览文件 @
7d7a353f
...
...
@@ -420,6 +420,14 @@ def test_select_hour
assert_dom_equal
expected
,
select_hour
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
))
end
def
test_select_hour_with_ampm
expected
=
%(<select id="date_hour" name="date[hour]">\n)
expected
<<
%(<option value="00">12 AM</option>\n<option value="01">01 AM</option>\n<option value="02">02 AM</option>\n<option value="03">03 AM</option>\n<option value="04">04 AM</option>\n<option value="05">05 AM</option>\n<option value="06">06 AM</option>\n<option value="07">07 AM</option>\n<option value="08" selected="selected">08 AM</option>\n<option value="09">09 AM</option>\n<option value="10">10 AM</option>\n<option value="11">11 AM</option>\n<option value="12">12 PM</option>\n<option value="13">01 PM</option>\n<option value="14">02 PM</option>\n<option value="15">03 PM</option>\n<option value="16">04 PM</option>\n<option value="17">05 PM</option>\n<option value="18">06 PM</option>\n<option value="19">07 PM</option>\n<option value="20">08 PM</option>\n<option value="21">09 PM</option>\n<option value="22">10 PM</option>\n<option value="23">11 PM</option>\n)
expected
<<
"</select>
\n
"
assert_dom_equal
expected
,
select_hour
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
),
:ampm
=>
true
)
end
def
test_select_hour_with_disabled
expected
=
%(<select id="date_hour" name="date[hour]" disabled="disabled">\n)
expected
<<
%(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08" selected="selected">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n)
...
...
@@ -941,6 +949,35 @@ def test_select_datetime
assert_dom_equal
expected
,
select_datetime
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
),
:start_year
=>
2003
,
:end_year
=>
2005
,
:prefix
=>
"date[first]"
)
end
def
test_select_datetime_with_ampm
expected
=
%(<select id="date_first_year" name="date[first][year]">\n)
expected
<<
%(<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
expected
<<
"</select>
\n
"
expected
<<
%(<select id="date_first_month" name="date[first][month]">\n)
expected
<<
%(<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8" selected="selected">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12">December</option>\n)
expected
<<
"</select>
\n
"
expected
<<
%(<select id="date_first_day" name="date[first][day]">\n)
expected
<<
%(<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16" selected="selected">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n)
expected
<<
"</select>
\n
"
expected
<<
" — "
expected
<<
%(<select id="date_first_hour" name="date[first][hour]">\n)
expected
<<
%(<option value="00">12 AM</option>\n<option value="01">01 AM</option>\n<option value="02">02 AM</option>\n<option value="03">03 AM</option>\n<option value="04">04 AM</option>\n<option value="05">05 AM</option>\n<option value="06">06 AM</option>\n<option value="07">07 AM</option>\n<option value="08" selected="selected">08 AM</option>\n<option value="09">09 AM</option>\n<option value="10">10 AM</option>\n<option value="11">11 AM</option>\n<option value="12">12 PM</option>\n<option value="13">01 PM</option>\n<option value="14">02 PM</option>\n<option value="15">03 PM</option>\n<option value="16">04 PM</option>\n<option value="17">05 PM</option>\n<option value="18">06 PM</option>\n<option value="19">07 PM</option>\n<option value="20">08 PM</option>\n<option value="21">09 PM</option>\n<option value="22">10 PM</option>\n<option value="23">11 PM</option>\n)
expected
<<
"</select>
\n
"
expected
<<
" : "
expected
<<
%(<select id="date_first_minute" name="date[first][minute]">\n)
expected
<<
%(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
expected
<<
"</select>
\n
"
assert_dom_equal
expected
,
select_datetime
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
),
:start_year
=>
2003
,
:end_year
=>
2005
,
:prefix
=>
"date[first]"
,
:ampm
=>
true
)
end
def
test_select_datetime_with_separators
expected
=
%(<select id="date_first_year" name="date[first][year]">\n)
expected
<<
%(<option value="2003" selected="selected">2003</option>\n<option value="2004">2004</option>\n<option value="2005">2005</option>\n)
...
...
@@ -1140,6 +1177,24 @@ def test_select_time
assert_dom_equal
expected
,
select_time
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
),
:include_seconds
=>
false
)
end
def
test_select_time_with_ampm
expected
=
%(<input name="date[year]" id="date_year" value="2003" type="hidden" />\n)
expected
<<
%(<input name="date[month]" id="date_month" value="8" type="hidden" />\n)
expected
<<
%(<input name="date[day]" id="date_day" value="16" type="hidden" />\n)
expected
<<
%(<select id="date_hour" name="date[hour]">\n)
expected
<<
%(<option value="00">12 AM</option>\n<option value="01">01 AM</option>\n<option value="02">02 AM</option>\n<option value="03">03 AM</option>\n<option value="04">04 AM</option>\n<option value="05">05 AM</option>\n<option value="06">06 AM</option>\n<option value="07">07 AM</option>\n<option value="08" selected="selected">08 AM</option>\n<option value="09">09 AM</option>\n<option value="10">10 AM</option>\n<option value="11">11 AM</option>\n<option value="12">12 PM</option>\n<option value="13">01 PM</option>\n<option value="14">02 PM</option>\n<option value="15">03 PM</option>\n<option value="16">04 PM</option>\n<option value="17">05 PM</option>\n<option value="18">06 PM</option>\n<option value="19">07 PM</option>\n<option value="20">08 PM</option>\n<option value="21">09 PM</option>\n<option value="22">10 PM</option>\n<option value="23">11 PM</option>\n)
expected
<<
"</select>
\n
"
expected
<<
" : "
expected
<<
%(<select id="date_minute" name="date[minute]">\n)
expected
<<
%(<option value="00">00</option>\n<option value="01">01</option>\n<option value="02">02</option>\n<option value="03">03</option>\n<option value="04" selected="selected">04</option>\n<option value="05">05</option>\n<option value="06">06</option>\n<option value="07">07</option>\n<option value="08">08</option>\n<option value="09">09</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31">31</option>\n<option value="32">32</option>\n<option value="33">33</option>\n<option value="34">34</option>\n<option value="35">35</option>\n<option value="36">36</option>\n<option value="37">37</option>\n<option value="38">38</option>\n<option value="39">39</option>\n<option value="40">40</option>\n<option value="41">41</option>\n<option value="42">42</option>\n<option value="43">43</option>\n<option value="44">44</option>\n<option value="45">45</option>\n<option value="46">46</option>\n<option value="47">47</option>\n<option value="48">48</option>\n<option value="49">49</option>\n<option value="50">50</option>\n<option value="51">51</option>\n<option value="52">52</option>\n<option value="53">53</option>\n<option value="54">54</option>\n<option value="55">55</option>\n<option value="56">56</option>\n<option value="57">57</option>\n<option value="58">58</option>\n<option value="59">59</option>\n)
expected
<<
"</select>
\n
"
assert_dom_equal
expected
,
select_time
(
Time
.
mktime
(
2003
,
8
,
16
,
8
,
4
,
18
),
:include_seconds
=>
false
,
:ampm
=>
true
)
end
def
test_select_time_with_separator
expected
=
%(<input name="date[year]" id="date_year" value="2003" type="hidden" />\n)
expected
<<
%(<input name="date[month]" id="date_month" value="8" type="hidden" />\n)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录