speedo-formstrap 1.2.2 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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