speedo-formstrap 1.2.2 → 1.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (44) hide show
  1. data/Gemfile +0 -1
  2. data/README.md +4 -4
  3. data/Rakefile +1 -1
  4. data/VERSION +1 -1
  5. data/lib/speedo-formstrap/form_builder.rb +7 -5
  6. data/lib/speedo-formstrap/helpers.rb +3 -1
  7. data/lib/speedo-formstrap/helpers/buttons_helper.rb +13 -9
  8. data/lib/speedo-formstrap/helpers/fieldset_wrapper.rb +11 -6
  9. data/lib/speedo-formstrap/helpers/inputs_helper.rb +4 -4
  10. data/lib/speedo-formstrap/inputs/base.rb +2 -1
  11. data/lib/speedo-formstrap/inputs/base/choices.rb +12 -23
  12. data/lib/speedo-formstrap/inputs/base/labelling.rb +16 -6
  13. data/lib/speedo-formstrap/inputs/base/timeish.rb +5 -12
  14. data/lib/speedo-formstrap/inputs/base/wrapping.rb +32 -14
  15. data/lib/speedo-formstrap/inputs/number_input.rb +2 -2
  16. data/lib/speedo-formstrap/inputs/radio_input.rb +13 -12
  17. data/lib/speedo-formstrap/inputs/range_input.rb +2 -2
  18. data/spec/builder/semantic_fields_for_spec.rb +16 -16
  19. data/spec/helpers/buttons_helper_spec.rb +56 -46
  20. data/spec/helpers/input_helper_spec.rb +209 -209
  21. data/spec/helpers/inputs_helper_spec.rb +117 -103
  22. data/spec/inputs/boolean_input_spec.rb +74 -46
  23. data/spec/inputs/check_boxes_input_spec.rb +110 -82
  24. data/spec/inputs/date_input_spec.rb +81 -15
  25. data/spec/inputs/datetime_input_spec.rb +13 -13
  26. data/spec/inputs/email_input_spec.rb +34 -6
  27. data/spec/inputs/file_input_spec.rb +34 -6
  28. data/spec/inputs/hidden_input_spec.rb +41 -13
  29. data/spec/inputs/number_input_spec.rb +127 -97
  30. data/spec/inputs/password_input_spec.rb +34 -6
  31. data/spec/inputs/phone_input_spec.rb +34 -6
  32. data/spec/inputs/radio_input_spec.rb +73 -45
  33. data/spec/inputs/range_input_spec.rb +94 -66
  34. data/spec/inputs/search_input_spec.rb +33 -6
  35. data/spec/inputs/select_input_spec.rb +124 -78
  36. data/spec/inputs/string_input_spec.rb +67 -22
  37. data/spec/inputs/text_input_spec.rb +42 -15
  38. data/spec/inputs/time_input_spec.rb +23 -23
  39. data/spec/inputs/time_zone_input_spec.rb +20 -20
  40. data/spec/inputs/url_input_spec.rb +34 -6
  41. data/spec/support/custom_macros.rb +67 -196
  42. data/spec/support/formtastic_spec_helper.rb +22 -6
  43. data/speedo-formstrap.gemspec +2 -2
  44. metadata +17 -17
data/Gemfile CHANGED
@@ -3,7 +3,6 @@ source "http://rubygems.org"
3
3
  gem 'formtastic', '~> 2.1.0.beta1'
4
4
  gem 'rails', '>= 3.1.0'
5
5
 
6
-
7
6
  group :development, :test do
8
7
  gem "rspec"
9
8
  gem "bundler"
data/README.md CHANGED
@@ -8,7 +8,7 @@ You can follow [FormBoot on twitter](http://twitter.com/FormBoot) for update ann
8
8
 
9
9
  ### Dependencies
10
10
 
11
- Sppedo Formstrap (forked from Formtastic Bootstrap) has only been tested with Ruby 1.9.2, Rails 3.2, Formtastic 2.1 and Twitter Bootstrap 2.0.4.
11
+ Formtastic Bootstrap has only been tested with Ruby 1.9.2, Rails 3.1, Formtastic 2.0 and Twitter Bootstrap 1.3.
12
12
 
13
13
  #### Installation
14
14
 
@@ -27,7 +27,7 @@ And install it with <tt>bundle install</tt>.
27
27
  Add the following line to your Formtastic initialization file:
28
28
 
29
29
  # config/initializers/formtastic.rb
30
- Formtastic::Helpers::FormHelper.builder = SpeedoFormstrap::FormBuilder
30
+ Formtastic::Helpers::FormHelper.builder = FormtasticBootstrap::FormBuilder
31
31
 
32
32
  Make sure the CSS `.hidden {display:none;}` is in your project.
33
33
 
@@ -75,7 +75,7 @@ made to generate the HTML expected by Bootstrap while still generating the rich
75
75
  </fieldset>
76
76
  </form>
77
77
 
78
- #### Speedo's Formstrap
78
+ #### Formtastic Bootstrap
79
79
 
80
80
  <form accept-charset="UTF-8" action="/posts" class="formtastic post" id="new_post" method="post">
81
81
  <fieldset class="inputs">
@@ -141,7 +141,7 @@ To create a Prepended Text field, use the ```:prepend``` option. This works on
141
141
 
142
142
  ### Contributors
143
143
 
144
- A big thank you [to all contributors](https://github.com/mjbellantoni/speedo-formstrap/contributors)!
144
+ A big thank you [to all contributors](https://github.com/mjbellantoni/formtastic-bootstrap/contributors)!
145
145
 
146
146
  ### Submitting Issues
147
147
 
data/Rakefile CHANGED
@@ -19,7 +19,7 @@ Jeweler::Tasks.new do |gem|
19
19
  gem.license = "MIT"
20
20
  gem.summary = %Q{Formtastic form builder to generate Twitter Bootstrap-friendly markup.}
21
21
  gem.description = gem.summary
22
- gem.email = "mjbellantoni@yahoo.com"
22
+ gem.email = "stu@t.apio.ca"
23
23
  gem.authors = ["Matthew Bellantoni", "Stu Basden"]
24
24
  # dependencies defined in Gemfile
25
25
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.2.2
1
+ 1.2.3
@@ -1,5 +1,5 @@
1
1
  module SpeedoFormstrap
2
-
2
+
3
3
  class FormBuilder < Formtastic::FormBuilder
4
4
 
5
5
  configure :default_inline_error_class, 'help-inline'
@@ -11,18 +11,18 @@ module SpeedoFormstrap
11
11
  # self.default_inline_error_class
12
12
  raise
13
13
  end
14
-
14
+
15
15
  def self.default_error_class=(error_class)
16
16
  # self.default_inline_error_class = error_class
17
17
  # self.default_block_error_class = error_class
18
18
  raise
19
19
  end
20
-
20
+
21
21
  def self.default_hint_class
22
22
  # self.default_inline_hint_class
23
23
  raise
24
24
  end
25
-
25
+
26
26
  def self.default_hint_class=(hint_class)
27
27
  # self.default_inline_hint_class = hint_class
28
28
  # self.default_block_hint_class = hint_class
@@ -32,7 +32,9 @@ module SpeedoFormstrap
32
32
  include SpeedoFormstrap::Helpers::InputHelper
33
33
  include SpeedoFormstrap::Helpers::InputsHelper
34
34
  include SpeedoFormstrap::Helpers::ButtonsHelper
35
+ include SpeedoFormstrap::Helpers::ActionHelper
36
+ include SpeedoFormstrap::Helpers::ActionsHelper
35
37
 
36
38
  end
37
39
 
38
- end
40
+ end
@@ -1,5 +1,7 @@
1
1
  require "speedo-formstrap/helpers/buttons_helper"
2
2
  require "speedo-formstrap/helpers/fieldset_wrapper"
3
+ require "speedo-formstrap/helpers/action_helper"
4
+ require "speedo-formstrap/helpers/actions_helper"
3
5
  require "speedo-formstrap/helpers/input_helper"
4
6
  require "speedo-formstrap/helpers/inputs_helper"
5
7
 
@@ -11,7 +13,7 @@ module SpeedoFormstrap
11
13
  # autoload :FormHelper, 'formtastic/helpers/form_helper'
12
14
  # autoload :InputHelper, 'formtastic/helpers/input_helper'
13
15
  # autoload :InputsHelper, 'formtastic/helpers/inputs_helper'
14
- # autoload :LabelHelper, 'formtastic/helpers/label_helper'
16
+ # autoload :LabelHelper, 'formtastic/helpers/label_helper'
15
17
  # autoload :SemanticFormHelper, 'formtastic/helpers/semantic_form_helper'
16
18
  # autoload :Reflection, 'formtastic/helpers/reflection'
17
19
  end
@@ -5,10 +5,11 @@ module SpeedoFormstrap
5
5
  include Formtastic::Helpers::ButtonsHelper
6
6
 
7
7
  def buttons(*args, &block)
8
+ ::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")
8
9
 
9
10
  html_options = args.extract_options!
10
- html_options[:class] ||= "actions"
11
-
11
+ html_options[:class] ||= "form-actions"
12
+
12
13
  if html_options.has_key?(:name)
13
14
  ActiveSupport::Deprecation.warn('The :name option is not supported')
14
15
  end
@@ -16,7 +17,7 @@ module SpeedoFormstrap
16
17
  if block_given?
17
18
  template.content_tag(:div, html_options) do
18
19
  yield
19
- end
20
+ end
20
21
  else
21
22
  args = [:commit] if args.empty?
22
23
  contents = args.map { |button_name| send(:"#{button_name}_button") }
@@ -28,25 +29,28 @@ module SpeedoFormstrap
28
29
  end
29
30
 
30
31
  def commit_button(*args)
32
+ ::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")
33
+
31
34
  options = args.extract_options!
32
35
  text = options.delete(:label) || args.shift
33
-
36
+
34
37
  text = (localized_string(commit_button_i18n_key, text, :action, :model => commit_button_object_name) ||
35
38
  Formtastic::I18n.t(commit_button_i18n_key, :model => commit_button_object_name)) unless text.is_a?(::String)
36
-
39
+
37
40
  button_html = options.delete(:button_html) || {}
41
+ button_html[:id] ||= "#{@object_name}_submit"
38
42
  button_html.merge!(:class => [button_html[:class], "btn commit", commit_button_i18n_key].compact.join(' '))
39
-
43
+
40
44
  # TODO We don't have a wrapper. Add deprecation message.
41
45
  # wrapper_html = options.delete(:wrapper_html) || {}
42
46
  # wrapper_html[:class] = (commit_button_wrapper_html_class << wrapper_html[:class]).flatten.compact.join(' ')
43
-
47
+
44
48
  accesskey = (options.delete(:accesskey) || default_commit_button_accesskey) unless button_html.has_key?(:accesskey)
45
49
  button_html = button_html.merge(:accesskey => accesskey) if accesskey
46
-
50
+
47
51
  Formtastic::Util.html_safe(submit(text, button_html))
48
52
  end
49
53
 
50
54
  end
51
55
  end
52
- end
56
+ end
@@ -3,17 +3,13 @@ module SpeedoFormstrap
3
3
  module FieldsetWrapper
4
4
 
5
5
  include Formtastic::Helpers::FieldsetWrapper
6
-
6
+
7
7
  protected
8
8
 
9
9
  def field_set_and_list_wrapping(*args, &block) #:nodoc:
10
10
  contents = args.last.is_a?(::Hash) ? '' : args.pop.flatten
11
11
  html_options = args.extract_options!
12
12
 
13
- legend = (html_options[:name] || '').to_s
14
- legend %= parent_child_index(html_options[:parent]) if html_options[:parent]
15
- legend = template.content_tag(:legend, Formtastic::Util.html_safe(legend)) unless legend.blank?
16
-
17
13
  if block_given?
18
14
  contents = if template.respond_to?(:is_haml?) && template.is_haml?
19
15
  template.capture_haml(&block)
@@ -24,6 +20,8 @@ module SpeedoFormstrap
24
20
 
25
21
  # Ruby 1.9: String#to_s behavior changed, need to make an explicit join.
26
22
  contents = contents.join if contents.respond_to?(:join)
23
+
24
+ legend = field_set_legend(html_options)
27
25
  fieldset = template.content_tag(:fieldset,
28
26
  Formtastic::Util.html_safe(legend) << Formtastic::Util.html_safe(contents),
29
27
  html_options.except(:builder, :parent, :name)
@@ -32,6 +30,13 @@ module SpeedoFormstrap
32
30
  fieldset
33
31
  end
34
32
 
33
+ def field_set_legend(html_options)
34
+ legend = (html_options[:name] || '').to_s
35
+ legend %= parent_child_index(html_options[:parent]) if html_options[:parent]
36
+ legend = template.content_tag(:legend, Formtastic::Util.html_safe(legend)) unless legend.blank?
37
+ legend
38
+ end
39
+
35
40
  end
36
41
  end
37
- end
42
+ end
@@ -6,7 +6,7 @@ module SpeedoFormstrap
6
6
  def inputs(*args, &block)
7
7
  wrap_it = @already_in_an_inputs_block ? true : false
8
8
  @already_in_an_inputs_block = true
9
-
9
+
10
10
  title = field_set_title_from_args(*args)
11
11
  html_options = args.extract_options!
12
12
  html_options[:class] ||= "inputs"
@@ -25,12 +25,12 @@ module SpeedoFormstrap
25
25
  field_set_and_list_wrapping(*((args << html_options) << contents))
26
26
  end
27
27
  end
28
-
28
+
29
29
  # out = template.content_tag(:li, out, :class => "input") if wrap_it
30
- @already_in_an_inputs_block = false
30
+ @already_in_an_inputs_block = wrap_it
31
31
  out
32
32
  end
33
33
 
34
34
  end
35
35
  end
36
- end
36
+ end
@@ -3,6 +3,7 @@ require "speedo-formstrap/inputs/base/errors"
3
3
  require "speedo-formstrap/inputs/base/hints"
4
4
  require "speedo-formstrap/inputs/base/html"
5
5
  require "speedo-formstrap/inputs/base/labelling"
6
+ require "speedo-formstrap/inputs/base/numeric"
6
7
  require "speedo-formstrap/inputs/base/stringish"
7
8
  require "speedo-formstrap/inputs/base/timeish"
8
9
  require "speedo-formstrap/inputs/base/wrapping"
@@ -16,7 +17,7 @@ module SpeedoFormstrap
16
17
  include Html
17
18
  include Labelling
18
19
  include Wrapping
19
-
20
+
20
21
  end
21
22
  end
22
23
  end
@@ -5,45 +5,34 @@ module SpeedoFormstrap
5
5
 
6
6
  def input_div_wrapping(&block)
7
7
  template.content_tag(:div, choices_wrapping_html_options) do
8
- [yield, error_html(:block), hint_html(:block)].join("\n").html_safe
8
+ [yield, error_html(:block), hint_html(:block)].join("\n").html_safe
9
9
  end
10
10
  end
11
11
 
12
12
  def choices_wrapping_html_options
13
- # TODO Call the Formtastic one explicity and append?
14
- { :class => "choices input" }
13
+ new_class = [super[:class], "controls"].compact.join(" ")
14
+ super.merge(:class => new_class)
15
15
  end
16
16
 
17
- def choices_group_wrapping(&block)
18
- template.content_tag(:ul,
19
- template.capture(&block),
20
- choices_group_wrapping_html_options
21
- )
22
- end
23
-
24
- def choices_group_wrapping_html_options
25
- { :class => "choices-group inputs-list" }
26
- end
27
-
28
- def choice_label(choice)
29
- "\n".html_safe + template.content_tag(:span) do
30
- # (choice.is_a?(Array) ? choice.first : choice).to_s
31
- (choice.is_a?(Array) ? choice.first : choice).to_s
32
- end
33
- end
17
+ #def choices_group_wrapping(&block)
18
+ # template.content_tag(:ul,
19
+ # template.capture(&block),
20
+ # choices_group_wrapping_html_options
21
+ # )
22
+ #end
34
23
 
35
24
  # This is actually a label in Bootstrap.
36
25
  def legend_html
37
- template.content_tag(:label, label_html_options) do
26
+ template.content_tag(:label, control_label_html_options) do
38
27
  render_label? ? label_text : "".html_safe
39
28
  end
40
29
  end
41
30
 
42
- def label_html_options
31
+ def control_label_html_options
43
32
  super.merge(:for => nil)
44
33
  end
45
34
 
46
35
  end
47
36
  end
48
37
  end
49
- end
38
+ end
@@ -5,14 +5,24 @@ module SpeedoFormstrap
5
5
 
6
6
  include Formtastic::Inputs::Base::Labelling
7
7
 
8
+ def label_html
9
+ render_label? ? builder.label(input_name, label_text, control_label_html_options) : "".html_safe
10
+ end
11
+
8
12
  def label_html_options
9
- {}.tap do |opts|
10
- opts[:for] ||= input_html_options[:id]
11
- opts[:class] = [opts[:class]]
12
- end
13
+ opts = {}
14
+ opts[:for] ||= input_html_options[:id]
15
+ opts[:class] = [opts[:class]]
16
+
17
+ opts
13
18
  end
14
-
19
+
20
+ def control_label_html_options
21
+ new_class = [label_html_options[:class], "control-label"].compact.join(" ")
22
+ label_html_options.merge(:class => new_class)
23
+ end
24
+
15
25
  end
16
26
  end
17
27
  end
18
- end
28
+ end
@@ -3,13 +3,6 @@ module SpeedoFormstrap
3
3
  module Base
4
4
  module Timeish
5
5
 
6
- def label_html
7
- # TODO Supress the "for" field?
8
- template.content_tag(:label, label_html_options) do
9
- render_label? ? label_text : "".html_safe
10
- end
11
- end
12
-
13
6
  def date_input_html
14
7
  fragment_input_html(:date, "small")
15
8
  end
@@ -17,19 +10,19 @@ module SpeedoFormstrap
17
10
  def time_input_html
18
11
  fragment_input_html(:time, "mini")
19
12
  end
20
-
13
+
21
14
  def fragment_id(fragment)
22
15
  # TODO is this right?
23
16
  # "#{input_html_options[:id]}_#{position(fragment)}i"
24
17
  "#{input_html_options[:id]}[#{fragment}]"
25
18
  end
26
-
19
+
27
20
  def fragment_input_html(fragment, klass)
28
- opts = input_options.merge(:prefix => object_name, :field_name => fragment_name(fragment), :default => value, :include_blank => include_blank?)
21
+ opts = input_options.merge(:prefix => fragment_prefix, :field_name => fragment_name(fragment), :default => value, :include_blank => include_blank?)
29
22
  template.send(:"text_field_#{fragment}", value, opts, input_html_options.merge(:id => fragment_id(fragment), :class => klass))
30
23
  end
31
-
24
+
32
25
  end
33
26
  end
34
27
  end
35
- end
28
+ end
@@ -6,23 +6,29 @@ module SpeedoFormstrap
6
6
  include Formtastic::Inputs::Base::Wrapping
7
7
 
8
8
  def generic_input_wrapping(&block)
9
- clearfix_div_wrapping do
9
+ control_group_div_wrapping do
10
10
  label_html <<
11
11
  input_div_wrapping do
12
- yield
12
+ if options[:prepend]
13
+ prepended_input_wrapping do
14
+ [template.content_tag(:span, options[:prepend], :class => 'add-on'), yield].join("\n").html_safe
15
+ end
16
+ else
17
+ yield
18
+ end
13
19
  end
14
20
  end
15
21
  end
16
22
 
17
- def clearfix_div_wrapping(&block)
23
+ def control_group_div_wrapping(&block)
18
24
  template.content_tag(:div, wrapper_html_options) do
19
25
  yield
20
26
  end
21
27
  end
22
28
 
23
29
  def input_div_wrapping(inline_or_block_errors = :inline)
24
- template.content_tag(:div, :class => "input") do
25
- [yield, error_html(inline_or_block_errors), hint_html(inline_or_block_errors)].join("\n").html_safe
30
+ template.content_tag(:div, :class => "controls") do
31
+ [yield, error_html(inline_or_block_errors), hint_html(inline_or_block_errors)].join("\n").html_safe
26
32
  end
27
33
  end
28
34
 
@@ -33,24 +39,36 @@ module SpeedoFormstrap
33
39
  end
34
40
 
35
41
  def wrapper_html_options
36
- opts = options[:wrapper_html] || {}
37
- opts[:class] ||= []
38
- opts[:class] = [opts[:class].to_s] unless opts[:class].is_a?(Array)
39
- opts[:class] << as
40
- opts[:class] << "clearfix"
42
+ opts = (options[:wrapper_html] || {}).dup
43
+ opts[:class] =
44
+ case opts[:class]
45
+ when Array
46
+ opts[:class].dup
47
+ when nil
48
+ []
49
+ else
50
+ [opts[:class].to_s]
51
+ end
52
+ opts[:class] << "#{as}-wrapper"
53
+ opts[:class] << "control-group"
41
54
  # opts[:class] << "input"
42
55
  opts[:class] << "error" if errors?
43
56
  opts[:class] << "optional" if optional?
44
57
  opts[:class] << "required" if required?
45
58
  opts[:class] << "autofocus" if autofocus?
46
59
  opts[:class] = opts[:class].join(' ')
47
-
60
+
48
61
  opts[:id] ||= wrapper_dom_id
49
-
62
+
50
63
  opts
51
64
  end
52
-
65
+
66
+ def prepended_input_wrapping(&block)
67
+ template.content_tag(:div, :class => 'input-prepend') do
68
+ yield
69
+ end
70
+ end
53
71
  end
54
72
  end
55
73
  end
56
- end
74
+ end