mirror of https://github.com/rails/rails
Added time_tag helper to AP for HTML5 time tag [#5919 state:resolved]
Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
This commit is contained in:
parent
d72add9c20
commit
95a5bd87cb
|
@ -566,6 +566,25 @@ module ActionView
|
||||||
def select_year(date, options = {}, html_options = {})
|
def select_year(date, options = {}, html_options = {})
|
||||||
DateTimeSelector.new(date, options, html_options).select_year
|
DateTimeSelector.new(date, options, html_options).select_year
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Returns an html time tag for the given date or time.
|
||||||
|
#
|
||||||
|
# ==== Examples
|
||||||
|
# time_tag Date.today # =>
|
||||||
|
# <time datetime="2010-11-04">November 04, 2010</time>
|
||||||
|
# time_tag Time.now # =>
|
||||||
|
# <time datetime="2010-11-04T17:55:45+01:00">November 04, 2010 17:55</time>
|
||||||
|
# time_tag Date.yesterday, 'Yesterday' # =>
|
||||||
|
# <time datetime="2010-11-03">Yesterday</time>
|
||||||
|
# time_tag Date.today, :pubdate => true # =>
|
||||||
|
# <time datetime="2010-11-04" pubdate="pubdate">November 04, 2010</time>
|
||||||
|
#
|
||||||
|
def time_tag(date_or_time, *args)
|
||||||
|
options = args.extract_options!
|
||||||
|
content = args.first || I18n.l(date_or_time, :format => :long)
|
||||||
|
datetime = date_or_time.acts_like?(:time) ? date_or_time.xmlschema : date_or_time.rfc3339
|
||||||
|
content_tag :time, content, options.reverse_merge(:datetime => datetime)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class DateTimeSelector #:nodoc:
|
class DateTimeSelector #:nodoc:
|
||||||
|
|
|
@ -14,7 +14,7 @@ module ActionView
|
||||||
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
|
BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer
|
||||||
autoplay controls loop selected hidden scoped async
|
autoplay controls loop selected hidden scoped async
|
||||||
defer reversed ismap seemless muted required
|
defer reversed ismap seemless muted required
|
||||||
autofocus novalidate formnovalidate open).to_set
|
autofocus novalidate formnovalidate open pubdate).to_set
|
||||||
BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map {|attribute| attribute.to_sym })
|
BOOLEAN_ATTRIBUTES.merge(BOOLEAN_ATTRIBUTES.map {|attribute| attribute.to_sym })
|
||||||
|
|
||||||
# Returns an empty HTML tag of type +name+ which by default is XHTML
|
# Returns an empty HTML tag of type +name+ which by default is XHTML
|
||||||
|
|
|
@ -2700,6 +2700,26 @@ class DateHelperTest < ActionView::TestCase
|
||||||
assert time_select("post", "written_on", :ignore_date => true).html_safe?
|
assert time_select("post", "written_on", :ignore_date => true).html_safe?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_time_tag_with_date
|
||||||
|
date = Date.today
|
||||||
|
expected = "<time datetime=\"#{date.rfc3339}\">#{I18n.l(date, :format => :long)}</time>"
|
||||||
|
assert_equal expected, time_tag(date)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_time_tag_with_time
|
||||||
|
time = Time.now
|
||||||
|
expected = "<time datetime=\"#{time.xmlschema}\">#{I18n.l(time, :format => :long)}</time>"
|
||||||
|
assert_equal expected, time_tag(time)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_time_tag_pubdate_option
|
||||||
|
assert_match /<time.*pubdate="pubdate">.*<\/time>/, time_tag(Time.now, :pubdate => true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_time_tag_with_given_text
|
||||||
|
assert_match /<time.*>Right now<\/time>/, time_tag(Time.now, 'Right now')
|
||||||
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
def with_env_tz(new_tz = 'US/Eastern')
|
def with_env_tz(new_tz = 'US/Eastern')
|
||||||
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
||||||
|
|
Loading…
Reference in New Issue