bootstrap_forms 2.0.6 → 2.0.8
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/Gemfile +2 -3
- data/README.markdown +14 -0
- data/bootstrap_forms.gemspec +1 -1
- data/config/locales/en.yml +1 -1
- data/config/locales/it.yml +1 -1
- data/lib/bootstrap_forms.rb +1 -1
- data/lib/bootstrap_forms/engine.rb +3 -2
- data/lib/bootstrap_forms/helpers.rb +2 -1
- data/lib/bootstrap_forms/helpers/nested_form_helper.rb +30 -0
- data/lib/bootstrap_forms/helpers/wrappers.rb +34 -17
- data/spec/support/shared_context.rb +12 -4
- metadata +5 -4
data/Gemfile
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
source
|
2
|
-
|
3
|
-
gemspec
|
1
|
+
source :rubygems
|
2
|
+
gemspec
|
data/README.markdown
CHANGED
@@ -183,6 +183,11 @@ You can add as many options to any form helper tag. If they are interpreted by B
|
|
183
183
|
<td>Customize the field's label. Pass false to have no label.</td>
|
184
184
|
<td><tt>= f.text_field :name, :label => 'Other name'</td></td>
|
185
185
|
</tr>
|
186
|
+
<tr>
|
187
|
+
<th>control_group</th>
|
188
|
+
<td>Pass false to remove the control group and controls HTML, leaving only the label and input, wrapped in a plain div</td>
|
189
|
+
<td><tt>= f.text_field :name, :control_group => false</tt></td>
|
190
|
+
</tr>
|
186
191
|
</table>
|
187
192
|
|
188
193
|
Internationalization/Custom Errors
|
@@ -201,6 +206,15 @@ en:
|
|
201
206
|
|
202
207
|
Obviously you can also change to a different `lang.yml` file and use the same syntax.
|
203
208
|
|
209
|
+
Nested Forms
|
210
|
+
------------
|
211
|
+
Bootstrap Forms works with [Ryan Bates' nested_form](https://github.com/ryanb/nested_form) out of the box. Just add `nested_form` to you Gemfile and `bootstrap_forms` will automatically add a builder for you:
|
212
|
+
|
213
|
+
```haml
|
214
|
+
= bootstrap_nested_form_for @model do |f|
|
215
|
+
|
216
|
+
```
|
217
|
+
|
204
218
|
Contributing
|
205
219
|
------------
|
206
220
|
I'm pretty dam active on github. Fork and submit a pull request. Most of my pull requests are merged the same day. Make sure you:
|
data/bootstrap_forms.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path('../lib', __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = 'bootstrap_forms'
|
6
|
-
s.version = '2.0.
|
6
|
+
s.version = '2.0.8'
|
7
7
|
s.author = 'Seth Vargo'
|
8
8
|
s.email = 'sethvargo@gmail.com'
|
9
9
|
s.homepage = 'https://github.com/sethvargo/bootstrap_forms'
|
data/config/locales/en.yml
CHANGED
data/config/locales/it.yml
CHANGED
data/lib/bootstrap_forms.rb
CHANGED
@@ -5,7 +5,8 @@ module BootstrapForms
|
|
5
5
|
ActiveSupport.on_load(:action_view) do
|
6
6
|
include BootstrapForms::Helpers::FormHelper
|
7
7
|
include BootstrapForms::Helpers::FormTagHelper
|
8
|
-
|
8
|
+
include BootstrapForms::Helpers::NestedFormHelper
|
9
|
+
|
9
10
|
# Do not wrap errors in the extra div
|
10
11
|
::ActionView::Base.field_error_proc = Proc.new do |html_tag, instance_tag|
|
11
12
|
html_tag
|
@@ -14,4 +15,4 @@ module BootstrapForms
|
|
14
15
|
end
|
15
16
|
end
|
16
17
|
end
|
17
|
-
end
|
18
|
+
end
|
@@ -2,6 +2,7 @@ module BootstrapForms
|
|
2
2
|
module Helpers
|
3
3
|
autoload :FormHelper, 'bootstrap_forms/helpers/form_helper'
|
4
4
|
autoload :FormTagHelper, 'bootstrap_forms/helpers/form_tag_helper'
|
5
|
+
autoload :NestedFormHelper, 'bootstrap_forms/helpers/nested_form_helper'
|
5
6
|
autoload :Wrappers, 'bootstrap_forms/helpers/wrappers'
|
6
7
|
end
|
7
|
-
end
|
8
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
begin
|
2
|
+
require 'nested_form/builder_mixin'
|
3
|
+
|
4
|
+
module NestedForm
|
5
|
+
class TwitterBootstrapBuilder < ::BootstrapForms::FormBuilder
|
6
|
+
include ::NestedForm::BuilderMixin
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module BootstrapForms
|
11
|
+
module Helpers
|
12
|
+
module NestedFormHelper
|
13
|
+
def bootstrap_nested_form_for(*args, &block)
|
14
|
+
options = args.extract_options!.reverse_merge(:builder => NestedForm::TwitterBootstrapBuilder)
|
15
|
+
form_for(*(args << options), &block) << after_nested_form_callbacks
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
rescue LoadError => e
|
21
|
+
module BootstrapForms
|
22
|
+
module Helpers
|
23
|
+
module NestedFormHelper
|
24
|
+
def bootstrap_nested_form_for(*args, &block)
|
25
|
+
raise 'nested_form was not found. Is it in your Gemfile?'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -10,12 +10,16 @@ module BootstrapForms
|
|
10
10
|
@field_options[:error] = field_errors
|
11
11
|
end
|
12
12
|
|
13
|
-
klasses = [
|
13
|
+
klasses = []
|
14
|
+
klasses << 'control-group' unless @field_options[:control_group] == false
|
14
15
|
klasses << 'error' if @field_options[:error]
|
15
16
|
klasses << 'success' if @field_options[:success]
|
16
17
|
klasses << 'warning' if @field_options[:warning]
|
17
18
|
|
18
|
-
|
19
|
+
control_group_options = {}
|
20
|
+
control_group_options[:class] = klasses if !klasses.empty?
|
21
|
+
|
22
|
+
content_tag(:div, control_group_options, &block)
|
19
23
|
end
|
20
24
|
|
21
25
|
def error_string
|
@@ -34,26 +38,39 @@ module BootstrapForms
|
|
34
38
|
end
|
35
39
|
|
36
40
|
def input_div(&block)
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
content_options = {}
|
42
|
+
content_options[:class] = 'controls'
|
43
|
+
if @field_options[:control_group] == false
|
44
|
+
@field_options.delete :control_group
|
45
|
+
write_input_div(&block)
|
46
|
+
else
|
47
|
+
content_tag(:div, :class => 'controls') do
|
48
|
+
write_input_div(&block)
|
45
49
|
end
|
46
50
|
end
|
47
51
|
end
|
48
52
|
|
53
|
+
def write_input_div(&block)
|
54
|
+
if @field_options[:append] || @field_options[:prepend] || @field_options[:append_button]
|
55
|
+
klass = []
|
56
|
+
klass << 'input-prepend' if @field_options[:prepend]
|
57
|
+
klass << 'input-append' if @field_options[:append] || @field_options[:append_button]
|
58
|
+
content_tag(:div, :class => klass, &block)
|
59
|
+
else
|
60
|
+
yield if block_given?
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
49
64
|
def label_field(&block)
|
50
65
|
if @field_options[:label] == '' || @field_options[:label] == false
|
51
66
|
return ''.html_safe
|
52
67
|
else
|
68
|
+
label_options = {}
|
69
|
+
label_options[:class] = 'control-label' unless @field_options[:control_group] == false
|
53
70
|
if respond_to?(:object)
|
54
|
-
label(@name, block_given? ? block : @field_options[:label],
|
71
|
+
label(@name, block_given? ? block : @field_options[:label], label_options)
|
55
72
|
else
|
56
|
-
label_tag(@name, block_given? ? block : @field_options[:label],
|
73
|
+
label_tag(@name, block_given? ? block : @field_options[:label], label_options)
|
57
74
|
end
|
58
75
|
end
|
59
76
|
end
|
@@ -68,7 +85,7 @@ module BootstrapForms
|
|
68
85
|
%w(help_inline error success warning help_block append append_button prepend).each do |method_name|
|
69
86
|
define_method(method_name) do |*args|
|
70
87
|
return '' unless value = @field_options[method_name.to_sym]
|
71
|
-
|
88
|
+
|
72
89
|
escape = true
|
73
90
|
tag_options = {}
|
74
91
|
case method_name
|
@@ -82,15 +99,15 @@ module BootstrapForms
|
|
82
99
|
element = :button
|
83
100
|
button_options = value
|
84
101
|
value = ''
|
85
|
-
|
102
|
+
|
86
103
|
if button_options.has_key? :icon
|
87
104
|
value << content_tag(:i, '', { :class => button_options.delete(:icon) })
|
88
105
|
value << ' '
|
89
106
|
escape = false
|
90
107
|
end
|
91
|
-
|
108
|
+
|
92
109
|
value << button_options.delete(:label)
|
93
|
-
|
110
|
+
|
94
111
|
tag_options[:type] = 'button'
|
95
112
|
tag_options[:class] = 'btn'
|
96
113
|
tag_options.merge! button_options
|
@@ -107,7 +124,7 @@ module BootstrapForms
|
|
107
124
|
end
|
108
125
|
|
109
126
|
def objectify_options(options)
|
110
|
-
super.except(:label, :help_inline, :error, :success, :warning, :help_block, :prepend, :append, :append_button)
|
127
|
+
super.except(:label, :help_inline, :error, :success, :warning, :help_block, :prepend, :append, :append_button, :control_group)
|
111
128
|
end
|
112
129
|
end
|
113
130
|
end
|
@@ -142,22 +142,30 @@ shared_examples 'a bootstrap form' do
|
|
142
142
|
it 'prepends and appends passed text' do
|
143
143
|
@builder.text_field(:name, :append => '@', :prepend => '#').should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-prepend input-append\"><span class=\"add-on\">\#</span><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><span class=\"add-on\">@</span></div></div></div>"
|
144
144
|
end
|
145
|
-
|
145
|
+
|
146
146
|
it 'appends button with default values' do
|
147
147
|
@builder.text_field(:name, :append_button => { :label => 'button label' }).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><button class=\"btn\" type=\"button\">button label</button></div></div></div>"
|
148
148
|
end
|
149
|
-
|
149
|
+
|
150
150
|
it 'appends button and overrides class and type' do
|
151
151
|
@builder.text_field(:name, :append_button => { :label => 'Danger!', :class => 'btn btn-danger', :type => 'submit' }).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><button class=\"btn btn-danger\" type=\"submit\">Danger!</button></div></div></div>"
|
152
152
|
end
|
153
|
-
|
153
|
+
|
154
154
|
it 'appends button with custom attributes' do
|
155
155
|
@builder.text_field(:name, :append_button => { :label => 'button label', :data => { :custom_1 => 'value 1', :custom_2 => 'value 2' } }).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><button class=\"btn\" data-custom-1=\"value 1\" data-custom-2=\"value 2\" type=\"button\">button label</button></div></div></div>"
|
156
156
|
end
|
157
|
-
|
157
|
+
|
158
158
|
it 'appends button with an icon' do
|
159
159
|
@builder.text_field(:name, :append_button => { :label => 'button label', :icon => 'icon-plus icon-white' }).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><div class=\"input-append\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /><button class=\"btn\" type=\"button\"><i class=\"icon-plus icon-white\"></i> button label</button></div></div></div>"
|
160
160
|
end
|
161
|
+
|
162
|
+
it "does not add control group" do
|
163
|
+
@builder.text_field(:name, :control_group => false).should == "<div><label for=\"item_name\">Name</label><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /></div>"
|
164
|
+
end
|
165
|
+
|
166
|
+
it "does not add control group attribute to html if :control_group is true" do
|
167
|
+
@builder.text_field(:name, :control_group => true).should == "<div class=\"control-group\"><label class=\"control-label\" for=\"item_name\">Name</label><div class=\"controls\"><input id=\"item_name\" name=\"item[name]\" size=\"30\" type=\"text\" /></div></div>"
|
168
|
+
end
|
161
169
|
end
|
162
170
|
|
163
171
|
context 'label option' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bootstrap_forms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec-rails
|
@@ -132,6 +132,7 @@ files:
|
|
132
132
|
- lib/bootstrap_forms/helpers.rb
|
133
133
|
- lib/bootstrap_forms/helpers/form_helper.rb
|
134
134
|
- lib/bootstrap_forms/helpers/form_tag_helper.rb
|
135
|
+
- lib/bootstrap_forms/helpers/nested_form_helper.rb
|
135
136
|
- lib/bootstrap_forms/helpers/wrappers.rb
|
136
137
|
- spec/dummy/Rakefile
|
137
138
|
- spec/dummy/app/assets/javascripts/application.js
|
@@ -195,7 +196,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
196
|
version: '0'
|
196
197
|
segments:
|
197
198
|
- 0
|
198
|
-
hash:
|
199
|
+
hash: -810555499159365620
|
199
200
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
201
|
none: false
|
201
202
|
requirements:
|
@@ -204,7 +205,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
205
|
version: '0'
|
205
206
|
segments:
|
206
207
|
- 0
|
207
|
-
hash:
|
208
|
+
hash: -810555499159365620
|
208
209
|
requirements: []
|
209
210
|
rubyforge_project:
|
210
211
|
rubygems_version: 1.8.24
|