speedo-formstrap 1.2.0
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.
- data/.document +5 -0
- data/.rspec +1 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +117 -0
- data/LICENSE.txt +20 -0
- data/README.md +192 -0
- data/Rakefile +49 -0
- data/VERSION +1 -0
- data/formtastic-bootstrap.gemspec +56 -0
- data/lib/action_view/helpers/text_field_date_helper.rb +166 -0
- data/lib/formtastic-bootstrap.rb +7 -0
- data/lib/formtastic-bootstrap/actions.rb +4 -0
- data/lib/formtastic-bootstrap/actions/base.rb +18 -0
- data/lib/formtastic-bootstrap/actions/button_action.rb +7 -0
- data/lib/formtastic-bootstrap/actions/input_action.rb +7 -0
- data/lib/formtastic-bootstrap/actions/link_action.rb +7 -0
- data/lib/formtastic-bootstrap/engine.rb +4 -0
- data/lib/formtastic-bootstrap/form_builder.rb +40 -0
- data/lib/formtastic-bootstrap/helpers.rb +21 -0
- data/lib/formtastic-bootstrap/helpers/action_helper.rb +12 -0
- data/lib/formtastic-bootstrap/helpers/actions_helper.rb +23 -0
- data/lib/formtastic-bootstrap/helpers/buttons_helper.rb +56 -0
- data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +42 -0
- data/lib/formtastic-bootstrap/helpers/input_helper.rb +12 -0
- data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +36 -0
- data/lib/formtastic-bootstrap/inputs.rb +29 -0
- data/lib/formtastic-bootstrap/inputs/base.rb +23 -0
- data/lib/formtastic-bootstrap/inputs/base/choices.rb +38 -0
- data/lib/formtastic-bootstrap/inputs/base/errors.rb +48 -0
- data/lib/formtastic-bootstrap/inputs/base/hints.rb +27 -0
- data/lib/formtastic-bootstrap/inputs/base/html.rb +21 -0
- data/lib/formtastic-bootstrap/inputs/base/labelling.rb +28 -0
- data/lib/formtastic-bootstrap/inputs/base/numeric.rb +18 -0
- data/lib/formtastic-bootstrap/inputs/base/stringish.rb +18 -0
- data/lib/formtastic-bootstrap/inputs/base/timeish.rb +28 -0
- data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +74 -0
- data/lib/formtastic-bootstrap/inputs/boolean_input.rb +29 -0
- data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +36 -0
- data/lib/formtastic-bootstrap/inputs/date_input.rb +16 -0
- data/lib/formtastic-bootstrap/inputs/datetime_input.rb +19 -0
- data/lib/formtastic-bootstrap/inputs/email_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/file_input.rb +14 -0
- data/lib/formtastic-bootstrap/inputs/hidden_input.rb +14 -0
- data/lib/formtastic-bootstrap/inputs/number_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/password_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/phone_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/radio_input.rb +33 -0
- data/lib/formtastic-bootstrap/inputs/range_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/search_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/select_input.rb +14 -0
- data/lib/formtastic-bootstrap/inputs/string_input.rb +15 -0
- data/lib/formtastic-bootstrap/inputs/text_input.rb +14 -0
- data/lib/formtastic-bootstrap/inputs/time_input.rb +16 -0
- data/lib/formtastic-bootstrap/inputs/time_zone_input.rb +14 -0
- data/lib/formtastic-bootstrap/inputs/url_input.rb +14 -0
- data/spec/actions/button_action_spec.rb +68 -0
- data/spec/actions/generic_action_spec.rb +486 -0
- data/spec/actions/input_action_spec.rb +64 -0
- data/spec/actions/link_action_spec.rb +93 -0
- data/spec/builder/semantic_fields_for_spec.rb +130 -0
- data/spec/helpers/action_helper_spec.rb +365 -0
- data/spec/helpers/actions_helper_spec.rb +143 -0
- data/spec/helpers/buttons_helper_spec.rb +159 -0
- data/spec/helpers/input_helper_spec.rb +956 -0
- data/spec/helpers/inputs_helper_spec.rb +591 -0
- data/spec/inputs/boolean_input_spec.rb +221 -0
- data/spec/inputs/check_boxes_input_spec.rb +467 -0
- data/spec/inputs/date_input_spec.rb +213 -0
- data/spec/inputs/datetime_input_spec.rb +101 -0
- data/spec/inputs/email_input_spec.rb +87 -0
- data/spec/inputs/file_input_spec.rb +91 -0
- data/spec/inputs/hidden_input_spec.rb +150 -0
- data/spec/inputs/number_input_spec.rb +817 -0
- data/spec/inputs/password_input_spec.rb +101 -0
- data/spec/inputs/phone_input_spec.rb +87 -0
- data/spec/inputs/radio_input_spec.rb +268 -0
- data/spec/inputs/range_input_spec.rb +507 -0
- data/spec/inputs/search_input_spec.rb +86 -0
- data/spec/inputs/select_input_spec.rb +613 -0
- data/spec/inputs/string_input_spec.rb +227 -0
- data/spec/inputs/text_input_spec.rb +190 -0
- data/spec/inputs/time_input_spec.rb +206 -0
- data/spec/inputs/time_zone_input_spec.rb +120 -0
- data/spec/inputs/url_input_spec.rb +87 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/custom_macros.rb +575 -0
- data/spec/support/depracation.rb +6 -0
- data/spec/support/formtastic_spec_helper.rb +398 -0
- metadata +216 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Helpers
|
|
3
|
+
module InputsHelper
|
|
4
|
+
include FormtasticBootstrap::Helpers::FieldsetWrapper
|
|
5
|
+
|
|
6
|
+
def inputs(*args, &block)
|
|
7
|
+
wrap_it = @already_in_an_inputs_block ? true : false
|
|
8
|
+
@already_in_an_inputs_block = true
|
|
9
|
+
|
|
10
|
+
title = field_set_title_from_args(*args)
|
|
11
|
+
html_options = args.extract_options!
|
|
12
|
+
html_options[:class] ||= "inputs"
|
|
13
|
+
html_options[:name] = title
|
|
14
|
+
|
|
15
|
+
out = begin
|
|
16
|
+
if html_options[:for] # Nested form
|
|
17
|
+
inputs_for_nested_attributes(*(args << html_options), &block)
|
|
18
|
+
elsif block_given?
|
|
19
|
+
field_set_and_list_wrapping(*(args << html_options), &block)
|
|
20
|
+
else
|
|
21
|
+
legend = args.shift if args.first.is_a?(::String)
|
|
22
|
+
args = default_columns_for_object if @object && args.empty?
|
|
23
|
+
contents = fieldset_contents_from_column_list(args)
|
|
24
|
+
args.unshift(legend) if legend.present?
|
|
25
|
+
field_set_and_list_wrapping(*((args << html_options) << contents))
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# out = template.content_tag(:li, out, :class => "input") if wrap_it
|
|
30
|
+
@already_in_an_inputs_block = wrap_it
|
|
31
|
+
out
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
require "formtastic-bootstrap/inputs/base"
|
|
2
|
+
require "formtastic-bootstrap/inputs/boolean_input"
|
|
3
|
+
require "formtastic-bootstrap/inputs/check_boxes_input"
|
|
4
|
+
require "formtastic-bootstrap/inputs/date_input"
|
|
5
|
+
require "formtastic-bootstrap/inputs/datetime_input"
|
|
6
|
+
require "formtastic-bootstrap/inputs/email_input"
|
|
7
|
+
require "formtastic-bootstrap/inputs/file_input"
|
|
8
|
+
require "formtastic-bootstrap/inputs/hidden_input"
|
|
9
|
+
require "formtastic-bootstrap/inputs/number_input"
|
|
10
|
+
require "formtastic-bootstrap/inputs/password_input"
|
|
11
|
+
require "formtastic-bootstrap/inputs/phone_input"
|
|
12
|
+
require "formtastic-bootstrap/inputs/radio_input"
|
|
13
|
+
require "formtastic-bootstrap/inputs/range_input"
|
|
14
|
+
require "formtastic-bootstrap/inputs/search_input"
|
|
15
|
+
require "formtastic-bootstrap/inputs/select_input"
|
|
16
|
+
require "formtastic-bootstrap/inputs/string_input"
|
|
17
|
+
require "formtastic-bootstrap/inputs/text_input"
|
|
18
|
+
require "formtastic-bootstrap/inputs/time_input"
|
|
19
|
+
require "formtastic-bootstrap/inputs/time_zone_input"
|
|
20
|
+
require "formtastic-bootstrap/inputs/url_input"
|
|
21
|
+
|
|
22
|
+
module FormtasticBootstrap
|
|
23
|
+
module Inputs
|
|
24
|
+
|
|
25
|
+
include Base
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
@@ -0,0 +1,23 @@
|
|
|
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/numeric"
|
|
7
|
+
require "formtastic-bootstrap/inputs/base/stringish"
|
|
8
|
+
require "formtastic-bootstrap/inputs/base/timeish"
|
|
9
|
+
require "formtastic-bootstrap/inputs/base/wrapping"
|
|
10
|
+
|
|
11
|
+
module FormtasticBootstrap
|
|
12
|
+
module Inputs
|
|
13
|
+
module Base
|
|
14
|
+
|
|
15
|
+
include Errors
|
|
16
|
+
include Hints
|
|
17
|
+
include Html
|
|
18
|
+
include Labelling
|
|
19
|
+
include Wrapping
|
|
20
|
+
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
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
|
+
new_class = [super[:class], "controls"].compact.join(" ")
|
|
14
|
+
super.merge(:class => new_class)
|
|
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
|
+
# This is actually a label in Bootstrap.
|
|
25
|
+
def legend_html
|
|
26
|
+
template.content_tag(:label, control_label_html_options) do
|
|
27
|
+
render_label? ? label_text : "".html_safe
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def control_label_html_options
|
|
32
|
+
super.merge(:for => nil)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Errors
|
|
5
|
+
|
|
6
|
+
include Formtastic::Inputs::Base::Errors
|
|
7
|
+
|
|
8
|
+
def error_html(inline_or_block = :inline)
|
|
9
|
+
errors? ? send(:"error_#{builder.inline_errors}_html", inline_or_block) : ""
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def error_sentence_html(inline_or_block)
|
|
13
|
+
error_class = if inline_or_block == :inline
|
|
14
|
+
options[:error_class] || builder.default_inline_error_class
|
|
15
|
+
else
|
|
16
|
+
options[:error_class] || builder.default_block_error_class
|
|
17
|
+
end
|
|
18
|
+
template.content_tag(:span, Formtastic::Util.html_safe(errors.to_sentence.html_safe), :class => error_class)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def error_list_html(ignore)
|
|
22
|
+
super()
|
|
23
|
+
# error_class = options[:error_class] || builder.default_error_list_class
|
|
24
|
+
# list_elements = []
|
|
25
|
+
# errors.each do |error|
|
|
26
|
+
# list_elements << template.content_tag(:li, Formtastic::Util.html_safe(error.html_safe))
|
|
27
|
+
# end
|
|
28
|
+
# template.content_tag(:ul, Formtastic::Util.html_safe(list_elements.join("\n")), :class => error_class)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def error_first_html(inline_or_block = :inline)
|
|
32
|
+
error_class = if inline_or_block == :inline
|
|
33
|
+
options[:error_class] || builder.default_inline_error_class
|
|
34
|
+
else
|
|
35
|
+
options[:error_class] || builder.default_block_error_class
|
|
36
|
+
end
|
|
37
|
+
template.content_tag(:span, Formtastic::Util.html_safe(errors.first.untaint), :class => error_class)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def error_none_html(ignore)
|
|
41
|
+
# super
|
|
42
|
+
""
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Hints
|
|
5
|
+
|
|
6
|
+
include Formtastic::Inputs::Base::Hints
|
|
7
|
+
|
|
8
|
+
def hint_html(inline_or_block = :inline)
|
|
9
|
+
if hint?
|
|
10
|
+
hint_class = if inline_or_block == :inline
|
|
11
|
+
options[:hint_class] || builder.default_inline_hint_class
|
|
12
|
+
else
|
|
13
|
+
options[:hint_class] || builder.default_block_hint_class
|
|
14
|
+
end
|
|
15
|
+
template.content_tag(
|
|
16
|
+
:span,
|
|
17
|
+
Formtastic::Util.html_safe(hint_text),
|
|
18
|
+
:class => hint_class
|
|
19
|
+
)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Html
|
|
5
|
+
|
|
6
|
+
include Formtastic::Inputs::Base::Html
|
|
7
|
+
|
|
8
|
+
def input_html_options
|
|
9
|
+
if errors?
|
|
10
|
+
{
|
|
11
|
+
:class => "error"
|
|
12
|
+
}.merge(super)
|
|
13
|
+
else
|
|
14
|
+
super
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Labelling
|
|
5
|
+
|
|
6
|
+
include Formtastic::Inputs::Base::Labelling
|
|
7
|
+
|
|
8
|
+
def label_html
|
|
9
|
+
render_label? ? builder.label(input_name, label_text, control_label_html_options) : "".html_safe
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def label_html_options
|
|
13
|
+
opts = {}
|
|
14
|
+
opts[:for] ||= input_html_options[:id]
|
|
15
|
+
opts[:class] = [opts[:class]]
|
|
16
|
+
|
|
17
|
+
opts
|
|
18
|
+
end
|
|
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
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Alas, I need to duplicate code from Formtastic::Inputs::Base::Numeric because
|
|
2
|
+
# there's no way to re-import that module.
|
|
3
|
+
module FormtasticBootstrap
|
|
4
|
+
module Inputs
|
|
5
|
+
module Base
|
|
6
|
+
module Numeric
|
|
7
|
+
|
|
8
|
+
include Formtastic::Inputs::Base::Numeric
|
|
9
|
+
|
|
10
|
+
def wrapper_html_options
|
|
11
|
+
new_class = [super[:class], "numeric", "stringish"].compact.join(" ")
|
|
12
|
+
super.merge(:class => new_class)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# Alas, I need to duplicate code from Formtastic::Inputs::Base::Stringish because
|
|
2
|
+
# there's no way to re-import that module.
|
|
3
|
+
module FormtasticBootstrap
|
|
4
|
+
module Inputs
|
|
5
|
+
module Base
|
|
6
|
+
module Stringish
|
|
7
|
+
|
|
8
|
+
include Formtastic::Inputs::Base::Stringish
|
|
9
|
+
|
|
10
|
+
def wrapper_html_options
|
|
11
|
+
new_class = [super[:class], "stringish"].compact.join(" ")
|
|
12
|
+
super.merge(:class => new_class)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Timeish
|
|
5
|
+
|
|
6
|
+
def date_input_html
|
|
7
|
+
fragment_input_html(:date, "small")
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def time_input_html
|
|
11
|
+
fragment_input_html(:time, "mini")
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def fragment_id(fragment)
|
|
15
|
+
# TODO is this right?
|
|
16
|
+
# "#{input_html_options[:id]}_#{position(fragment)}i"
|
|
17
|
+
"#{input_html_options[:id]}[#{fragment}]"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
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?)
|
|
22
|
+
template.send(:"text_field_#{fragment}", value, opts, input_html_options.merge(:id => fragment_id(fragment), :class => klass))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
module Base
|
|
4
|
+
module Wrapping
|
|
5
|
+
|
|
6
|
+
include Formtastic::Inputs::Base::Wrapping
|
|
7
|
+
|
|
8
|
+
def generic_input_wrapping(&block)
|
|
9
|
+
control_group_div_wrapping do
|
|
10
|
+
label_html <<
|
|
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
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def control_group_div_wrapping(&block)
|
|
24
|
+
template.content_tag(:div, wrapper_html_options) do
|
|
25
|
+
yield
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
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
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def inline_inputs_div_wrapping(&block)
|
|
36
|
+
template.content_tag(:div, :class => "inline-inputs") do
|
|
37
|
+
yield
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
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"
|
|
54
|
+
# opts[:class] << "input"
|
|
55
|
+
opts[:class] << "error" if errors?
|
|
56
|
+
opts[:class] << "optional" if optional?
|
|
57
|
+
opts[:class] << "required" if required?
|
|
58
|
+
opts[:class] << "autofocus" if autofocus?
|
|
59
|
+
opts[:class] = opts[:class].join(' ')
|
|
60
|
+
|
|
61
|
+
opts[:id] ||= wrapper_dom_id
|
|
62
|
+
|
|
63
|
+
opts
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def prepended_input_wrapping(&block)
|
|
67
|
+
template.content_tag(:div, :class => 'input-prepend') do
|
|
68
|
+
yield
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
control_group_div_wrapping do
|
|
9
|
+
empty_label <<
|
|
10
|
+
hidden_field_html <<
|
|
11
|
+
input_div_wrapping(:block) do
|
|
12
|
+
label_with_nested_checkbox
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def label_html_options
|
|
18
|
+
new_class = [super[:class], "checkbox"].compact.join(" ")
|
|
19
|
+
super.merge(:class => new_class)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Need this for formatting to work.
|
|
23
|
+
def empty_label
|
|
24
|
+
template.content_tag(:label, '', :class => 'control-label') do end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module FormtasticBootstrap
|
|
2
|
+
module Inputs
|
|
3
|
+
class CheckBoxesInput < Formtastic::Inputs::CheckBoxesInput
|
|
4
|
+
include Base
|
|
5
|
+
include Base::Choices
|
|
6
|
+
|
|
7
|
+
def to_html
|
|
8
|
+
control_group_div_wrapping do
|
|
9
|
+
legend_html <<
|
|
10
|
+
hidden_field_for_all <<
|
|
11
|
+
input_div_wrapping do
|
|
12
|
+
collection.map { |choice|
|
|
13
|
+
choice_html(choice)
|
|
14
|
+
}.join("\n").html_safe
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def choice_html(choice)
|
|
20
|
+
template.content_tag(:label,
|
|
21
|
+
hidden_fields? ?
|
|
22
|
+
check_box_with_hidden_input(choice) :
|
|
23
|
+
check_box_without_hidden_input(choice) <<
|
|
24
|
+
choice_label(choice),
|
|
25
|
+
label_html_options.merge(:for => choice_input_dom_id(choice)).merge(choice_wrapping_html_options(choice))
|
|
26
|
+
)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def choice_wrapping_html_options(choice)
|
|
30
|
+
new_class = [super[:class], 'checkbox'].join(' ')
|
|
31
|
+
super.merge(:class => new_class)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|