lib/formtastic/inputs/base/timeish.rb in formtastic-2.0.0.rc1 vs lib/formtastic/inputs/base/timeish.rb in formtastic-2.0.0.rc2
- old
+ new
@@ -1,7 +1,91 @@
module Formtastic
module Inputs
module Base
+ # Timeish inputs (`:date`, `:datetime`, `:time`) are similar to the Rails date and time
+ # helpers (`date_select`, `datetime_select`, `time_select`), rendering a series of `<select>`
+ # tags for each fragment (year, month, day, hour, minute, seconds). The fragments are then
+ # re-combined to a date by ActiveRecord through multi-parameter assignment.
+ #
+ # The mark-up produced by Rails is simple but far from ideal, with no way to label the
+ # individual fragments for accessibility, no fieldset to group the related fields, and no
+ # legend describing the group. Formtastic addresses this within the standard `<li>` wrapper
+ # with a `<fieldset>` with a `<legend>` as a label, followed by an ordered list (`<ol>`) of
+ # list items (`<li>`), one for each fragment (year, month, ...). Each `<li>` fragment contains
+ # a `<label>` (eg "Year") for the fragment, and a `<select>` containing `<option>`s (eg a
+ # range of years).
+ #
+ # In the supplied formtastic.css file, the resulting mark-up is styled to appear a lot like a
+ # standard Rails date time select by:
+ #
+ # * styling the legend to look like the other labels (to the left hand side of the selects)
+ # * floating the `<li>` fragments against each other as a single line
+ # * hiding the `<label>` of each fragment with `display:none`
+ #
+ # @example `:date` input with full form context and sample HTMl output
+ #
+ # <%= semantic_form_for(@post) do |f| %>
+ # <%= f.inputs do %>
+ # ...
+ # <%= f.input :publish_at, :as => :date %>
+ # <% end %>
+ # <% end %>
+ #
+ # <form...>
+ # <fieldset class="inputs">
+ # <ol>
+ # <li class="date">
+ # <fieldset class="fragments">
+ # <ol class="fragments-group">
+ # <li class="fragment">
+ # <label for="post_publish_at_1i">Year</label>
+ # <select id="post_publish_at_1i" name="post[publish_at_1i]">...</select>
+ # </li>
+ # <li class="fragment">
+ # <label for="post_publish_at_2i">Month</label>
+ # <select id="post_publish_at_2i" name="post[publish_at_2i]">...</select>
+ # </li>
+ # <li class="fragment">
+ # <label for="post_publish_at_3i">Day</label>
+ # <select id="post_publish_at_3i" name="post[publish_at_3i]">...</select>
+ # </li>
+ # </ol>
+ # </fieldset>
+ # </li>
+ # </ol>
+ # </fieldset>
+ # </form>
+ #
+ #
+ # @example `:time` input
+ # <%= f.input :publish_at, :as => :time %>
+ #
+ # @example `:datetime` input
+ # <%= f.input :publish_at, :as => :datetime %>
+ #
+ # @example Change the labels for each fragment
+ # <%= f.input :publish_at, :as => :date, :labels => { :year => "Y", :month => "M", :day => "D" } %>
+ #
+ # @example Skip a fragment (defaults to 1, skips all following fragments)
+ # <%= f.input :publish_at, :as => :datetime, :discard_minute => true %>
+ # <%= f.input :publish_at, :as => :datetime, :discard_hour => true %>
+ # <%= f.input :publish_at, :as => :datetime, :discard_day => true %>
+ # <%= f.input :publish_at, :as => :datetime, :discard_month => true %>
+ # <%= f.input :publish_at, :as => :datetime, :discard_year => true %>
+ #
+ # @example Change the order
+ # <%= f.input :publish_at, :as => :date, :order => [:month, :day, :year] %>
+ #
+ # @example Include seconds with times (excluded by default)
+ # <%= f.input :publish_at, :as => :time, :include_seconds => true %>
+ #
+ # @example Specify if there should be a blank option at the start of each select or not
+ # <%= f.input :publish_at, :as => :time, :include_blank=> true %>
+ # <%= f.input :publish_at, :as => :time, :include_blank=> false %>
+ #
+ # @todo Document i18n
+ # @todo Check what other Rails options are supported (`start_year`, `end_year`, `use_month_numbers`, `use_short_month`, `add_month_numbers`, `prompt`), write tests for them, and otherwise support them
+ # @todo Could we take the rendering from Rails' helpers and inject better HTML in and around it rather than re-inventing the whee?
module Timeish
def to_html
input_wrapping do
fragments_wrapping do
\ No newline at end of file