Permalink
Browse files

Merge branch 'deprecations'

Conflicts:
	CHANGELOG
  • Loading branch information...
2 parents 72b79fd + 586c783 commit b9dafa376944159c1a4b0de71d752edfe74c0f8f @justinfrench committed Mar 17, 2012
View
@@ -1,3 +1,12 @@
+HEAD
+
+* removed deprecated buttons DSL, ButtonHelper and commit_button helper
+* deprecated the top-level :value option that is only used by HiddenInput
+* deprecated :hint_class option (use global configuration)
+* deprecated :error_class option (use global configuration)
+* deprecated :group_by and :group_label (use :collection option with a HTML string generated by Rails' grouped_options_for_select())
+* deprecated :find_options
+
2.1.1
* Documentation improvements and updates
View
@@ -304,16 +304,6 @@ Customize the HTML attributes for the @<li>@ wrapper around every input with the
<% end %>
</pre>
-Customize the default class used for hints on each attribute or globally in the @config/initializers/formtastic.rb@ file. Similarly, you can customize the error classes on an attribute level or globally.
-
-<pre>
- <%= semantic_form_for @post do |f| %>
- <%= f.inputs do %>
- <%= f.input :title, :hint_class => 'custom-html-class', :error_class => 'custom-error-class' %>
- <% end %>
- <% end %>
-</pre>
-
Many inputs provide a collection of options to choose from (like @:select@, @:radio@, @:check_boxes@, @:boolean@). In many cases, Formtastic can find choices through the model associations, but if you want to use your own set of choices, the @:collection@ option is what you want. You can pass in an Array of objects, an array of Strings, a Hash... Throw almost anything at it! Examples:
<pre>
@@ -41,7 +41,6 @@ def self.configure(name, value = nil)
include Formtastic::Helpers::InputHelper
include Formtastic::Helpers::InputsHelper
- include Formtastic::Helpers::ButtonsHelper
include Formtastic::Helpers::ActionHelper
include Formtastic::Helpers::ActionsHelper
include Formtastic::Helpers::ErrorsHelper
@@ -1,310 +0,0 @@
-module Formtastic
- module Helpers
-
- # ButtonsHelper encapsulates the responsibilties of the {#buttons} and {#commit_button} helpers
- # for submitting forms.
- #
- # {#buttons} is used to wrap the form's button(s) and actions in a `<fieldset>` and `<ol>`,
- # with each item in the list containing the markup representing a single button.
- #
- # {#buttons} is usually called with a block containing a single {#commit_button} call:
- #
- # <%= semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons do %>
- # <%= f.commit_button
- # <% end %>
- # <% end %>
- #
- # The HTML output will be something like:
- #
- # <form class="formtastic" method="post" action="...">
- # ...
- # <fieldset class="buttons">
- # <ol>
- # <li class="commit button">
- # <input type="submit" name="commit" value="Create Post" class="create">
- # </li>
- # </ol>
- # </fieldset>
- # </form>
- #
- # While this may seem slightly over-engineered, it is consistent with the way form inputs are
- # handled, and makes room for other types of buttons and actions in future versions (such as
- # cancel buttons or links, reset buttons and even alternate actions like 'save and continue
- # editing').
- #
- # It's important to note that the `semantic_form_for` and {#buttons} blocks wrap the
- # standard Rails `form_for` helper and form builder, so you have full access to every standard
- # Rails form helper, with any HTML markup and ERB syntax, allowing you to "break free" from
- # Formtastic when it doesn't suit to create your own buttons, links and actions:
- #
- # <%= semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons do %>
- # <li class="save">
- # <%= f.submit "Save" %>
- # <li>
- # <li class="cancel-link">
- # Or <%= link_to "Cancel", posts_url %>
- # <li>
- # <% end %>
- # <% end %>
- #
- # There are many other syntax variations and arguments to customize your form. See the
- # full documentation of {#buttons} and {#commit_button} for details.
- #
- # @deprecated ButtonsHelper will be removed after 2.1
- module ButtonsHelper
- include Formtastic::Helpers::FieldsetWrapper
- include Formtastic::LocalizedString
-
- # Creates a fieldset and ol tag wrapping for use around a set of buttons. It can be
- # called either with a block (in which you can do the usual Rails form stuff, HTML, ERB, etc),
- # or with a list of named buttons. These two examples are functionally equivalent:
- #
- # # With a block:
- # <% semantic_form_for @post do |f| %>
- # ...
- # <% f.buttons do %>
- # <%= f.commit_button %>
- # <% end %>
- # <% end %>
- #
- # # With a list of fields:
- # <% semantic_form_for @post do |f| %>
- # <%= f.buttons :commit %>
- # <% end %>
- #
- # # Output:
- # <form ...>
- # <fieldset class="buttons">
- # <ol>
- # <li class="commit button">
- # <input type="submit" ...>
- # </li>
- # </ol>
- # </fieldset>
- # </form>
- #
- # Only one type of named button is supported at this time (:commit), and it's assumed to be
- # the default choice, so this is also functionally equivalent, but may change in the future:
- #
- # # With no args:
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons %>
- # <% end %>
- #
- # While this may seem slightly over-engineered, it is consistent with the way form inputs are
- # handled, and makes room for other types of buttons and actions in future versions (such as
- # cancel buttons or links, reset buttons and even alternate actions like 'save and continue
- # editing').
- #
- # All options except `:name` and `:title` are passed down to the fieldset as HTML
- # attributes (`id`, `class`, `style`...). If provided, the `:name` or `:title` option is
- # passed into a `<legend>` inside the `<fieldset>` to name the set of buttons.
- #
- # @example Quickly add button(s) to the form, accepting all default values, options and behaviors
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons %>
- # <% end %>
- #
- # @example Specify which named buttons you want, accepting all default values, options and behaviors
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons :commit %>
- # <% end %>
- #
- # @example Specify which named buttons you want, and name the fieldset
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons :commit, :name => "Actions" %>
- # or
- # <%= f.buttons :commit, :label => "Actions" %>
- # <% end %>
- #
- # @example Get full control over the commit_button options
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons do %>
- # <%= f.commit_button :label => "Go", :button_html => { :class => "pretty" :disable_with => "Wait..." }, :wrapper_html => { ... }
- # <% end %>
- # <% end %>
- #
- # @example Make your own custom buttons, links or actions with standard Rails helpers or HTML
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons do %>
- # <li class="submit">
- # <%= f.submit "Submit" %>
- # </li>
- # <li class="reset">
- # <input type="reset" value="Reset">
- # </li>
- # <li class="cancel">
- # <%= link_to "Cancel", posts_url %>
- # </li>
- # <% end %>
- # <% end %>
- #
- # @example Add HTML attributes to the fieldset
- # <% semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons :commit, :style => "border:1px;" %>
- # or
- # <%= f.buttons :style => "border:1px;" do %>
- # ...
- # <% end %>
- # <% end %>
- #
- # @option *args :label [String, Symbol]
- # Optionally specify text for the legend of the fieldset
- #
- # @option *args :name [String, Symbol]
- # Optionally specify text for the legend of the fieldset (alias for `:label`)
- #
- # @todo document i18n keys
- # @deprecated f.buttons is deprecated in favor of f.actions and will be removed after 2.1
- def buttons(*args, &block)
- ::ActiveSupport::Deprecation.warn("f.buttons is deprecated in favour of f.actions and will be removed from Formtastic after 2.1. Please see ActionsHelper and InputAction or ButtonAction for more information")
-
- html_options = args.extract_options!
- html_options[:class] ||= "buttons"
-
- if block_given?
- field_set_and_list_wrapping(html_options, &block)
- else
- args = [:commit] if args.empty?
- contents = args.map { |button_name| send(:"#{button_name}_button") }
- field_set_and_list_wrapping(html_options, contents)
- end
- end
-
- # Creates a submit input tag with the value "Save [model name]" (for existing records) or
- # "Create [model name]" (for new records) by default. The output is an `<input>` tag with the
- # `type` of `submit` and a class of either `create` or `update` (if Formtastic can determin if)
- # the record is new or not) with `submit` as a fallback class. The submit button is wrapped in
- # an `<li>` tag with a class of `commit`, and is intended to be rendered inside a {#buttons}
- # block which wraps the button in a `fieldset` and `ol`.
- #
- # The textual value of the label can be changed from this default through the `:label`
- # argument or through i18n.
- #
- # You can pass HTML attributes down to the `<input>` tag with the `:button_html` option, and
- # pass HTML attributes to the wrapping `<li>` tag with the `:wrapper_html` option.
- #
- # @example Basic usage
- # # form
- # <%= semantic_form_for @post do |f| %>
- # ...
- # <%= f.buttons do %>
- # <%= f.commit_button %>
- # <% end %>
- # <% end %>
- #
- # # output
- # <form ...>
- # ...
- # <fieldset class="buttons">
- # <ol>
- # <li class="commit button">
- # <input name="commit" type="submit" value="Create Post" class="create">
- # </li>
- # </ol>
- # </fieldset>
- # </form>
- #
- # @example Set the value through the `:label` option
- # <%= f.commit_button :label => "Go" %>
- #
- # @example Set the value through the optional first argument (like Rails' `f.submit`)
- # <%= f.commit_button "Go" %>
- #
- # @example Pass HTML attributes down to the `<input>`
- # <%= f.commit_button :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
- # <%= f.commit_button :label => "Go", :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
- # <%= f.commit_button "Go", :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
- #
- # @example Pass HTML attributes down to the `<li>` wrapper
- # <%= f.commit_button :wrapper_html => { :class => 'special', :id => 'whatever' } %>
- # <%= f.commit_button :label => "Go", :wrapper_html => { :class => 'special', :id => 'whatever' } %>
- # <%= f.commit_button "Go", :wrapper_html => { :class => 'special', :id => 'whatever' } %>
- #
- # @option *args :label [String, Symbol]
- # Override the label text with a String or a symbold for an i18n translation key
- #
- # @option *args :button_html [Hash]
- # Override or add to the HTML attributes to be passed down to the `<input>` tag
- #
- # @option *args :wrapper_html [Hash]
- # Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
- #
- # @todo document i18n keys
- # @todo strange that `:accesskey` seems to be supported in the top level args as well as `:button_html`
- # @deprecated f.commit_button is deprecated in favor of f.actions and will be removed after 2.1
- def commit_button(*args)
- ::ActiveSupport::Deprecation.warn("f.commit_button is deprecated in favour of f.action(:submit) and will be removed from Formtastic after 2.1. Please see ActionsHelper and InputAction or ButtonAction for more information")
-
- options = args.extract_options!
- text = options.delete(:label) || args.shift
-
- text = (localized_string(commit_button_i18n_key, text, :action, :model => commit_button_object_name) ||
- Formtastic::I18n.t(commit_button_i18n_key, :model => commit_button_object_name)) unless text.is_a?(::String)
-
- button_html = options.delete(:button_html) || {}
- button_html[:id] ||= "#{@object_name}_submit"
- button_html.merge!(:class => [button_html[:class], commit_button_i18n_key].compact.join(' '))
-
- wrapper_html = options.delete(:wrapper_html) || {}
- wrapper_html[:class] = (commit_button_wrapper_html_class << wrapper_html[:class]).flatten.compact.join(' ')
-
- accesskey = (options.delete(:accesskey) || default_commit_button_accesskey) unless button_html.has_key?(:accesskey)
- button_html = button_html.merge(:accesskey => accesskey) if accesskey
-
- template.content_tag(:li, Formtastic::Util.html_safe(submit(text, button_html)), wrapper_html)
- end
-
- def commit_button_object_name
- if new_or_persisted_object?
- # Deal with some complications with ActiveRecord::Base.human_name and two name models (eg UserPost)
- # ActiveRecord::Base.human_name falls back to ActiveRecord::Base.name.humanize ("Userpost")
- # if there's no i18n, which is pretty crappy. In this circumstance we want to detect this
- # fall back (human_name == name.humanize) and do our own thing name.underscore.humanize ("User Post")
- if @object.class.model_name.respond_to?(:human)
- object_name = @object.class.model_name.human
- else
- object_human_name = @object.class.human_name # default is UserPost => "Userpost", but i18n may do better ("User post")
- crappy_human_name = @object.class.name.humanize # UserPost => "Userpost"
- decent_human_name = @object.class.name.underscore.humanize # UserPost => "User post"
- object_name = (object_human_name == crappy_human_name) ? decent_human_name : object_human_name
- end
- else
- object_name = @object_name.to_s.send(label_str_method)
- end
-
- object_name
- end
-
- def commit_button_i18n_key
- if new_or_persisted_object?
- key = @object.persisted? ? :update : :create
- else
- key = :submit
- end
-
- key
- end
-
- def commit_button_wrapper_html_class
- ['commit', 'button'] # TODO: Add class reflecting on form action.
- end
-
- def new_or_persisted_object?
- @object && (@object.respond_to?(:persisted?) || @object.respond_to?(:new_record?))
- end
-
- end
- end
-end
@@ -143,34 +143,16 @@ module InputHelper
# @option options :member_value [Symbol, Proc, Method]
# Override the method called on each object in the `:collection` for use as the `value` attribute in the `<input>` (`:check_boxes` & `:radio` inputs) or `<option>` (`:select` inputs)
#
- # @option options :hint_class [String]
- # Override the `class` attribute applied to the `<p>` tag used when a `:hint` is rendered for an input
- #
- # @option options :error_class [String]
- # Override the `class` attribute applied to the `<p>` or `<ol>` tag used when inline errors are rendered for an input
- #
# @option options :multiple [Boolean]
# Specify if the `:select` input should allow multiple selections or not (defaults to `belongs_to` associations, and `true` for `has_many` and `has_and_belongs_to_many` associations)
#
- # @option options :group_by [Symbol]
- # TODO will probably be deprecated
- #
- # @option options :find_options [Symbol]
- # TODO will probably be deprecated
- #
- # @option options :group_label [Symbol]
- # TODO will probably be deprecated
- #
# @option options :include_blank [Boolean]
# Specify if a `:select` input should include a blank option or not (defaults to `include_blank_for_select_by_default` configuration)
#
# @option options :prompt [String]
# Specify the text in the first ('blank') `:select` input `<option>` to prompt a user to make a selection (implicitly sets `:include_blank` to `true`)
#
- # @todo Can we kill `:hint_class` & `:error_class`? What's the use case for input-by-input? Shift to config or burn!
- # @todo Can we kill `:group_by` & `:group_label`? Should be done with :collection => grouped_options_for_select(...)
- # @todo Can we kill `:find_options`? Should be done with MyModel.some_scope.where(...).order(...).whatever_scope
- # @todo Can we kill `:label`, `:hint` & `:prompt`? All strings could be shifted to i18n!
+ # @todo Can we deprecate & kill `:label`, `:hint` & `:prompt`? All strings could be shifted to i18n!
#
# @example Accept all default options
# <%= f.input :title %>
Oops, something went wrong.

0 comments on commit b9dafa3

Please sign in to comment.