speedo-formstrap 1.2.3 → 1.2.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (94) hide show
  1. data/Gemfile +2 -2
  2. data/Gemfile.lock +42 -40
  3. data/README.md +8 -15
  4. data/Rakefile +3 -3
  5. data/VERSION +1 -1
  6. data/formtastic-bootstrap.gemspec +133 -0
  7. data/lib/{speedo-formstrap → formtastic-bootstrap}/engine.rb +1 -1
  8. data/lib/{speedo-formstrap → formtastic-bootstrap}/form_builder.rb +9 -11
  9. data/lib/{speedo-formstrap → formtastic-bootstrap}/helpers/buttons_helper.rb +10 -14
  10. data/lib/{speedo-formstrap → formtastic-bootstrap}/helpers/fieldset_wrapper.rb +7 -12
  11. data/lib/{speedo-formstrap → formtastic-bootstrap}/helpers/input_helper.rb +2 -2
  12. data/lib/{speedo-formstrap → formtastic-bootstrap}/helpers/inputs_helper.rb +6 -6
  13. data/lib/{speedo-formstrap → formtastic-bootstrap}/helpers.rb +6 -8
  14. data/lib/formtastic-bootstrap/inputs/base/choices.rb +49 -0
  15. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/errors.rb +1 -1
  16. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/hints.rb +1 -1
  17. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/html.rb +1 -1
  18. data/lib/formtastic-bootstrap/inputs/base/labelling.rb +18 -0
  19. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/stringish.rb +1 -1
  20. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/timeish.rb +13 -6
  21. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/base/wrapping.rb +15 -33
  22. data/lib/formtastic-bootstrap/inputs/base.rb +22 -0
  23. data/lib/formtastic-bootstrap/inputs/boolean_input.rb +33 -0
  24. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/check_boxes_input.rb +10 -11
  25. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/date_input.rb +1 -1
  26. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/datetime_input.rb +1 -1
  27. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/email_input.rb +1 -1
  28. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/file_input.rb +1 -1
  29. data/lib/formtastic-bootstrap/inputs/hidden_input.rb +12 -0
  30. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/number_input.rb +3 -3
  31. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/password_input.rb +1 -1
  32. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/phone_input.rb +1 -1
  33. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/radio_input.rb +13 -14
  34. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/range_input.rb +3 -3
  35. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/search_input.rb +1 -1
  36. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/select_input.rb +1 -1
  37. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/string_input.rb +1 -1
  38. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/text_input.rb +1 -1
  39. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/time_input.rb +1 -1
  40. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/time_zone_input.rb +1 -1
  41. data/lib/{speedo-formstrap → formtastic-bootstrap}/inputs/url_input.rb +1 -1
  42. data/lib/formtastic-bootstrap/inputs.rb +29 -0
  43. data/lib/formtastic-bootstrap.rb +6 -0
  44. data/spec/builder/errors_spec.rb +214 -0
  45. data/spec/builder/semantic_fields_for_spec.rb +14 -14
  46. data/spec/helpers/buttons_helper_spec.rb +45 -55
  47. data/spec/helpers/input_helper_spec.rb +188 -188
  48. data/spec/helpers/inputs_helper_spec.rb +102 -116
  49. data/spec/inputs/boolean_input_spec.rb +44 -72
  50. data/spec/inputs/check_boxes_input_spec.rb +80 -108
  51. data/spec/inputs/date_input_spec.rb +14 -80
  52. data/spec/inputs/datetime_input_spec.rb +12 -12
  53. data/spec/inputs/email_input_spec.rb +5 -33
  54. data/spec/inputs/file_input_spec.rb +5 -33
  55. data/spec/inputs/hidden_input_spec.rb +12 -40
  56. data/spec/inputs/number_input_spec.rb +96 -126
  57. data/spec/inputs/password_input_spec.rb +5 -33
  58. data/spec/inputs/phone_input_spec.rb +5 -33
  59. data/spec/inputs/radio_input_spec.rb +44 -72
  60. data/spec/inputs/range_input_spec.rb +65 -93
  61. data/spec/inputs/search_input_spec.rb +5 -32
  62. data/spec/inputs/select_input_spec.rb +77 -123
  63. data/spec/inputs/string_input_spec.rb +21 -66
  64. data/spec/inputs/text_input_spec.rb +13 -40
  65. data/spec/inputs/time_input_spec.rb +22 -22
  66. data/spec/inputs/time_zone_input_spec.rb +17 -17
  67. data/spec/inputs/url_input_spec.rb +5 -33
  68. data/spec/spec_helper.rb +1 -1
  69. data/spec/support/custom_macros.rb +188 -59
  70. data/spec/support/formtastic_spec_helper.rb +3 -19
  71. data/vendor/assets/stylesheets/formtastic-bootstrap.css +3 -0
  72. metadata +62 -74
  73. data/lib/speedo-formstrap/actions/base.rb +0 -18
  74. data/lib/speedo-formstrap/actions/button_action.rb +0 -7
  75. data/lib/speedo-formstrap/actions/input_action.rb +0 -7
  76. data/lib/speedo-formstrap/actions/link_action.rb +0 -7
  77. data/lib/speedo-formstrap/actions.rb +0 -4
  78. data/lib/speedo-formstrap/helpers/action_helper.rb +0 -12
  79. data/lib/speedo-formstrap/helpers/actions_helper.rb +0 -23
  80. data/lib/speedo-formstrap/inputs/base/choices.rb +0 -38
  81. data/lib/speedo-formstrap/inputs/base/labelling.rb +0 -28
  82. data/lib/speedo-formstrap/inputs/base/numeric.rb +0 -18
  83. data/lib/speedo-formstrap/inputs/base.rb +0 -23
  84. data/lib/speedo-formstrap/inputs/boolean_input.rb +0 -29
  85. data/lib/speedo-formstrap/inputs/hidden_input.rb +0 -14
  86. data/lib/speedo-formstrap/inputs.rb +0 -29
  87. data/lib/speedo-formstrap.rb +0 -7
  88. data/spec/actions/button_action_spec.rb +0 -68
  89. data/spec/actions/generic_action_spec.rb +0 -486
  90. data/spec/actions/input_action_spec.rb +0 -64
  91. data/spec/actions/link_action_spec.rb +0 -93
  92. data/spec/helpers/action_helper_spec.rb +0 -365
  93. data/spec/helpers/actions_helper_spec.rb +0 -143
  94. data/speedo-formstrap.gemspec +0 -145
@@ -1,15 +1,19 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Helpers
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
+
13
17
  if block_given?
14
18
  contents = if template.respond_to?(:is_haml?) && template.is_haml?
15
19
  template.capture_haml(&block)
@@ -20,8 +24,6 @@ module SpeedoFormstrap
20
24
 
21
25
  # Ruby 1.9: String#to_s behavior changed, need to make an explicit join.
22
26
  contents = contents.join if contents.respond_to?(:join)
23
-
24
- legend = field_set_legend(html_options)
25
27
  fieldset = template.content_tag(:fieldset,
26
28
  Formtastic::Util.html_safe(legend) << Formtastic::Util.html_safe(contents),
27
29
  html_options.except(:builder, :parent, :name)
@@ -30,13 +32,6 @@ module SpeedoFormstrap
30
32
  fieldset
31
33
  end
32
34
 
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
-
40
35
  end
41
36
  end
42
- end
37
+ end
@@ -1,10 +1,10 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Helpers
3
3
  module InputHelper
4
4
  include Formtastic::Helpers::InputHelper
5
5
 
6
6
  def standard_input_class_name(as)
7
- "SpeedoFormstrap::Inputs::#{as.to_s.camelize}Input"
7
+ "FormtasticBootstrap::Inputs::#{as.to_s.camelize}Input"
8
8
  end
9
9
 
10
10
  end
@@ -1,12 +1,12 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Helpers
3
3
  module InputsHelper
4
- include SpeedoFormstrap::Helpers::FieldsetWrapper
4
+ include FormtasticBootstrap::Helpers::FieldsetWrapper
5
5
 
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 = wrap_it
30
+ @already_in_an_inputs_block = false
31
31
  out
32
32
  end
33
33
 
34
34
  end
35
35
  end
36
- end
36
+ end
@@ -1,11 +1,9 @@
1
- require "speedo-formstrap/helpers/buttons_helper"
2
- require "speedo-formstrap/helpers/fieldset_wrapper"
3
- require "speedo-formstrap/helpers/action_helper"
4
- require "speedo-formstrap/helpers/actions_helper"
5
- require "speedo-formstrap/helpers/input_helper"
6
- require "speedo-formstrap/helpers/inputs_helper"
1
+ require "formtastic-bootstrap/helpers/buttons_helper"
2
+ require "formtastic-bootstrap/helpers/fieldset_wrapper"
3
+ require "formtastic-bootstrap/helpers/input_helper"
4
+ require "formtastic-bootstrap/helpers/inputs_helper"
7
5
 
8
- module SpeedoFormstrap
6
+ module FormtasticBootstrap
9
7
  module Helpers
10
8
  # autoload :ErrorsHelper, 'formtastic/helpers/errors_helper'
11
9
  # autoload :FieldsetWrapper, 'formtastic/helpers/fieldset_wrapper'
@@ -13,7 +11,7 @@ module SpeedoFormstrap
13
11
  # autoload :FormHelper, 'formtastic/helpers/form_helper'
14
12
  # autoload :InputHelper, 'formtastic/helpers/input_helper'
15
13
  # autoload :InputsHelper, 'formtastic/helpers/inputs_helper'
16
- # autoload :LabelHelper, 'formtastic/helpers/label_helper'
14
+ # autoload :LabelHelper, 'formtastic/helpers/label_helper'
17
15
  # autoload :SemanticFormHelper, 'formtastic/helpers/semantic_form_helper'
18
16
  # autoload :Reflection, 'formtastic/helpers/reflection'
19
17
  end
@@ -0,0 +1,49 @@
1
+ module FormtasticBootstrap
2
+ module Inputs
3
+ module Base
4
+ module Choices
5
+
6
+ def input_div_wrapping(&block)
7
+ template.content_tag(:div, choices_wrapping_html_options) do
8
+ [yield, error_html(:block), hint_html(:block)].join("\n").html_safe
9
+ end
10
+ end
11
+
12
+ def choices_wrapping_html_options
13
+ # TODO Call the Formtastic one explicity and append?
14
+ { :class => "choices input" }
15
+ end
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
34
+
35
+ # This is actually a label in Bootstrap.
36
+ def legend_html
37
+ template.content_tag(:label, label_html_options) do
38
+ render_label? ? label_text : "".html_safe
39
+ end
40
+ end
41
+
42
+ def label_html_options
43
+ super.merge(:for => nil)
44
+ end
45
+
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,4 +1,4 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
3
3
  module Base
4
4
  module Errors
@@ -1,4 +1,4 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
3
3
  module Base
4
4
  module Hints
@@ -1,4 +1,4 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
3
3
  module Base
4
4
  module Html
@@ -0,0 +1,18 @@
1
+ module FormtasticBootstrap
2
+ module Inputs
3
+ module Base
4
+ module Labelling
5
+
6
+ include Formtastic::Inputs::Base::Labelling
7
+
8
+ def label_html_options
9
+ {}.tap do |opts|
10
+ opts[:for] ||= input_html_options[:id]
11
+ opts[:class] = [opts[:class]]
12
+ end
13
+ end
14
+
15
+ end
16
+ end
17
+ end
18
+ end
@@ -1,6 +1,6 @@
1
1
  # Alas, I need to duplicate code from Formtastic::Inputs::Base::Stringish because
2
2
  # there's no way to re-import that module.
3
- module SpeedoFormstrap
3
+ module FormtasticBootstrap
4
4
  module Inputs
5
5
  module Base
6
6
  module Stringish
@@ -1,8 +1,15 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
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
+
6
13
  def date_input_html
7
14
  fragment_input_html(:date, "small")
8
15
  end
@@ -10,19 +17,19 @@ module SpeedoFormstrap
10
17
  def time_input_html
11
18
  fragment_input_html(:time, "mini")
12
19
  end
13
-
20
+
14
21
  def fragment_id(fragment)
15
22
  # TODO is this right?
16
23
  # "#{input_html_options[:id]}_#{position(fragment)}i"
17
24
  "#{input_html_options[:id]}[#{fragment}]"
18
25
  end
19
-
26
+
20
27
  def fragment_input_html(fragment, klass)
21
- opts = input_options.merge(:prefix => fragment_prefix, :field_name => fragment_name(fragment), :default => value, :include_blank => include_blank?)
28
+ opts = input_options.merge(:prefix => object_name, :field_name => fragment_name(fragment), :default => value, :include_blank => include_blank?)
22
29
  template.send(:"text_field_#{fragment}", value, opts, input_html_options.merge(:id => fragment_id(fragment), :class => klass))
23
30
  end
24
-
31
+
25
32
  end
26
33
  end
27
34
  end
28
- end
35
+ end
@@ -1,4 +1,4 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
3
3
  module Base
4
4
  module Wrapping
@@ -6,29 +6,23 @@ module SpeedoFormstrap
6
6
  include Formtastic::Inputs::Base::Wrapping
7
7
 
8
8
  def generic_input_wrapping(&block)
9
- control_group_div_wrapping do
9
+ clearfix_div_wrapping do
10
10
  label_html <<
11
11
  input_div_wrapping do
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
12
+ yield
19
13
  end
20
14
  end
21
15
  end
22
16
 
23
- def control_group_div_wrapping(&block)
17
+ def clearfix_div_wrapping(&block)
24
18
  template.content_tag(:div, wrapper_html_options) do
25
19
  yield
26
20
  end
27
21
  end
28
22
 
29
23
  def input_div_wrapping(inline_or_block_errors = :inline)
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
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
32
26
  end
33
27
  end
34
28
 
@@ -39,36 +33,24 @@ module SpeedoFormstrap
39
33
  end
40
34
 
41
35
  def wrapper_html_options
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"
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"
54
41
  # opts[:class] << "input"
55
42
  opts[:class] << "error" if errors?
56
43
  opts[:class] << "optional" if optional?
57
44
  opts[:class] << "required" if required?
58
45
  opts[:class] << "autofocus" if autofocus?
59
46
  opts[:class] = opts[:class].join(' ')
60
-
47
+
61
48
  opts[:id] ||= wrapper_dom_id
62
-
49
+
63
50
  opts
64
51
  end
65
-
66
- def prepended_input_wrapping(&block)
67
- template.content_tag(:div, :class => 'input-prepend') do
68
- yield
69
- end
70
- end
52
+
71
53
  end
72
54
  end
73
55
  end
74
- end
56
+ end
@@ -0,0 +1,22 @@
1
+ require "formtastic-bootstrap/inputs/base/choices"
2
+ require "formtastic-bootstrap/inputs/base/errors"
3
+ require "formtastic-bootstrap/inputs/base/hints"
4
+ require "formtastic-bootstrap/inputs/base/html"
5
+ require "formtastic-bootstrap/inputs/base/labelling"
6
+ require "formtastic-bootstrap/inputs/base/stringish"
7
+ require "formtastic-bootstrap/inputs/base/timeish"
8
+ require "formtastic-bootstrap/inputs/base/wrapping"
9
+
10
+ module FormtasticBootstrap
11
+ module Inputs
12
+ module Base
13
+
14
+ include Errors
15
+ include Hints
16
+ include Html
17
+ include Labelling
18
+ include Wrapping
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,33 @@
1
+ # TODO See if this can be refactored to make use of some of the Choices code.
2
+ module FormtasticBootstrap
3
+ module Inputs
4
+ class BooleanInput < Formtastic::Inputs::BooleanInput
5
+ include Base
6
+
7
+ def to_html
8
+ clearfix_div_wrapping do
9
+ empty_label <<
10
+ hidden_field_html <<
11
+ input_div_wrapping(:block) do
12
+ template.content_tag(:ul, :class => "inputs-list") do
13
+ template.content_tag(:li) do
14
+ label_with_nested_checkbox
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ def label_text_with_embedded_checkbox
22
+ # That newline matters! Why, I do no not know.
23
+ check_box_html << "\n" << template.content_tag(:span) do label_text end
24
+ end
25
+
26
+ # Need this for formatting to work.
27
+ def empty_label
28
+ template.content_tag(:label) do end
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -1,17 +1,21 @@
1
- module SpeedoFormstrap
1
+ module FormtasticBootstrap
2
2
  module Inputs
3
3
  class CheckBoxesInput < Formtastic::Inputs::CheckBoxesInput
4
4
  include Base
5
5
  include Base::Choices
6
6
 
7
7
  def to_html
8
- control_group_div_wrapping do
8
+ clearfix_div_wrapping do
9
9
  legend_html <<
10
10
  hidden_field_for_all <<
11
11
  input_div_wrapping do
12
- collection.map { |choice|
13
- choice_html(choice)
14
- }.join("\n").html_safe
12
+ choices_group_wrapping do
13
+ collection.map { |choice|
14
+ choice_wrapping(choice_wrapping_html_options(choice)) do
15
+ choice_html(choice)
16
+ end
17
+ }.join("\n").html_safe
18
+ end
15
19
  end
16
20
  end
17
21
  end
@@ -22,15 +26,10 @@ module SpeedoFormstrap
22
26
  check_box_with_hidden_input(choice) :
23
27
  check_box_without_hidden_input(choice) <<
24
28
  choice_label(choice),
25
- label_html_options.merge(:for => choice_input_dom_id(choice)).merge(choice_wrapping_html_options(choice))
29
+ label_html_options.merge(:for => choice_input_dom_id(choice), :class => nil)
26
30
  )
27
31
  end
28
32
 
29
- def choice_wrapping_html_options(choice)
30
- new_class = [super[:class], 'checkbox'].join(' ')
31
- super.merge(:class => new_class)
32
- end
33
-
34
33
  end
35
34
  end
36
35
  end