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:
Sjoerd Andringa 2011-02-13 00:56:04 +01:00 committed by Santiago Pastorino
parent d72add9c20
commit 95a5bd87cb
3 changed files with 41 additions and 2 deletions

View File

@ -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:

View File

@ -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

View File

@ -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