formtastic-bootstrap 2.1.3 → 3.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +43 -56
- data/VERSION +1 -1
- data/lib/action_view/helpers/text_field_date_helper.rb +7 -7
- data/lib/formtastic-bootstrap/actions/base.rb +11 -6
- data/lib/formtastic-bootstrap/form_builder.rb +5 -5
- data/lib/formtastic-bootstrap/helpers.rb +1 -1
- data/lib/formtastic-bootstrap/helpers/actions_helper.rb +4 -4
- data/lib/formtastic-bootstrap/helpers/errors_helper.rb +1 -1
- data/lib/formtastic-bootstrap/helpers/fieldset_wrapper.rb +2 -2
- data/lib/formtastic-bootstrap/helpers/input_helper.rb +3 -3
- data/lib/formtastic-bootstrap/helpers/inputs_helper.rb +3 -3
- data/lib/formtastic-bootstrap/inputs.rb +19 -19
- data/lib/formtastic-bootstrap/inputs/base.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/base/errors.rb +2 -2
- data/lib/formtastic-bootstrap/inputs/base/hints.rb +3 -3
- data/lib/formtastic-bootstrap/inputs/base/html.rb +8 -2
- data/lib/formtastic-bootstrap/inputs/base/labelling.rb +6 -11
- data/lib/formtastic-bootstrap/inputs/base/stringish.rb +4 -4
- data/lib/formtastic-bootstrap/inputs/base/timeish.rb +24 -18
- data/lib/formtastic-bootstrap/inputs/base/wrapping.rb +30 -52
- data/lib/formtastic-bootstrap/inputs/boolean_input.rb +18 -10
- data/lib/formtastic-bootstrap/inputs/check_boxes_input.rb +19 -18
- data/lib/formtastic-bootstrap/inputs/email_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/number_input.rb +3 -3
- data/lib/formtastic-bootstrap/inputs/password_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/phone_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/radio_input.rb +19 -18
- data/lib/formtastic-bootstrap/inputs/range_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/search_input.rb +1 -1
- data/lib/formtastic-bootstrap/inputs/select_input.rb +17 -0
- data/lib/formtastic-bootstrap/inputs/text_input.rb +4 -4
- data/lib/formtastic-bootstrap/inputs/url_input.rb +1 -1
- data/lib/formtastic-bootstrap/version.rb +1 -1
- data/vendor/assets/stylesheets/formtastic-bootstrap.css +32 -0
- metadata +51 -55
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ecb19013ed0931f06bd003f1ea90049610323e95
|
4
|
+
data.tar.gz: 689d4e4702a9fe931cc3123291dada9d8df21d35
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5be322ff2419bc7915198e7d34bcdf98ff62843f6119c6f293ce87d799f33972e0fadfcb9dbd7d9bb10aa08dc0fca56c777612bc15c5ab20d1c3b74e55979049
|
7
|
+
data.tar.gz: 0b30ebf52df315ad4223bb91f28804c74161c2a59fe33d45723a752e7dc11c5a1d330d1b237e1023e737424038e6c4f6b291fa2e7f0d1ea758419fc910fe8243
|
data/README.md
CHANGED
@@ -8,7 +8,27 @@ You can follow [FormBoot on twitter](http://twitter.com/FormBoot) for update ann
|
|
8
8
|
|
9
9
|
### Dependencies
|
10
10
|
|
11
|
-
|
11
|
+
This version of Formtastic Bootstrap should support the following:
|
12
|
+
|
13
|
+
*Bootstrap*
|
14
|
+
|
15
|
+
* Bootstrap 3.x
|
16
|
+
|
17
|
+
*Rails*
|
18
|
+
|
19
|
+
* Rails 3.2.x
|
20
|
+
* Rails 4.0.x
|
21
|
+
|
22
|
+
*Formtastic*
|
23
|
+
|
24
|
+
* Formtastic 2.2.x
|
25
|
+
* Formtastic 2.3.x
|
26
|
+
|
27
|
+
*Ruby*
|
28
|
+
|
29
|
+
* 1.9.2
|
30
|
+
* 1.9.3
|
31
|
+
* 2.0.x
|
12
32
|
|
13
33
|
#### Installation
|
14
34
|
|
@@ -43,58 +63,12 @@ THIS SECTION IS OUT OF DATE.
|
|
43
63
|
|
44
64
|
### Overview
|
45
65
|
|
46
|
-
In general, Formtastic creates very verbose HTML whereas
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
<%= semantic_form_for @post do |f| %>
|
52
|
-
<%= f.semantic_errors %>
|
53
|
-
<%= f.inputs do %>
|
54
|
-
<%= f.input :title, :hint => "This is the title!" %>
|
55
|
-
<% end %>
|
56
|
-
<%= f.actions do %>
|
57
|
-
<%= f.action :submit %>
|
58
|
-
<% end %>
|
59
|
-
<% end %>
|
66
|
+
In general, Formtastic creates very verbose HTML whereas
|
67
|
+
Bootstrap expects (ever) simpler HTML. Every attempt has been
|
68
|
+
made to generate the HTML expected by Bootstrap while still
|
69
|
+
generating the rich HTML provided by Formtastic. When there
|
70
|
+
is a conflict, Bootstrap wins.
|
60
71
|
|
61
|
-
#### Formtastic
|
62
|
-
|
63
|
-
<form accept-charset="UTF-8" action="/posts" class="formtastic post" id="new_post" method="post">
|
64
|
-
<fieldset class="inputs">
|
65
|
-
<ol>
|
66
|
-
<li class="string input optional stringish" id="post_title_input">
|
67
|
-
<label class=" label" for="post_title">Title</label>
|
68
|
-
<input id="post_title" maxlength="255" name="post[title]" type="text" value="" />
|
69
|
-
<p class="inline-hints">This is the title!</p>
|
70
|
-
</li>
|
71
|
-
</ol>
|
72
|
-
</fieldset>
|
73
|
-
<fieldset class="buttons">
|
74
|
-
<ol>
|
75
|
-
<li class="commit button">
|
76
|
-
<input class="create" name="commit" type="submit" value="Create Post" />
|
77
|
-
</li>
|
78
|
-
</ol>
|
79
|
-
</fieldset>
|
80
|
-
</form>
|
81
|
-
|
82
|
-
#### Formtastic Bootstrap
|
83
|
-
|
84
|
-
<form accept-charset="UTF-8" action="/posts" class="formtastic post" id="new_post" method="post">
|
85
|
-
<fieldset class="inputs">
|
86
|
-
<div class="string clearfix optional stringish" id="post_title_input">
|
87
|
-
<label class="" for="post_title">Title</label>
|
88
|
-
<div class="input">
|
89
|
-
<input id="post_title" maxlength="255" name="post[title]" type="text" value="" />
|
90
|
-
<span class="help-inline">This is the title!</span>
|
91
|
-
</div>
|
92
|
-
</div>
|
93
|
-
</fieldset>
|
94
|
-
<div class="actions">
|
95
|
-
<input class="btn create commit" name="commit" type="submit" value="Create Post" />
|
96
|
-
</div>
|
97
|
-
</form>
|
98
72
|
|
99
73
|
### Major Difference in Behavior
|
100
74
|
|
@@ -114,7 +88,10 @@ The gem also provides some "shim" CSS where Bootstrap is missing styles provided
|
|
114
88
|
|
115
89
|
### Other
|
116
90
|
|
117
|
-
A lot of the code (especially the test suite) was copied
|
91
|
+
A lot of the code (especially the test suite) was copied
|
92
|
+
over from Formtastic and then beaten into submission. I'm
|
93
|
+
sure you'll find some ugliness in there. In general, I
|
94
|
+
mimicked the Formtastic code structure as much as possible.
|
118
95
|
|
119
96
|
In particular:
|
120
97
|
|
@@ -130,7 +107,7 @@ In particular:
|
|
130
107
|
Contributions are welcome!
|
131
108
|
|
132
109
|
* Formtastic's <tt>:country</tt> has not yet been implemented.
|
133
|
-
*
|
110
|
+
* I'm sure there's lots ...
|
134
111
|
|
135
112
|
## Usage
|
136
113
|
|
@@ -156,6 +133,16 @@ To create an Appended Text field, use the ```:append``` option. This works on a
|
|
156
133
|
<% end %>
|
157
134
|
<% end %>
|
158
135
|
|
136
|
+
#### Appended Content
|
137
|
+
To add appended elements that are not contained within an add-on span
|
138
|
+
use the ```:append_content``` or ```:prepend_content``` option.
|
139
|
+
|
140
|
+
<%= semantic_form_for @user do |f| %>
|
141
|
+
<%= f.inputs do %>
|
142
|
+
<%= f.input :handle, :append_content => content_tag(:a, "Click Here", :class => 'btn') %>
|
143
|
+
<% end %>
|
144
|
+
<% end %>
|
145
|
+
|
159
146
|
## Contributing
|
160
147
|
|
161
148
|
### Contributors
|
@@ -198,16 +185,16 @@ Source contributions are very welcome! Most of the recent work on this package
|
|
198
185
|
* As rich functionally as their Rails counterparts.
|
199
186
|
* Extract into a standalone gem.
|
200
187
|
* Tests
|
188
|
+
* Get them passing!
|
201
189
|
* Refactor
|
202
190
|
* More -- See if I'm making sure the Bootstrap classes are present.
|
203
191
|
* Documentation
|
204
192
|
* Refactor :boolean to use common "choices" code (if possible.) (Not sure it is.)
|
205
193
|
* Boostrap
|
206
|
-
* Ask why they use 'inline-inputs' class instead of a fieldset tag.
|
207
194
|
* Why 'help-inline' and 'help-block' when they could have done p.help and span.help?
|
208
195
|
|
209
196
|
|
210
197
|
## Copyright
|
211
198
|
|
212
|
-
Copyright (c)
|
199
|
+
Copyright (c) 2013 Matthew Bellantoni. See LICENSE.txt for further details.
|
213
200
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.0.0.rc.1
|
@@ -40,8 +40,8 @@ module ActionView
|
|
40
40
|
@options[:discard_day] ||= true if @options[:discard_month] || !order.include?(:day)
|
41
41
|
|
42
42
|
# Save this so we can restore it.
|
43
|
-
original_datetime_separator_separator = @options[:datetime_separator]
|
44
|
-
original_date_separator = @options[:date_separator]
|
43
|
+
original_datetime_separator_separator = @options[:datetime_separator]
|
44
|
+
original_date_separator = @options[:date_separator]
|
45
45
|
|
46
46
|
@options[:datetime_separator] = ""
|
47
47
|
@options[:date_separator] = " "
|
@@ -71,8 +71,8 @@ module ActionView
|
|
71
71
|
|
72
72
|
# Save this so we can restore it.
|
73
73
|
original_datetime_separator = @options[:datetime_separator]
|
74
|
-
original_time_separator = @options[:time_separator]
|
75
|
-
original_date_separator = @options[:date_separator]
|
74
|
+
original_time_separator = @options[:time_separator]
|
75
|
+
original_date_separator = @options[:date_separator]
|
76
76
|
|
77
77
|
@options[:datetime_separator] = ''
|
78
78
|
@options[:time_separator] = ':'
|
@@ -85,7 +85,7 @@ module ActionView
|
|
85
85
|
|
86
86
|
build_text_field_from_types(order).tap do
|
87
87
|
# Restore.
|
88
|
-
@options[:datetime_separator] = original_datetime_separator
|
88
|
+
@options[:datetime_separator] = original_datetime_separator
|
89
89
|
@options[:date_separator] = original_date_separator
|
90
90
|
@options[:time_separator] = original_time_separator
|
91
91
|
end
|
@@ -131,7 +131,7 @@ module ActionView
|
|
131
131
|
input = ''
|
132
132
|
order.reverse.each do |type|
|
133
133
|
separator = separator(type) unless type == order.first # don't add on last field
|
134
|
-
input.insert(0, separator.to_s + send("text_field_#{type}").to_s)
|
134
|
+
input.insert(0, separator.to_s + send("text_field_#{type}").to_s)
|
135
135
|
end
|
136
136
|
text_field_tag("", input.html_safe, @html_options).html_safe
|
137
137
|
end
|
@@ -163,4 +163,4 @@ module ActionView
|
|
163
163
|
include TextFieldDateHelper
|
164
164
|
|
165
165
|
end
|
166
|
-
end
|
166
|
+
end
|
@@ -4,19 +4,24 @@ module FormtasticBootstrap
|
|
4
4
|
|
5
5
|
# Bootstrap doesn't have wrappers.
|
6
6
|
def wrapper(&block)
|
7
|
-
# TODO Detect if user passed wrapper_html_options and issue
|
8
|
-
# a warning that they're ignored. (See the original in
|
9
|
-
# Formtastic.)
|
10
7
|
template.capture(&block)
|
11
8
|
end
|
12
9
|
|
10
|
+
# Default button class
|
11
|
+
def default_wrapper_classes
|
12
|
+
["btn"]
|
13
|
+
end
|
14
|
+
|
15
|
+
# :wrapper_html member :class is prefixed with btn
|
16
|
+
# :button_html member :class is all encompassing
|
13
17
|
def default_button_html
|
14
|
-
{
|
18
|
+
{
|
15
19
|
:accesskey => accesskey,
|
16
|
-
:class =>
|
20
|
+
:class => wrapper_class.strip,
|
21
|
+
:id => wrapper_id
|
17
22
|
}
|
18
23
|
end
|
19
24
|
|
20
25
|
end
|
21
26
|
end
|
22
|
-
end
|
27
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module FormtasticBootstrap
|
2
|
-
|
2
|
+
|
3
3
|
class FormBuilder < Formtastic::FormBuilder
|
4
4
|
|
5
5
|
configure :default_inline_error_class, 'help-inline'
|
@@ -11,18 +11,18 @@ module FormtasticBootstrap
|
|
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
|
@@ -38,4 +38,4 @@ module FormtasticBootstrap
|
|
38
38
|
|
39
39
|
end
|
40
40
|
|
41
|
-
end
|
41
|
+
end
|
@@ -9,7 +9,7 @@ module FormtasticBootstrap
|
|
9
9
|
# autoload :FormHelper, 'formtastic/helpers/form_helper'
|
10
10
|
autoload :InputHelper, 'formtastic-bootstrap/helpers/input_helper'
|
11
11
|
autoload :InputsHelper, 'formtastic-bootstrap/helpers/inputs_helper'
|
12
|
-
# autoload :LabelHelper, 'formtastic/helpers/label_helper'
|
12
|
+
# autoload :LabelHelper, 'formtastic/helpers/label_helper'
|
13
13
|
# autoload :SemanticFormHelper, 'formtastic/helpers/semantic_form_helper'
|
14
14
|
# autoload :Reflection, 'formtastic/helpers/reflection'
|
15
15
|
end
|
@@ -4,12 +4,12 @@ module FormtasticBootstrap
|
|
4
4
|
|
5
5
|
include Formtastic::Helpers::ActionsHelper
|
6
6
|
include FormtasticBootstrap::Helpers::FieldsetWrapper
|
7
|
-
|
7
|
+
|
8
8
|
def actions(*args, &block)
|
9
9
|
|
10
10
|
html_options = args.extract_options!
|
11
11
|
html_options[:class] ||= "form-actions"
|
12
|
-
|
12
|
+
|
13
13
|
if block_given?
|
14
14
|
field_set_and_list_wrapping(html_options, &block)
|
15
15
|
else
|
@@ -18,7 +18,7 @@ module FormtasticBootstrap
|
|
18
18
|
field_set_and_list_wrapping(html_options, contents)
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
end
|
23
23
|
end
|
24
|
-
end
|
24
|
+
end
|
@@ -59,7 +59,7 @@ module FormtasticBootstrap
|
|
59
59
|
end
|
60
60
|
|
61
61
|
template.content_tag(:div, html_options) do
|
62
|
-
template.content_tag(:
|
62
|
+
template.content_tag(:a, "×".html_safe, :class => "close", "data-dismiss" => "alert") +
|
63
63
|
template.content_tag(:ul, {:class => "error-list"}) do
|
64
64
|
Formtastic::Util.html_safe(full_errors.map { |error| template.content_tag(:li, Formtastic::Util.html_safe(error)) }.join)
|
65
65
|
end
|
@@ -5,7 +5,7 @@ module FormtasticBootstrap
|
|
5
5
|
def inputs(*args, &block)
|
6
6
|
wrap_it = @already_in_an_inputs_block ? true : false
|
7
7
|
@already_in_an_inputs_block = true
|
8
|
-
|
8
|
+
|
9
9
|
title = field_set_title_from_args(*args)
|
10
10
|
html_options = args.extract_options!
|
11
11
|
html_options[:class] ||= "inputs"
|
@@ -24,11 +24,11 @@ module FormtasticBootstrap
|
|
24
24
|
field_set_and_list_wrapping(*((args << html_options) << contents))
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
@already_in_an_inputs_block = false
|
29
29
|
out
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
33
33
|
end
|
34
|
-
end
|
34
|
+
end
|
@@ -2,33 +2,33 @@ module FormtasticBootstrap
|
|
2
2
|
module Inputs
|
3
3
|
|
4
4
|
autoload :Base, "formtastic-bootstrap/inputs/base"
|
5
|
-
# autoload :Basic
|
6
|
-
autoload :BooleanInput, "formtastic-bootstrap/inputs/boolean_input"
|
5
|
+
# autoload :Basic
|
6
|
+
autoload :BooleanInput, "formtastic-bootstrap/inputs/boolean_input"
|
7
7
|
autoload :CheckBoxesInput, "formtastic-bootstrap/inputs/check_boxes_input"
|
8
|
-
autoload :CountryInput, "formtastic-bootstrap/inputs/country_input"
|
9
|
-
autoload :DateInput, "formtastic-bootstrap/inputs/date_input"
|
10
|
-
autoload :DatePickerInput, "formtastic-bootstrap/inputs/date_picker_input"
|
11
|
-
autoload :DatetimePickerInput, "formtastic-bootstrap/inputs/datetime_picker_input"
|
8
|
+
autoload :CountryInput, "formtastic-bootstrap/inputs/country_input"
|
9
|
+
autoload :DateInput, "formtastic-bootstrap/inputs/date_input"
|
10
|
+
autoload :DatePickerInput, "formtastic-bootstrap/inputs/date_picker_input"
|
11
|
+
autoload :DatetimePickerInput, "formtastic-bootstrap/inputs/datetime_picker_input"
|
12
12
|
autoload :DateSelectInput, "formtastic-bootstrap/inputs/date_select_input"
|
13
|
-
autoload :DatetimeInput, "formtastic-bootstrap/inputs/datetime_input"
|
14
|
-
autoload :DatetimeSelectInput, "formtastic-bootstrap/inputs/datetime_select_input"
|
15
|
-
autoload :EmailInput, "formtastic-bootstrap/inputs/email_input"
|
16
|
-
autoload :FileInput, "formtastic-bootstrap/inputs/file_input"
|
17
|
-
autoload :HiddenInput, "formtastic-bootstrap/inputs/hidden_input"
|
18
|
-
autoload :NumberInput, "formtastic-bootstrap/inputs/number_input"
|
13
|
+
autoload :DatetimeInput, "formtastic-bootstrap/inputs/datetime_input"
|
14
|
+
autoload :DatetimeSelectInput, "formtastic-bootstrap/inputs/datetime_select_input"
|
15
|
+
autoload :EmailInput, "formtastic-bootstrap/inputs/email_input"
|
16
|
+
autoload :FileInput, "formtastic-bootstrap/inputs/file_input"
|
17
|
+
autoload :HiddenInput, "formtastic-bootstrap/inputs/hidden_input"
|
18
|
+
autoload :NumberInput, "formtastic-bootstrap/inputs/number_input"
|
19
19
|
# autoload :NumericInput # TODO Where does Formtastic actually define this?
|
20
|
-
autoload :PasswordInput, "formtastic-bootstrap/inputs/password_input"
|
21
|
-
autoload :PhoneInput, "formtastic-bootstrap/inputs/phone_input"
|
22
|
-
autoload :RadioInput, "formtastic-bootstrap/inputs/radio_input"
|
23
|
-
autoload :RangeInput, "formtastic-bootstrap/inputs/range_input"
|
24
|
-
autoload :SearchInput, "formtastic-bootstrap/inputs/search_input"
|
25
|
-
autoload :SelectInput, "formtastic-bootstrap/inputs/select_input"
|
20
|
+
autoload :PasswordInput, "formtastic-bootstrap/inputs/password_input"
|
21
|
+
autoload :PhoneInput, "formtastic-bootstrap/inputs/phone_input"
|
22
|
+
autoload :RadioInput, "formtastic-bootstrap/inputs/radio_input"
|
23
|
+
autoload :RangeInput, "formtastic-bootstrap/inputs/range_input"
|
24
|
+
autoload :SearchInput, "formtastic-bootstrap/inputs/search_input"
|
25
|
+
autoload :SelectInput, "formtastic-bootstrap/inputs/select_input"
|
26
26
|
autoload :StringInput, "formtastic-bootstrap/inputs/string_input"
|
27
27
|
autoload :TextInput, "formtastic-bootstrap/inputs/text_input"
|
28
28
|
autoload :TimeInput, "formtastic-bootstrap/inputs/time_input"
|
29
29
|
# autoload :TimePickerInput # TODO Come back to this.
|
30
30
|
autoload :TimeSelectInput, "formtastic-bootstrap/inputs/time_select_input"
|
31
|
-
autoload :TimeZoneInput, "formtastic-bootstrap/inputs/time_zone_input"
|
31
|
+
autoload :TimeZoneInput, "formtastic-bootstrap/inputs/time_zone_input"
|
32
32
|
# autoload :Timeish # This seems like a mistake.
|
33
33
|
autoload :UrlInput, "formtastic-bootstrap/inputs/url_input"
|
34
34
|
|
@@ -27,7 +27,7 @@ module FormtasticBootstrap
|
|
27
27
|
# end
|
28
28
|
# template.content_tag(:ul, Formtastic::Util.html_safe(list_elements.join("\n")), :class => error_class)
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
def error_first_html(inline_or_block = :inline)
|
32
32
|
error_class = if inline_or_block == :inline
|
33
33
|
options[:error_class] || builder.default_inline_error_class
|
@@ -45,4 +45,4 @@ module FormtasticBootstrap
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
end
|
48
|
-
end
|
48
|
+
end
|