formtastic 2.1.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.github/workflows/test.yml +61 -0
- data/.gitignore +4 -2
- data/CHANGELOG.md +52 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +105 -0
- data/MIT-LICENSE +1 -1
- data/{README.textile → README.md} +204 -219
- data/RELEASE_PROCESS +3 -1
- data/Rakefile +27 -29
- data/app/assets/stylesheets/formtastic.css +3 -2
- data/bin/appraisal +8 -0
- data/formtastic.gemspec +11 -14
- data/gemfiles/rails_5.2/Gemfile +5 -0
- data/gemfiles/rails_6.0/Gemfile +5 -0
- data/gemfiles/rails_6.1/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +13 -0
- data/lib/formtastic/action_class_finder.rb +18 -0
- data/lib/formtastic/actions/button_action.rb +55 -60
- data/lib/formtastic/actions/input_action.rb +59 -57
- data/lib/formtastic/actions/link_action.rb +68 -67
- data/lib/formtastic/actions.rb +6 -3
- data/lib/formtastic/deprecation.rb +5 -0
- data/lib/formtastic/engine.rb +3 -1
- data/lib/formtastic/form_builder.rb +35 -16
- data/lib/formtastic/helpers/action_helper.rb +34 -28
- data/lib/formtastic/helpers/enum.rb +13 -0
- data/lib/formtastic/helpers/errors_helper.rb +2 -2
- data/lib/formtastic/helpers/fieldset_wrapper.rb +16 -12
- data/lib/formtastic/helpers/form_helper.rb +19 -16
- data/lib/formtastic/helpers/input_helper.rb +69 -97
- data/lib/formtastic/helpers/inputs_helper.rb +35 -25
- data/lib/formtastic/helpers/reflection.rb +4 -4
- data/lib/formtastic/helpers.rb +1 -2
- data/lib/formtastic/html_attributes.rb +12 -1
- data/lib/formtastic/i18n.rb +1 -1
- data/lib/formtastic/input_class_finder.rb +18 -0
- data/lib/formtastic/inputs/base/choices.rb +2 -2
- data/lib/formtastic/inputs/base/collections.rb +46 -14
- data/lib/formtastic/inputs/base/database.rb +7 -2
- data/lib/formtastic/inputs/base/datetime_pickerish.rb +85 -0
- data/lib/formtastic/inputs/base/errors.rb +7 -7
- data/lib/formtastic/inputs/base/hints.rb +2 -2
- data/lib/formtastic/inputs/base/html.rb +10 -9
- data/lib/formtastic/inputs/base/labelling.rb +5 -8
- data/lib/formtastic/inputs/base/naming.rb +4 -4
- data/lib/formtastic/inputs/base/numeric.rb +1 -1
- data/lib/formtastic/inputs/base/options.rb +3 -4
- data/lib/formtastic/inputs/base/stringish.rb +10 -2
- data/lib/formtastic/inputs/base/timeish.rb +34 -22
- data/lib/formtastic/inputs/base/validations.rb +41 -13
- data/lib/formtastic/inputs/base/wrapping.rb +29 -26
- data/lib/formtastic/inputs/base.rb +22 -15
- data/lib/formtastic/inputs/boolean_input.rb +26 -12
- data/lib/formtastic/inputs/check_boxes_input.rb +39 -31
- data/lib/formtastic/inputs/color_input.rb +41 -0
- data/lib/formtastic/inputs/country_input.rb +24 -5
- data/lib/formtastic/inputs/datalist_input.rb +41 -0
- data/lib/formtastic/inputs/date_picker_input.rb +93 -0
- data/lib/formtastic/inputs/{date_input.rb → date_select_input.rb} +1 -1
- data/lib/formtastic/inputs/datetime_picker_input.rb +103 -0
- data/lib/formtastic/inputs/{datetime_input.rb → datetime_select_input.rb} +1 -1
- data/lib/formtastic/inputs/file_input.rb +2 -2
- data/lib/formtastic/inputs/hidden_input.rb +2 -6
- data/lib/formtastic/inputs/radio_input.rb +28 -22
- data/lib/formtastic/inputs/select_input.rb +36 -39
- data/lib/formtastic/inputs/time_picker_input.rb +99 -0
- data/lib/formtastic/inputs/{time_input.rb → time_select_input.rb} +6 -2
- data/lib/formtastic/inputs/time_zone_input.rb +16 -6
- data/lib/formtastic/inputs.rb +32 -21
- data/lib/formtastic/localized_string.rb +1 -1
- data/lib/formtastic/localizer.rb +24 -24
- data/lib/formtastic/namespaced_class_finder.rb +99 -0
- data/lib/formtastic/version.rb +1 -1
- data/lib/formtastic.rb +20 -10
- data/lib/generators/formtastic/form/form_generator.rb +10 -4
- data/lib/generators/formtastic/input/input_generator.rb +46 -0
- data/lib/generators/formtastic/install/install_generator.rb +5 -19
- data/lib/generators/templates/_form.html.slim +2 -2
- data/lib/generators/templates/formtastic.rb +46 -25
- data/lib/generators/templates/input.rb +19 -0
- data/sample/basic_inputs.html +23 -3
- data/script/integration-template.rb +74 -0
- data/script/integration.sh +19 -0
- data/spec/action_class_finder_spec.rb +12 -0
- data/spec/actions/button_action_spec.rb +8 -8
- data/spec/actions/generic_action_spec.rb +92 -56
- data/spec/actions/input_action_spec.rb +7 -7
- data/spec/actions/link_action_spec.rb +10 -10
- data/spec/builder/custom_builder_spec.rb +36 -20
- data/spec/builder/error_proc_spec.rb +4 -4
- data/spec/builder/semantic_fields_for_spec.rb +28 -29
- data/spec/fast_spec_helper.rb +12 -0
- data/spec/generators/formtastic/form/form_generator_spec.rb +45 -32
- data/spec/generators/formtastic/input/input_generator_spec.rb +124 -0
- data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
- data/spec/helpers/action_helper_spec.rb +75 -103
- data/spec/helpers/actions_helper_spec.rb +17 -17
- data/spec/helpers/form_helper_spec.rb +84 -33
- data/spec/helpers/input_helper_spec.rb +333 -285
- data/spec/helpers/inputs_helper_spec.rb +167 -121
- data/spec/helpers/reflection_helper_spec.rb +3 -3
- data/spec/helpers/semantic_errors_helper_spec.rb +23 -23
- data/spec/i18n_spec.rb +26 -26
- data/spec/input_class_finder_spec.rb +10 -0
- data/spec/inputs/base/collections_spec.rb +76 -0
- data/spec/inputs/base/validations_spec.rb +480 -0
- data/spec/inputs/boolean_input_spec.rb +100 -65
- data/spec/inputs/check_boxes_input_spec.rb +200 -101
- data/spec/inputs/color_input_spec.rb +85 -0
- data/spec/inputs/country_input_spec.rb +20 -20
- data/spec/inputs/custom_input_spec.rb +3 -4
- data/spec/inputs/datalist_input_spec.rb +61 -0
- data/spec/inputs/date_picker_input_spec.rb +449 -0
- data/spec/inputs/date_select_input_spec.rb +249 -0
- data/spec/inputs/datetime_picker_input_spec.rb +490 -0
- data/spec/inputs/datetime_select_input_spec.rb +209 -0
- data/spec/inputs/email_input_spec.rb +5 -5
- data/spec/inputs/file_input_spec.rb +6 -6
- data/spec/inputs/hidden_input_spec.rb +22 -35
- data/spec/inputs/include_blank_spec.rb +11 -11
- data/spec/inputs/label_spec.rb +62 -25
- data/spec/inputs/number_input_spec.rb +112 -112
- data/spec/inputs/password_input_spec.rb +5 -5
- data/spec/inputs/phone_input_spec.rb +5 -5
- data/spec/inputs/placeholder_spec.rb +6 -6
- data/spec/inputs/radio_input_spec.rb +99 -55
- data/spec/inputs/range_input_spec.rb +66 -66
- data/spec/inputs/readonly_spec.rb +50 -0
- data/spec/inputs/search_input_spec.rb +5 -5
- data/spec/inputs/select_input_spec.rb +170 -170
- data/spec/inputs/string_input_spec.rb +68 -16
- data/spec/inputs/text_input_spec.rb +16 -16
- data/spec/inputs/time_picker_input_spec.rb +455 -0
- data/spec/inputs/time_select_input_spec.rb +261 -0
- data/spec/inputs/time_zone_input_spec.rb +54 -28
- data/spec/inputs/url_input_spec.rb +5 -5
- data/spec/inputs/with_options_spec.rb +7 -7
- data/spec/localizer_spec.rb +39 -17
- data/spec/namespaced_class_finder_spec.rb +79 -0
- data/spec/schema.rb +21 -0
- data/spec/spec_helper.rb +254 -221
- data/spec/support/custom_macros.rb +128 -95
- data/spec/support/shared_examples.rb +12 -0
- data/spec/support/specialized_class_finder_shared_example.rb +27 -0
- data/spec/support/test_environment.rb +26 -10
- metadata +177 -238
- data/.travis.yml +0 -8
- data/Appraisals +0 -11
- data/CHANGELOG +0 -371
- data/gemfiles/rails-3.0.gemfile +0 -7
- data/gemfiles/rails-3.1.gemfile +0 -7
- data/gemfiles/rails-3.2.gemfile +0 -7
- data/lib/formtastic/helpers/buttons_helper.rb +0 -310
- data/lib/formtastic/inputs/base/grouped_collections.rb +0 -77
- data/lib/formtastic/util.rb +0 -25
- data/lib/tasks/verify_rcov.rb +0 -44
- data/spec/helpers/buttons_helper_spec.rb +0 -166
- data/spec/helpers/commit_button_helper_spec.rb +0 -530
- data/spec/inputs/date_input_spec.rb +0 -227
- data/spec/inputs/datetime_input_spec.rb +0 -185
- data/spec/inputs/time_input_spec.rb +0 -267
- data/spec/support/deferred_garbage_collection.rb +0 -21
data/RELEASE_PROCESS
CHANGED
data/Rakefile
CHANGED
@@ -1,28 +1,42 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'bundler/setup'
|
3
|
-
require '
|
4
|
-
require 'rdoc/task'
|
3
|
+
require 'yard'
|
5
4
|
require 'rspec/core/rake_task'
|
6
|
-
require 'tasks/verify_rcov'
|
7
5
|
|
8
6
|
Bundler::GemHelper.install_tasks
|
9
7
|
|
10
8
|
desc 'Default: run unit specs.'
|
11
|
-
|
9
|
+
if !ENV["APPRAISAL_INITIALIZED"] && !ENV["TRAVIS"]
|
10
|
+
task :default => :appraisal
|
11
|
+
else
|
12
|
+
task :default => :spec
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'Run the default task over all gemfiles.'
|
16
|
+
task :appraisal do
|
17
|
+
for_all_gemfiles("exec", "rake")
|
18
|
+
end
|
12
19
|
|
13
|
-
|
14
|
-
|
15
|
-
|
20
|
+
namespace :appraisal do
|
21
|
+
desc 'Run `bundle install` over all gemfiles.'
|
22
|
+
task :install do
|
23
|
+
for_all_gemfiles("install")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def for_all_gemfiles(*args)
|
28
|
+
Dir.glob("gemfiles/*/Gemfile").sort.each do |gemfile|
|
29
|
+
Bundler.with_original_env do
|
30
|
+
sh({ "APPRAISAL_INITIALIZED" => "true", "BUNDLE_GEMFILE" => gemfile }, "bundle", *args)
|
31
|
+
end
|
32
|
+
end
|
16
33
|
end
|
17
34
|
|
18
35
|
desc 'Generate documentation for the formtastic plugin.'
|
19
|
-
Rake::
|
20
|
-
|
21
|
-
rdoc.title = 'Formtastic'
|
22
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
23
|
-
rdoc.rdoc_files.include('README.textile')
|
24
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
36
|
+
YARD::Rake::YardocTask.new(:yard) do |t|
|
37
|
+
|
25
38
|
end
|
39
|
+
task doc: :yard
|
26
40
|
|
27
41
|
desc 'Test the formtastic plugin.'
|
28
42
|
RSpec::Core::RakeTask.new('spec') do |t|
|
@@ -38,19 +52,3 @@ desc 'Test the formtastic plugin with specdoc formatting and colors'
|
|
38
52
|
RSpec::Core::RakeTask.new('specdoc') do |t|
|
39
53
|
t.pattern = FileList['spec/**/*_spec.rb']
|
40
54
|
end
|
41
|
-
|
42
|
-
desc 'Run all examples with RCov'
|
43
|
-
RSpec::Core::RakeTask.new('rcov') do |t|
|
44
|
-
t.pattern = FileList['spec/**/*_spec.rb']
|
45
|
-
t.rcov = true
|
46
|
-
t.rcov_opts = %w(--exclude gems/*,spec/*,.bundle/*, --aggregate coverage.data)
|
47
|
-
end
|
48
|
-
|
49
|
-
RCov::VerifyTask.new(:verify_coverage) do |t|
|
50
|
-
t.require_exact_threshold = false
|
51
|
-
t.threshold = (RUBY_VERSION == "1.8.7" ? 95 : 0)
|
52
|
-
end
|
53
|
-
|
54
|
-
desc "Run all examples and verify coverage"
|
55
|
-
task :spec_and_verify_coverage => [:rcov, :verify_coverage] do
|
56
|
-
end
|
@@ -194,7 +194,8 @@ This stylesheet forms part of the Formtastic Rails Plugin
|
|
194
194
|
width:72%;
|
195
195
|
}
|
196
196
|
|
197
|
-
.formtastic .stringish input[size]
|
197
|
+
.formtastic .stringish input[size],
|
198
|
+
.formtastic .stringish input[max] {
|
198
199
|
width:auto;
|
199
200
|
max-width:72%;
|
200
201
|
}
|
@@ -222,7 +223,7 @@ This stylesheet forms part of the Formtastic Rails Plugin
|
|
222
223
|
/* BOOLEAN LABELS
|
223
224
|
--------------------------------------------------------------------------------------------------*/
|
224
225
|
.formtastic .boolean label {
|
225
|
-
|
226
|
+
margin-left:25%;
|
226
227
|
display:block;
|
227
228
|
}
|
228
229
|
|
data/bin/appraisal
ADDED
data/formtastic.gemspec
CHANGED
@@ -8,32 +8,29 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = [%q{Justin French}]
|
10
10
|
s.email = [%q{justin@indent.com.au}]
|
11
|
-
s.homepage = %q{http://github.com/
|
11
|
+
s.homepage = %q{http://github.com/formtastic/formtastic}
|
12
12
|
s.summary = %q{A Rails form builder plugin/gem with semantically rich and accessible markup}
|
13
13
|
s.description = %q{A Rails form builder plugin/gem with semantically rich and accessible markup}
|
14
|
+
s.license = 'MIT'
|
14
15
|
|
15
16
|
s.files = `git ls-files`.split("\n")
|
16
17
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
17
|
-
s.executables =
|
18
|
+
s.executables = []
|
18
19
|
s.require_paths = ["lib"]
|
19
20
|
|
20
21
|
s.rdoc_options = ["--charset=UTF-8"]
|
21
|
-
s.extra_rdoc_files = ["README.
|
22
|
+
s.extra_rdoc_files = ["README.md"]
|
22
23
|
|
24
|
+
s.required_ruby_version = '>= 2.4.0'
|
23
25
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
24
26
|
s.rubygems_version = %q{1.3.6}
|
25
27
|
|
26
|
-
s.add_dependency(%q<actionpack>, ["
|
28
|
+
s.add_dependency(%q<actionpack>, [">= 5.2.0"])
|
27
29
|
|
28
|
-
s.add_development_dependency(%q<rspec-rails>, ["~>
|
29
|
-
s.add_development_dependency(%q<
|
30
|
-
s.add_development_dependency(%q<
|
31
|
-
s.add_development_dependency(%q<
|
32
|
-
s.add_development_dependency(%q<yard>, ["~> 0.6"])
|
33
|
-
s.add_development_dependency(%q<rcov>, ["~> 0.9.9"])
|
34
|
-
s.add_development_dependency(%q<colored>)
|
35
|
-
s.add_development_dependency(%q<tzinfo>)
|
36
|
-
s.add_development_dependency(%q<ammeter>, ["~> 0.2.2"])
|
37
|
-
s.add_development_dependency(%q<appraisal>)
|
30
|
+
s.add_development_dependency(%q<rspec-rails>, ["~> 3.4"])
|
31
|
+
s.add_development_dependency(%q<rspec-dom-testing>, [">= 0.1.0"])
|
32
|
+
s.add_development_dependency(%q<yard>, ["~> 0.9.20"])
|
33
|
+
s.add_development_dependency(%q<ammeter>, ["~> 1.1.3"])
|
38
34
|
s.add_development_dependency(%q<rake>)
|
35
|
+
s.add_development_dependency(%q<sqlite3>, ["~> 1.4"])
|
39
36
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
gem "rails", git: "https://github.com/rails/rails.git"
|
4
|
+
gem "rack", git: "https://github.com/rack/rack.git"
|
5
|
+
gem "i18n", git: "https://github.com/svenfuchs/i18n.git"
|
6
|
+
gem "arel", git: "https://github.com/rails/arel.git"
|
7
|
+
gem "rspec-rails", git: "https://github.com/rspec/rspec-rails.git"
|
8
|
+
gem "rspec-mocks", git: "https://github.com/rspec/rspec-mocks.git"
|
9
|
+
gem "rspec-support", git: "https://github.com/rspec/rspec-support.git"
|
10
|
+
gem "rspec-core", git: "https://github.com/rspec/rspec-core.git"
|
11
|
+
gem "rspec-expectations", git: "https://github.com/rspec/rspec-expectations.git"
|
12
|
+
|
13
|
+
gemspec path: "../.."
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Formtastic
|
2
|
+
|
3
|
+
# Uses the {NamespacedClassFinder} to look up action class names.
|
4
|
+
#
|
5
|
+
# See {Formtastic::Helpers::ActionHelper#namespaced_action_class} for details.
|
6
|
+
#
|
7
|
+
class ActionClassFinder < NamespacedClassFinder
|
8
|
+
|
9
|
+
# @param builder [FormBuilder]
|
10
|
+
def initialize(builder)
|
11
|
+
super builder.action_namespaces
|
12
|
+
end
|
13
|
+
|
14
|
+
def class_name(as)
|
15
|
+
"#{super}Action"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -1,72 +1,67 @@
|
|
1
|
-
# Outputs a `<button type="submit">` or `<button type="reset">` wrapped in the standard `<li>`
|
2
|
-
# wrapper. This is an alternative choice for `:submit` and `:reset` actions, which render with
|
3
|
-
# `<input type="submit">` and `<input type="reset">` by default.
|
4
|
-
#
|
5
|
-
# @example Full form context and output
|
6
|
-
#
|
7
|
-
# <%= semantic_form_for(@post) do |f| %>
|
8
|
-
# <%= f.actions do %>
|
9
|
-
# <%= f.action :reset, :as => :button %>
|
10
|
-
# <%= f.action :submit, :as => :button %>
|
11
|
-
# <% end %>
|
12
|
-
# <% end %>
|
13
|
-
#
|
14
|
-
# <form...>
|
15
|
-
# <fieldset class="actions">
|
16
|
-
# <ol>
|
17
|
-
# <li class="action button_action" id="post_reset_action">
|
18
|
-
# <button type="reset" value="Reset">
|
19
|
-
# </li>
|
20
|
-
# <li class="action button_action" id="post_submit_action">
|
21
|
-
# <button type="submit" value="Create Post">
|
22
|
-
# </li>
|
23
|
-
# </ol>
|
24
|
-
# </fieldset>
|
25
|
-
# </form>
|
26
|
-
#
|
27
|
-
# @example Specifying a label with a String
|
28
|
-
# <%= f.action :submit, :as => :button, :label => "Go" %>
|
29
|
-
#
|
30
|
-
# @example Pass HTML attributes down to the `<button>`
|
31
|
-
# <%= f.action :submit, :as => :button, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
32
|
-
#
|
33
|
-
# @example Access key can also be set as a top-level option
|
34
|
-
# <%= f.action :submit, :as => :button, :accesskey => 'g' %>
|
35
|
-
#
|
36
|
-
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
37
|
-
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
38
|
-
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
39
|
-
#
|
40
|
-
# @option *args :label [String, Symbol]
|
41
|
-
# Override the label text with a String or a symbol for an i18n translation key
|
42
|
-
#
|
43
|
-
# @option *args :button_html [Hash]
|
44
|
-
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
45
|
-
#
|
46
|
-
# @option *args :wrapper_html [Hash]
|
47
|
-
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
48
|
-
#
|
49
|
-
# @todo document i18n keys
|
50
|
-
# @todo document i18n translation with :label (?)
|
51
1
|
module Formtastic
|
52
2
|
module Actions
|
53
|
-
|
3
|
+
|
4
|
+
# Outputs a `<button type="submit">` or `<button type="reset">` wrapped in the standard `<li>`
|
5
|
+
# wrapper. This is an alternative choice for `:submit` and `:reset` actions, which render with
|
6
|
+
# `<input type="submit">` and `<input type="reset">` by default.
|
7
|
+
#
|
8
|
+
# @example Full form context and output
|
9
|
+
#
|
10
|
+
# <%= semantic_form_for(@post) do |f| %>
|
11
|
+
# <%= f.actions do %>
|
12
|
+
# <%= f.action :reset, :as => :button %>
|
13
|
+
# <%= f.action :submit, :as => :button %>
|
14
|
+
# <% end %>
|
15
|
+
# <% end %>
|
16
|
+
#
|
17
|
+
# <form...>
|
18
|
+
# <fieldset class="actions">
|
19
|
+
# <ol>
|
20
|
+
# <li class="action button_action" id="post_reset_action">
|
21
|
+
# <button type="reset" value="Reset">
|
22
|
+
# </li>
|
23
|
+
# <li class="action button_action" id="post_submit_action">
|
24
|
+
# <button type="submit" value="Create Post">
|
25
|
+
# </li>
|
26
|
+
# </ol>
|
27
|
+
# </fieldset>
|
28
|
+
# </form>
|
29
|
+
#
|
30
|
+
# @example Specifying a label with a String
|
31
|
+
# <%= f.action :submit, :as => :button, :label => "Go" %>
|
32
|
+
#
|
33
|
+
# @example Pass HTML attributes down to the `<button>`
|
34
|
+
# <%= f.action :submit, :as => :button, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
35
|
+
#
|
36
|
+
# @example Access key can also be set as a top-level option
|
37
|
+
# <%= f.action :submit, :as => :button, :accesskey => 'g' %>
|
38
|
+
#
|
39
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
40
|
+
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
41
|
+
# <%= f.action :submit, :as => :button, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
42
|
+
#
|
43
|
+
# @todo document i18n keys
|
44
|
+
# @todo document i18n translation with :label (?)
|
45
|
+
class ButtonAction
|
54
46
|
include Base
|
55
47
|
include Buttonish
|
56
|
-
|
57
|
-
#
|
58
|
-
#
|
48
|
+
|
49
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
50
|
+
# @option *args :label [String, Symbol]
|
51
|
+
# Override the label text with a String or a symbol for an i18n translation key
|
59
52
|
#
|
53
|
+
# @option *args :button_html [Hash]
|
54
|
+
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
55
|
+
#
|
56
|
+
# @option *args :wrapper_html [Hash]
|
57
|
+
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
58
|
+
|
60
59
|
# TODO reset_action class?
|
61
60
|
def to_html
|
62
61
|
wrapper do
|
63
|
-
|
64
|
-
template.button_tag(text, button_html)
|
65
|
-
else
|
66
|
-
template.content_tag(:button, text, button_html)
|
67
|
-
end
|
62
|
+
template.button_tag(text, button_html)
|
68
63
|
end
|
69
64
|
end
|
70
65
|
end
|
71
66
|
end
|
72
|
-
end
|
67
|
+
end
|
@@ -1,63 +1,65 @@
|
|
1
|
-
# Outputs an `<input type="submit">` or `<input type="reset">` wrapped in the standard `<li>`
|
2
|
-
# wrapper. This the default for `:submit` and `:reset` actions, but `:as => :button` is also
|
3
|
-
# available as an alternative.
|
4
|
-
#
|
5
|
-
# @example The `:as` can be ommitted, these are functionally equivalent
|
6
|
-
# <%= f.action :submit, :as => :input %>
|
7
|
-
# <%= f.action :submit %>
|
8
|
-
#
|
9
|
-
# @example Full form context and output
|
10
|
-
#
|
11
|
-
# <%= semantic_form_for(@post) do |f| %>
|
12
|
-
# <%= f.actions do %>
|
13
|
-
# <%= f.action :reset, :as => :input %>
|
14
|
-
# <%= f.action :submit, :as => :input %>
|
15
|
-
# <% end %>
|
16
|
-
# <% end %>
|
17
|
-
#
|
18
|
-
# <form...>
|
19
|
-
# <fieldset class="actions">
|
20
|
-
# <ol>
|
21
|
-
# <li class="action input_action" id="post_reset_action">
|
22
|
-
# <input type="reset" value="Reset">
|
23
|
-
# </li>
|
24
|
-
# <li class="action input_action" id="post_submit_action">
|
25
|
-
# <input type="submit" value="Create Post">
|
26
|
-
# </li>
|
27
|
-
# </ol>
|
28
|
-
# </fieldset>
|
29
|
-
# </form>
|
30
|
-
#
|
31
|
-
# @example Specifying a label with a String
|
32
|
-
# <%= f.action :submit, :as => :input, :label => "Go" %>
|
33
|
-
#
|
34
|
-
# @example Pass HTML attributes down to the `<input>`
|
35
|
-
# <%= f.action :submit, :as => :input, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
36
|
-
#
|
37
|
-
# @example Access key can also be set as a top-level option
|
38
|
-
# <%= f.action :submit, :as => :input, :accesskey => 'g' %>
|
39
|
-
#
|
40
|
-
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
41
|
-
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
42
|
-
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
43
|
-
#
|
44
|
-
# @option *args :label [String, Symbol]
|
45
|
-
# Override the label text with a String or a symbol for an i18n translation key
|
46
|
-
#
|
47
|
-
# @option *args :button_html [Hash]
|
48
|
-
# Override or add to the HTML attributes to be passed down to the `<input>` tag
|
49
|
-
#
|
50
|
-
# @option *args :wrapper_html [Hash]
|
51
|
-
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
52
|
-
#
|
53
|
-
# @todo document i18n keys
|
54
|
-
# @todo document i18n translation with :label (?)
|
55
1
|
module Formtastic
|
56
2
|
module Actions
|
57
|
-
|
3
|
+
|
4
|
+
# Outputs an `<input type="submit">` or `<input type="reset">` wrapped in the standard `<li>`
|
5
|
+
# wrapper. This the default for `:submit` and `:reset` actions, but `:as => :button` is also
|
6
|
+
# available as an alternative.
|
7
|
+
#
|
8
|
+
# @example The `:as` can be ommitted, these are functionally equivalent
|
9
|
+
# <%= f.action :submit, :as => :input %>
|
10
|
+
# <%= f.action :submit %>
|
11
|
+
#
|
12
|
+
# @example Full form context and output
|
13
|
+
#
|
14
|
+
# <%= semantic_form_for(@post) do |f| %>
|
15
|
+
# <%= f.actions do %>
|
16
|
+
# <%= f.action :reset, :as => :input %>
|
17
|
+
# <%= f.action :submit, :as => :input %>
|
18
|
+
# <% end %>
|
19
|
+
# <% end %>
|
20
|
+
#
|
21
|
+
# <form...>
|
22
|
+
# <fieldset class="actions">
|
23
|
+
# <ol>
|
24
|
+
# <li class="action input_action" id="post_reset_action">
|
25
|
+
# <input type="reset" value="Reset">
|
26
|
+
# </li>
|
27
|
+
# <li class="action input_action" id="post_submit_action">
|
28
|
+
# <input type="submit" value="Create Post">
|
29
|
+
# </li>
|
30
|
+
# </ol>
|
31
|
+
# </fieldset>
|
32
|
+
# </form>
|
33
|
+
#
|
34
|
+
# @example Specifying a label with a String
|
35
|
+
# <%= f.action :submit, :as => :input, :label => "Go" %>
|
36
|
+
#
|
37
|
+
# @example Pass HTML attributes down to the `<input>`
|
38
|
+
# <%= f.action :submit, :as => :input, :button_html => { :class => 'pretty', :accesskey => 'g', :disable_with => "Wait..." } %>
|
39
|
+
#
|
40
|
+
# @example Access key can also be set as a top-level option
|
41
|
+
# <%= f.action :submit, :as => :input, :accesskey => 'g' %>
|
42
|
+
#
|
43
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
44
|
+
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
45
|
+
# <%= f.action :submit, :as => :input, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
46
|
+
# @todo document i18n keys
|
47
|
+
# @todo document i18n translation with :label (?)
|
48
|
+
class InputAction
|
58
49
|
include Base
|
59
50
|
include Buttonish
|
60
|
-
|
51
|
+
|
52
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
53
|
+
# @option *args :label [String, Symbol]
|
54
|
+
# Override the label text with a String or a symbol 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
|
+
|
61
63
|
def to_html
|
62
64
|
wrapper do
|
63
65
|
builder.submit(text, button_html)
|
@@ -65,4 +67,4 @@ module Formtastic
|
|
65
67
|
end
|
66
68
|
end
|
67
69
|
end
|
68
|
-
end
|
70
|
+
end
|
@@ -1,82 +1,83 @@
|
|
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="submit" value="Create Post">
|
23
|
-
# </li>
|
24
|
-
# <li class="action link_action" id="post_cancel_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
1
|
module Formtastic
|
64
2
|
module Actions
|
65
|
-
|
66
|
-
|
3
|
+
# Outputs a link wrapped in the standard `<li>` wrapper. This the default for `:cancel` actions.
|
4
|
+
# The link's URL defaults to Rails' built-in `:back` macro (the HTTP referrer, or Javascript for the
|
5
|
+
# browser's history), but can be altered with the `:url` option.
|
6
|
+
#
|
7
|
+
# @example The `:as` can be ommitted, these are functionally equivalent
|
8
|
+
# <%= f.action :cancel, :as => :link %>
|
9
|
+
# <%= f.action :cancel %>
|
10
|
+
#
|
11
|
+
# @example Full form context and output
|
12
|
+
#
|
13
|
+
# <%= semantic_form_for(@post) do |f| %>
|
14
|
+
# <%= f.actions do %>
|
15
|
+
# <%= f.action :submit, :as => :input %>
|
16
|
+
# <%= f.action :cancel, :as => :link %>
|
17
|
+
# <% end %>
|
18
|
+
# <% end %>
|
19
|
+
#
|
20
|
+
# <form...>
|
21
|
+
# <fieldset class="actions">
|
22
|
+
# <ol>
|
23
|
+
# <li class="action input_action" id="post_submit_action">
|
24
|
+
# <input type="submit" value="Create Post">
|
25
|
+
# </li>
|
26
|
+
# <li class="action link_action" id="post_cancel_action">
|
27
|
+
# <a href="javascript:history.back()">Cancel</a>
|
28
|
+
# </li>
|
29
|
+
# </ol>
|
30
|
+
# </fieldset>
|
31
|
+
# </form>
|
32
|
+
#
|
33
|
+
# @example Modifying the URL for the link
|
34
|
+
# <%= f.action :cancel, :as => :link, :url => "http://example.com/path" %>
|
35
|
+
# <%= f.action :cancel, :as => :link, :url => "/path" %>
|
36
|
+
# <%= f.action :cancel, :as => :link, :url => posts_path %>
|
37
|
+
# <%= f.action :cancel, :as => :link, :url => url_for(...) %>
|
38
|
+
# <%= f.action :cancel, :as => :link, :url => { :controller => "posts", :action => "index" } %>
|
39
|
+
#
|
40
|
+
# @example Specifying a label with a String
|
41
|
+
# <%= f.action :cancel, :as => :link, :label => "Stop" %>
|
42
|
+
#
|
43
|
+
# @example Pass HTML attributes down to the `<a>`
|
44
|
+
# <%= f.action :cancel, :as => :link, :button_html => { :class => 'pretty', :accesskey => 'x' } %>
|
45
|
+
#
|
46
|
+
# @example Access key can also be set as a top-level option
|
47
|
+
# <%= f.action :cancel, :as => :link, :accesskey => 'x' %>
|
48
|
+
#
|
49
|
+
# @example Pass HTML attributes down to the `<li>` wrapper (classes are appended to the existing classes)
|
50
|
+
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => 'special', :id => 'whatever' } %>
|
51
|
+
# <%= f.action :cancel, :as => :link, :wrapper_html => { :class => ['extra', 'special'], :id => 'whatever' } %>
|
52
|
+
#
|
53
|
+
# @todo document i18n keys
|
54
|
+
# @todo document i18n translation with :label (?)
|
55
|
+
# @todo :prefix and :suffix options? (can also be done with CSS or subclassing for custom Actions)
|
56
|
+
class LinkAction
|
67
57
|
include Base
|
68
|
-
|
58
|
+
|
59
|
+
# @see Formtastic::Helpers::ActionHelper#action
|
60
|
+
# @option *args :label [String, Symbol]
|
61
|
+
# Override the label text with a String or a symbol for an i18n translation key
|
62
|
+
#
|
63
|
+
# @option *args :button_html [Hash]
|
64
|
+
# Override or add to the HTML attributes to be passed down to the `<a>` tag
|
65
|
+
#
|
66
|
+
# @option *args :wrapper_html [Hash]
|
67
|
+
# Override or add to the HTML attributes to be passed down to the wrapping `<li>` tag
|
68
|
+
#
|
69
|
+
|
69
70
|
def supported_methods
|
70
71
|
[:cancel]
|
71
72
|
end
|
72
|
-
|
73
|
+
|
73
74
|
# TODO reset_action class?
|
74
75
|
def to_html
|
75
76
|
wrapper do
|
76
77
|
template.link_to(text, url, button_html)
|
77
78
|
end
|
78
79
|
end
|
79
|
-
|
80
|
+
|
80
81
|
def url
|
81
82
|
return options[:url] if options.key?(:url)
|
82
83
|
:back
|
data/lib/formtastic/actions.rb
CHANGED