formtastic 2.0.2 → 2.1.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/.gitignore +4 -1
  2. data/Appraisals +11 -0
  3. data/CHANGELOG +2 -2
  4. data/Gemfile +0 -2
  5. data/README.textile +183 -151
  6. data/Rakefile +9 -5
  7. data/app/assets/stylesheets/formtastic.css +16 -3
  8. data/formtastic.gemspec +6 -2
  9. data/gemfiles/rails-3.0.gemfile +7 -0
  10. data/gemfiles/rails-3.1.gemfile +7 -0
  11. data/gemfiles/rails-3.2.gemfile +7 -0
  12. data/lib/formtastic.rb +10 -2
  13. data/lib/formtastic/actions.rb +11 -0
  14. data/lib/formtastic/actions/base.rb +156 -0
  15. data/lib/formtastic/actions/button_action.rb +72 -0
  16. data/lib/formtastic/actions/buttonish.rb +17 -0
  17. data/lib/formtastic/actions/input_action.rb +68 -0
  18. data/lib/formtastic/actions/link_action.rb +87 -0
  19. data/lib/formtastic/engine.rb +5 -1
  20. data/lib/formtastic/form_builder.rb +3 -0
  21. data/lib/formtastic/helpers.rb +2 -1
  22. data/lib/formtastic/helpers/action_helper.rb +109 -0
  23. data/lib/formtastic/helpers/actions_helper.rb +168 -0
  24. data/lib/formtastic/helpers/buttons_helper.rb +22 -9
  25. data/lib/formtastic/helpers/errors_helper.rb +0 -54
  26. data/lib/formtastic/helpers/fieldset_wrapper.rb +10 -5
  27. data/lib/formtastic/helpers/form_helper.rb +2 -2
  28. data/lib/formtastic/helpers/input_helper.rb +1 -10
  29. data/lib/formtastic/helpers/inputs_helper.rb +6 -3
  30. data/lib/formtastic/i18n.rb +3 -2
  31. data/lib/formtastic/inputs/base.rb +11 -3
  32. data/lib/formtastic/inputs/base/choices.rb +6 -1
  33. data/lib/formtastic/inputs/base/collections.rb +36 -13
  34. data/lib/formtastic/inputs/base/grouped_collections.rb +1 -1
  35. data/lib/formtastic/inputs/base/numeric.rb +50 -0
  36. data/lib/formtastic/inputs/base/options.rb +1 -1
  37. data/lib/formtastic/inputs/base/placeholder.rb +17 -0
  38. data/lib/formtastic/inputs/base/stringish.rb +2 -7
  39. data/lib/formtastic/inputs/base/timeish.rb +21 -5
  40. data/lib/formtastic/inputs/base/validations.rb +1 -1
  41. data/lib/formtastic/inputs/base/wrapping.rb +10 -3
  42. data/lib/formtastic/inputs/boolean_input.rb +10 -2
  43. data/lib/formtastic/inputs/check_boxes_input.rb +18 -9
  44. data/lib/formtastic/inputs/country_input.rb +2 -2
  45. data/lib/formtastic/inputs/date_input.rb +19 -1
  46. data/lib/formtastic/inputs/datetime_input.rb +1 -1
  47. data/lib/formtastic/inputs/email_input.rb +2 -1
  48. data/lib/formtastic/inputs/file_input.rb +1 -1
  49. data/lib/formtastic/inputs/hidden_input.rb +1 -1
  50. data/lib/formtastic/inputs/number_input.rb +6 -36
  51. data/lib/formtastic/inputs/password_input.rb +2 -1
  52. data/lib/formtastic/inputs/phone_input.rb +3 -2
  53. data/lib/formtastic/inputs/radio_input.rb +1 -1
  54. data/lib/formtastic/inputs/range_input.rb +8 -32
  55. data/lib/formtastic/inputs/search_input.rb +2 -1
  56. data/lib/formtastic/inputs/select_input.rb +56 -28
  57. data/lib/formtastic/inputs/string_input.rb +3 -1
  58. data/lib/formtastic/inputs/text_input.rb +5 -4
  59. data/lib/formtastic/inputs/time_input.rb +4 -8
  60. data/lib/formtastic/inputs/time_zone_input.rb +1 -1
  61. data/lib/formtastic/inputs/url_input.rb +2 -1
  62. data/lib/formtastic/localized_string.rb +6 -94
  63. data/lib/formtastic/localizer.rb +110 -0
  64. data/lib/formtastic/version.rb +1 -1
  65. data/lib/generators/formtastic/form/form_generator.rb +105 -0
  66. data/lib/generators/templates/_form.html.erb +2 -2
  67. data/lib/generators/templates/_form.html.haml +4 -4
  68. data/lib/generators/templates/_form.html.slim +2 -2
  69. data/lib/generators/templates/formtastic.rb +4 -0
  70. data/lib/locale/en.yml +2 -0
  71. data/sample/basic_inputs.html +22 -0
  72. data/spec/actions/button_action_spec.rb +63 -0
  73. data/spec/actions/generic_action_spec.rb +484 -0
  74. data/spec/actions/input_action_spec.rb +59 -0
  75. data/spec/actions/link_action_spec.rb +92 -0
  76. data/spec/builder/semantic_fields_for_spec.rb +14 -0
  77. data/spec/generators/formtastic/form/form_generator_spec.rb +118 -0
  78. data/spec/generators/formtastic/install/install_generator_spec.rb +47 -0
  79. data/spec/helpers/action_helper_spec.rb +365 -0
  80. data/spec/helpers/actions_helper_spec.rb +143 -0
  81. data/spec/helpers/buttons_helper_spec.rb +39 -23
  82. data/spec/helpers/commit_button_helper_spec.rb +153 -93
  83. data/spec/helpers/inputs_helper_spec.rb +14 -0
  84. data/spec/i18n_spec.rb +11 -0
  85. data/spec/inputs/boolean_input_spec.rb +31 -2
  86. data/spec/inputs/check_boxes_input_spec.rb +29 -1
  87. data/spec/inputs/date_input_spec.rb +95 -0
  88. data/spec/inputs/datetime_input_spec.rb +49 -0
  89. data/spec/inputs/email_input_spec.rb +28 -0
  90. data/spec/inputs/file_input_spec.rb +28 -0
  91. data/spec/inputs/hidden_input_spec.rb +28 -0
  92. data/spec/inputs/include_blank_spec.rb +53 -45
  93. data/spec/inputs/number_input_spec.rb +34 -4
  94. data/spec/inputs/password_input_spec.rb +28 -0
  95. data/spec/inputs/phone_input_spec.rb +28 -0
  96. data/spec/inputs/placeholder_spec.rb +10 -10
  97. data/spec/inputs/radio_input_spec.rb +51 -6
  98. data/spec/inputs/range_input_spec.rb +30 -2
  99. data/spec/inputs/search_input_spec.rb +27 -0
  100. data/spec/inputs/select_input_spec.rb +52 -6
  101. data/spec/inputs/string_input_spec.rb +28 -0
  102. data/spec/inputs/text_input_spec.rb +27 -0
  103. data/spec/inputs/time_input_spec.rb +67 -1
  104. data/spec/inputs/time_zone_input_spec.rb +28 -0
  105. data/spec/inputs/url_input_spec.rb +28 -0
  106. data/spec/inputs/with_options_spec.rb +43 -0
  107. data/spec/spec_helper.rb +22 -6
  108. data/spec/support/custom_macros.rb +6 -134
  109. data/spec/support/test_environment.rb +0 -1
  110. metadata +104 -17
  111. data/lib/formtastic/helpers/semantic_form_helper.rb +0 -11
  112. data/lib/formtastic/inputs/numeric_input.rb +0 -21
  113. data/lib/formtastic/railtie.rb +0 -12
  114. data/lib/formtastic/semantic_form_builder.rb +0 -11
  115. data/spec/builder/errors_spec.rb +0 -203
  116. data/spec/inputs/numeric_input_spec.rb +0 -41
@@ -0,0 +1,87 @@
1
+ # Outputs a link wrapped in the standard `<li>` wrapper. This the default for `:cancel` actions.
2
+ # The link's URL defaults to Rails' built-in `:back` macro (the HTTP referrer, or Javascript for the
3
+ # browser's history), but can be altered with the `:url` option.
4
+ #
5
+ # @example The `:as` can be ommitted, these are functionally equivalent
6
+ # <%= f.action :cancel, :as => :link %>
7
+ # <%= f.action :cancel %>
8
+ #
9
+ # @example Full form context and output
10
+ #
11
+ # <%= semantic_form_for(@post) do |f| %>
12
+ # <%= f.actions do %>
13
+ # <%= f.action :submit, :as => :input %>
14
+ # <%= f.action :cancel, :as => :link %>
15
+ # <% end %>
16
+ # <% end %>
17
+ #
18
+ # <form...>
19
+ # <fieldset class="actions">
20
+ # <ol>
21
+ # <li class="action input_action" id="post_submit_action">
22
+ # <input type="reset" value="Reset">
23
+ # </li>
24
+ # <li class="action link_action" id="post_reset_action">
25
+ # <a href="javascript:history.back()">Cancel</a>
26
+ # </li>
27
+ # </ol>
28
+ # </fieldset>
29
+ # </form>
30
+ #
31
+ # @example Modifying the URL for the link
32
+ # <%= f.action :cancel, :as => :link, :url => "http://example.com/path" %>
33
+ # <%= f.action :cancel, :as => :link, :url => "/path" %>
34
+ # <%= f.action :cancel, :as => :link, :url => posts_path %>
35
+ # <%= f.action :cancel, :as => :link, :url => url_for(...) %>
36
+ # <%= f.action :cancel, :as => :link, :url => { :controller => "posts", :action => "index" } %>
37
+ #
38
+ # @example Specifying a label with a String
39
+ # <%= f.action :cancel, :as => :link, :label => "Stop" %>
40
+ #
41
+ # @example Pass HTML attributes down to the `<a>`
42
+ # <%= f.action :cancel, :as => :link, :button_html => { :class => 'pretty', :accesskey => 'x' } %>
43
+ #
44
+ # @example Access key can also be set as a top-level option
45
+ # <%= f.action :cancel, :as => :link, :accesskey => 'x' %>
46
+ #
47
+ # @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
48
+ # <%= f.action :cancel, :as => :link, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
49
+ # <%= f.action :cancel, :as => :link, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
50
+ #
51
+ # @option *args :label [String, Symbol]
52
+ # Override the label text with a String or a symbol for an i18n translation key
53
+ #
54
+ # @option *args :button_html [Hash]
55
+ # Override or add to the HTML attributes to be passed down to the `<a>` tag
56
+ #
57
+ # @option *args :wrapper_html [Hash]
58
+ # Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
59
+ #
60
+ # @todo document i18n keys
61
+ # @todo document i18n translation with :label (?)
62
+ # @todo :prefix and :suffix options? (can also be done with CSS or subclassing for custom Actions)
63
+ module Formtastic
64
+ module Actions
65
+ class LinkAction
66
+
67
+ include Base
68
+
69
+ def supported_methods
70
+ [:cancel]
71
+ end
72
+
73
+ # TODO reset_action class?
74
+ def to_html
75
+ wrapper do
76
+ template.link_to(text, url, button_html)
77
+ end
78
+ end
79
+
80
+ def url
81
+ return options[:url] if options.key?(:url)
82
+ :back
83
+ end
84
+
85
+ end
86
+ end
87
+ end
@@ -1,7 +1,11 @@
1
- # Configure Rails 3.1 to have assert_select_jquery() in tests
2
1
  module Formtastic
3
2
  # Required for formtastic.css to be discoverable in the asset pipeline
4
3
  # @private
5
4
  class Engine < ::Rails::Engine
5
+ initializer 'formtastic.initialize' do
6
+ ActiveSupport.on_load(:action_view) do
7
+ include Formtastic::Helpers::FormHelper
8
+ end
9
+ end
6
10
  end
7
11
  end
@@ -23,6 +23,7 @@ module Formtastic
23
23
  configure :file_metadata_suffixes, ['content_type', 'file_name', 'file_size']
24
24
  configure :priority_countries, ["Australia", "Canada", "United Kingdom", "United States"]
25
25
  configure :i18n_lookups_by_default, true
26
+ configure :i18n_localizer, Formtastic::Localizer
26
27
  configure :escape_html_entities_in_hints_and_labels, true
27
28
  configure :default_commit_button_accesskey
28
29
  configure :default_inline_error_class, 'inline-errors'
@@ -40,6 +41,8 @@ module Formtastic
40
41
  include Formtastic::Helpers::InputHelper
41
42
  include Formtastic::Helpers::InputsHelper
42
43
  include Formtastic::Helpers::ButtonsHelper
44
+ include Formtastic::Helpers::ActionHelper
45
+ include Formtastic::Helpers::ActionsHelper
43
46
  include Formtastic::Helpers::ErrorsHelper
44
47
 
45
48
  # This is a wrapper around Rails' `ActionView::Helpers::FormBuilder#fields_for`, originally
@@ -2,6 +2,8 @@ module Formtastic
2
2
  # @private
3
3
  module Helpers
4
4
  autoload :ButtonsHelper, 'formtastic/helpers/buttons_helper'
5
+ autoload :ActionHelper, 'formtastic/helpers/action_helper'
6
+ autoload :ActionsHelper, 'formtastic/helpers/actions_helper'
5
7
  autoload :ErrorsHelper, 'formtastic/helpers/errors_helper'
6
8
  autoload :FieldsetWrapper, 'formtastic/helpers/fieldset_wrapper'
7
9
  autoload :FileColumnDetection, 'formtastic/helpers/file_column_detection'
@@ -9,7 +11,6 @@ module Formtastic
9
11
  autoload :InputHelper, 'formtastic/helpers/input_helper'
10
12
  autoload :InputsHelper, 'formtastic/helpers/inputs_helper'
11
13
  autoload :LabelHelper, 'formtastic/helpers/label_helper'
12
- autoload :SemanticFormHelper, 'formtastic/helpers/semantic_form_helper'
13
14
  autoload :Reflection, 'formtastic/helpers/reflection'
14
15
  end
15
16
  end
@@ -0,0 +1,109 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Formtastic
3
+ module Helpers
4
+ module ActionHelper
5
+
6
+ # Renders an action for the form (such as a subit/reset button, or a cancel link).
7
+ #
8
+ # Each action is wrapped in an `<li class="action">` tag with other classes added based on the
9
+ # type of action being rendered, and is intended to be rendered inside a {#buttons}
10
+ # block which wraps the button in a `fieldset` and `ol`.
11
+ #
12
+ # The textual value of the label can be changed from the default through the `:label`
13
+ # argument or through i18n.
14
+ #
15
+ # @example Basic usage
16
+ # # form
17
+ # <%= semantic_form_for @post do |f| %>
18
+ # ...
19
+ # <%= f.actions do %>
20
+ # <%= f.action(:submit) %>
21
+ # <%= f.action(:reset) %>
22
+ # <%= f.action(:cancel) %>
23
+ # <% end %>
24
+ # <% end %>
25
+ #
26
+ # # output
27
+ # <form ...>
28
+ # ...
29
+ # <fieldset class="buttons">
30
+ # <ol>
31
+ # <li class="action input_action">
32
+ # <input name="commit" type="submit" value="Create Post">
33
+ # </li>
34
+ # <li class="action input_action">
35
+ # <input name="commit" type="reset" value="Reset Post">
36
+ # </li>
37
+ # <li class="action link_action">
38
+ # <a href="/posts">Cancel Post</a>
39
+ # </li>
40
+ # </ol>
41
+ # </fieldset>
42
+ # </form>
43
+ #
44
+ # @example Set the value through the `:label` option
45
+ # <%= f.action :submit, :label => "Go" %>
46
+ #
47
+ # @example Pass HTML attributes down to the tag inside the wrapper
48
+ # <%= f.action :submit, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
49
+ #
50
+ # @example Pass HTML attributes down to the `<li>` wrapper
51
+ # <%= f.action :submit, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
52
+ #
53
+ # @option *args :label [String, Symbol]
54
+ # Override the label text with a String or a symbold for an i18n translation key
55
+ #
56
+ # @option *args :button_html [Hash]
57
+ # Override or add to the HTML attributes to be passed down to the `<input>` tag
58
+ #
59
+ # @option *args :wrapper_html [Hash]
60
+ # Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
61
+ #
62
+ # @todo document i18n keys
63
+ def action(method, options = {})
64
+ options = options.dup # Allow options to be shared without being tainted by Formtastic
65
+ options[:as] ||= default_action_type(method, options)
66
+
67
+ klass = action_class(options[:as])
68
+
69
+ klass.new(self, template, @object, @object_name, method, options).to_html
70
+ end
71
+
72
+ protected
73
+
74
+ def default_action_type(method, options = {}) #:nodoc:
75
+ case method
76
+ when :submit then :input
77
+ when :reset then :input
78
+ when :cancel then :link
79
+ end
80
+ end
81
+
82
+ def action_class(as)
83
+ @input_classes_cache ||= {}
84
+ @input_classes_cache[as] ||= begin
85
+ begin
86
+ begin
87
+ custom_action_class_name(as).constantize
88
+ rescue NameError
89
+ standard_action_class_name(as).constantize
90
+ end
91
+ rescue NameError
92
+ raise Formtastic::UnknownActionError
93
+ end
94
+ end
95
+ end
96
+
97
+ # :as => :button # => ButtonAction
98
+ def custom_action_class_name(as)
99
+ "#{as.to_s.camelize}Action"
100
+ end
101
+
102
+ # :as => :button # => Formtastic::Actions::ButtonAction
103
+ def standard_action_class_name(as)
104
+ "Formtastic::Actions::#{as.to_s.camelize}Action"
105
+ end
106
+
107
+ end
108
+ end
109
+ end
@@ -0,0 +1,168 @@
1
+ module Formtastic
2
+ module Helpers
3
+ # ActionsHelper encapsulates the responsibilties of the {#actions} DSL for acting on
4
+ # (submitting, cancelling, resetting) forms.
5
+ #
6
+ # {#actions} is a block helper used to wrap the form's actions (buttons, links) in a
7
+ # `<fieldset>` and `<ol>`, with each item in the list containing the markup representing a
8
+ # single action.
9
+ #
10
+ # <%= semantic_form_for @post do |f| %>
11
+ # ...
12
+ # <%= f.actions do %>
13
+ # <%= f.action(:submit)
14
+ # <%= f.action(:cancel)
15
+ # <% end %>
16
+ # <% end %>
17
+ #
18
+ # The HTML output will be something like:
19
+ #
20
+ # <form class="formtastic" method="post" action="...">
21
+ # ...
22
+ # <fieldset class="actions">
23
+ # <ol>
24
+ # <li class="action input_action">
25
+ # <input type="submit" name="commit" value="Create Post">
26
+ # </li>
27
+ # <li class="action input_action">
28
+ # <a href="/posts">Cancel Post</a>
29
+ # </li>
30
+ # </ol>
31
+ # </fieldset>
32
+ # </form>
33
+ #
34
+ # It's important to note that the `semantic_form_for` and {#actions} blocks wrap the
35
+ # standard Rails `form_for` helper and form builder, so you have full access to every standard
36
+ # Rails form helper, with any HTML markup and ERB syntax, allowing you to "break free" from
37
+ # Formtastic when it doesn't suit to create your own buttons, links and actions:
38
+ #
39
+ # <%= semantic_form_for @post do |f| %>
40
+ # ...
41
+ # <%= f.actions do %>
42
+ # <li class="save">
43
+ # <%= f.submit "Save" %>
44
+ # <li>
45
+ # <li class="cancel-link">
46
+ # Or <%= link_to "Cancel", posts_url %>
47
+ # <li>
48
+ # <% end %>
49
+ # <% end %>
50
+ #
51
+ # There are many other syntax variations and arguments to customize your form. See the
52
+ # full documentation of {#actions} and {#action} for details.
53
+ module ActionsHelper
54
+
55
+ include Formtastic::Helpers::FieldsetWrapper
56
+
57
+ # Creates a fieldset and ol tag wrapping for use around a set of buttons. It can be
58
+ # called either with a block (in which you can do the usual Rails form stuff, HTML, ERB, etc),
59
+ # or with a list of named actions. These two examples are functionally equivalent:
60
+ #
61
+ # # With a block:
62
+ # <% semantic_form_for @post do |f| %>
63
+ # ...
64
+ # <% f.actions do %>
65
+ # <%= f.action(:submit) %>
66
+ # <%= f.action(:cancel) %>
67
+ # <% end %>
68
+ # <% end %>
69
+ #
70
+ # # With a list of fields:
71
+ # <% semantic_form_for @post do |f| %>
72
+ # <%= f.actions :submit, :cancel %>
73
+ # <% end %>
74
+ #
75
+ # # Output:
76
+ # <form ...>
77
+ # <fieldset class="buttons">
78
+ # <ol>
79
+ # <li class="action input_action">
80
+ # <input type="submit" ...>
81
+ # </li>
82
+ # <li class="action link_action">
83
+ # <a href="...">...</a>
84
+ # </li>
85
+ # </ol>
86
+ # </fieldset>
87
+ # </form>
88
+ #
89
+ # All options except `:name` and `:title` are passed down to the fieldset as HTML
90
+ # attributes (`id`, `class`, `style`...). If provided, the `:name` or `:title` option is
91
+ # passed into a `<legend>` inside the `<fieldset>` to name the set of buttons.
92
+ #
93
+ # @example Quickly add button(s) to the form, accepting all default values, options and behaviors
94
+ # <% semantic_form_for @post do |f| %>
95
+ # ...
96
+ # <%= f.actions %>
97
+ # <% end %>
98
+ #
99
+ # @example Specify which named buttons you want, accepting all default values, options and behaviors
100
+ # <% semantic_form_for @post do |f| %>
101
+ # ...
102
+ # <%= f.actions :commit %>
103
+ # <% end %>
104
+ #
105
+ # @example Specify which named buttons you want, and name the fieldset
106
+ # <% semantic_form_for @post do |f| %>
107
+ # ...
108
+ # <%= f.actions :commit, :name => "Actions" %>
109
+ # or
110
+ # <%= f.actions :commit, :label => "Actions" %>
111
+ # <% end %>
112
+ #
113
+ # @example Get full control over the action options
114
+ # <% semantic_form_for @post do |f| %>
115
+ # ...
116
+ # <%= f.actions do %>
117
+ # <%= f.action :label => "Go", :button_html => { :class => "pretty" :disable_with => "Wait..." }, :wrapper_html => { ... }
118
+ # <% end %>
119
+ # <% end %>
120
+ #
121
+ # @example Make your own actions with standard Rails helpers or HTML
122
+ # <% semantic_form_for @post do |f| %>
123
+ # <%= f.actions do %>
124
+ # <li>
125
+ # ...
126
+ # </li>
127
+ # <% end %>
128
+ # <% end %>
129
+ #
130
+ # @example Add HTML attributes to the fieldset
131
+ # <% semantic_form_for @post do |f| %>
132
+ # ...
133
+ # <%= f.actions :commit, :style => "border:1px;" %>
134
+ # or
135
+ # <%= f.actions :style => "border:1px;" do %>
136
+ # ...
137
+ # <% end %>
138
+ # <% end %>
139
+ #
140
+ # @option *args :label [String, Symbol]
141
+ # Optionally specify text for the legend of the fieldset
142
+ #
143
+ # @option *args :name [String, Symbol]
144
+ # Optionally specify text for the legend of the fieldset (alias for `:label`)
145
+ #
146
+ # @todo document i18n keys
147
+ def actions(*args, &block)
148
+ html_options = args.extract_options!
149
+ html_options[:class] ||= "actions"
150
+
151
+ if block_given?
152
+ field_set_and_list_wrapping(html_options, &block)
153
+ else
154
+ args = default_actions if args.empty?
155
+ contents = args.map { |action_name| action(action_name) }
156
+ field_set_and_list_wrapping(html_options, contents)
157
+ end
158
+ end
159
+
160
+ protected
161
+
162
+ def default_actions
163
+ [:submit]
164
+ end
165
+
166
+ end
167
+ end
168
+ end
@@ -22,7 +22,7 @@ module Formtastic
22
22
  # ...
23
23
  # <fieldset class="buttons">
24
24
  # <ol>
25
- # <li class="commit">
25
+ # <li class="commit button">
26
26
  # <input type="submit" name="commit" value="Create Post" class="create">
27
27
  # </li>
28
28
  # </ol>
@@ -53,6 +53,8 @@ module Formtastic
53
53
  #
54
54
  # There are many other syntax variations and arguments to customize your form. See the
55
55
  # full documentation of {#buttons} and {#commit_button} for details.
56
+ #
57
+ # @deprecated ButtonsHelper will be removed after 2.1
56
58
  module ButtonsHelper
57
59
  include Formtastic::Helpers::FieldsetWrapper
58
60
  include Formtastic::LocalizedString
@@ -76,9 +78,9 @@ module Formtastic
76
78
  #
77
79
  # # Output:
78
80
  # <form ...>
79
- # <fieldset class="inputs">
81
+ # <fieldset class="buttons">
80
82
  # <ol>
81
- # <li class="commit">
83
+ # <li class="commit button">
82
84
  # <input type="submit" ...>
83
85
  # </li>
84
86
  # </ol>
@@ -164,7 +166,10 @@ module Formtastic
164
166
  # Optionally specify text for the legend of the fieldset (alias for `:label`)
165
167
  #
166
168
  # @todo document i18n keys
169
+ # @deprecated f.buttons is deprecated in favor of f.actions and will be removed after 2.1
167
170
  def buttons(*args, &block)
171
+ ::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")
172
+
168
173
  html_options = args.extract_options!
169
174
  html_options[:class] ||= "buttons"
170
175
 
@@ -203,7 +208,11 @@ module Formtastic
203
208
  # <form ...>
204
209
  # ...
205
210
  # <fieldset class="buttons">
206
- # <input name="commit" type="submit" value="Create Post" class="create">
211
+ # <ol>
212
+ # <li class="commit button">
213
+ # <input name="commit" type="submit" value="Create Post" class="create">
214
+ # </li>
215
+ # </ol>
207
216
  # </fieldset>
208
217
  # </form>
209
218
  #
@@ -234,7 +243,10 @@ module Formtastic
234
243
  #
235
244
  # @todo document i18n keys
236
245
  # @todo strange that `:accesskey` seems to be supported in the top level args as well as `:button_html`
246
+ # @deprecated f.commit_button is deprecated in favor of f.actions and will be removed after 2.1
237
247
  def commit_button(*args)
248
+ ::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")
249
+
238
250
  options = args.extract_options!
239
251
  text = options.delete(:label) || args.shift
240
252
 
@@ -242,6 +254,7 @@ module Formtastic
242
254
  Formtastic::I18n.t(commit_button_i18n_key, :model => commit_button_object_name)) unless text.is_a?(::String)
243
255
 
244
256
  button_html = options.delete(:button_html) || {}
257
+ button_html[:id] ||= "#{@object_name}_submit"
245
258
  button_html.merge!(:class => [button_html[:class], commit_button_i18n_key].compact.join(' '))
246
259
 
247
260
  wrapper_html = options.delete(:wrapper_html) || {}
@@ -249,7 +262,7 @@ module Formtastic
249
262
 
250
263
  accesskey = (options.delete(:accesskey) || default_commit_button_accesskey) unless button_html.has_key?(:accesskey)
251
264
  button_html = button_html.merge(:accesskey => accesskey) if accesskey
252
-
265
+
253
266
  template.content_tag(:li, Formtastic::Util.html_safe(submit(text, button_html)), wrapper_html)
254
267
  end
255
268
 
@@ -270,10 +283,10 @@ module Formtastic
270
283
  else
271
284
  object_name = @object_name.to_s.send(label_str_method)
272
285
  end
273
-
286
+
274
287
  object_name
275
288
  end
276
-
289
+
277
290
  def commit_button_i18n_key
278
291
  if new_or_persisted_object?
279
292
  key = @object.persisted? ? :update : :create
@@ -287,11 +300,11 @@ module Formtastic
287
300
  def commit_button_wrapper_html_class
288
301
  ['commit', 'button'] # TODO: Add class reflecting on form action.
289
302
  end
290
-
303
+
291
304
  def new_or_persisted_object?
292
305
  @object && (@object.respond_to?(:persisted?) || @object.respond_to?(:new_record?))
293
306
  end
294
-
307
+
295
308
  end
296
309
  end
297
310
  end