From 5d49c0c567b715ad6e47d56ede4b514124051d9e Mon Sep 17 00:00:00 2001 From: Sjoerd Andringa Date: Thu, 4 Nov 2010 19:04:11 +0100 Subject: [PATCH] Add time_tag helper for HTML5 time tag [#5919 state:committed] --- actionpack/lib/action_view/helpers/date_helper.rb | 19 ++++++++++++++++++ actionpack/lib/action_view/helpers/tag_helper.rb | 2 +- actionpack/test/template/date_helper_test.rb | 22 ++++++++++++++++++++- 3 files changed, 41 insertions(+), 2 deletions(-) diff --git a/actionpack/lib/action_view/helpers/date_helper.rb b/actionpack/lib/action_view/helpers/date_helper.rb index c1214bc..a3d79ca 100644 --- a/actionpack/lib/action_view/helpers/date_helper.rb +++ b/actionpack/lib/action_view/helpers/date_helper.rb @@ -566,6 +566,25 @@ module ActionView def select_year(date, options = {}, html_options = {}) DateTimeSelector.new(date, options, html_options).select_year end + + # Returns an html time tag for the given date or time. + # + # ==== Examples + # time_tag Date.today # => + # + # time_tag Time.now # => + # + # time_tag Date.yesterday, 'Yesterday' # => + # + # time_tag Date.today, :pubdate => true # => + # + # + 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 class DateTimeSelector #:nodoc: diff --git a/actionpack/lib/action_view/helpers/tag_helper.rb b/actionpack/lib/action_view/helpers/tag_helper.rb index ee51617..786af5c 100644 --- a/actionpack/lib/action_view/helpers/tag_helper.rb +++ b/actionpack/lib/action_view/helpers/tag_helper.rb @@ -14,7 +14,7 @@ module ActionView BOOLEAN_ATTRIBUTES = %w(disabled readonly multiple checked autobuffer autoplay controls loop selected hidden scoped async 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 }) # Returns an empty HTML tag of type +name+ which by default is XHTML diff --git a/actionpack/test/template/date_helper_test.rb b/actionpack/test/template/date_helper_test.rb index 0cf7885..a837216 100644 --- a/actionpack/test/template/date_helper_test.rb +++ b/actionpack/test/template/date_helper_test.rb @@ -2658,7 +2658,27 @@ class DateHelperTest < ActionView::TestCase assert date_select("post", "written_on", :default => Time.local(2006, 9, 19, 15, 16, 35), :include_blank => true).html_safe? assert time_select("post", "written_on", :ignore_date => true).html_safe? end - + + def test_time_tag_with_date + date = Date.today + expected = "" + assert_equal expected, time_tag(date) + end + + def test_time_tag_with_time + time = Time.now + expected = "" + assert_equal expected, time_tag(time) + end + + def test_time_tag_pubdate_option + assert_match /.*<\/time>/, time_tag(Time.now, :pubdate => true) + end + + def test_time_tag_with_given_text + assert_match /Right now<\/time>/, time_tag(Time.now, 'Right now') + end + protected def with_env_tz(new_tz = 'US/Eastern') old_tz, ENV['TZ'] = ENV['TZ'], new_tz -- 1.7.2.2