bootstrap_it 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/bootstrap_it.gemspec +9 -8
- data/lib/bootstrap_it/config.rb +1 -1
- data/lib/bootstrap_it/engine.rb +1 -1
- data/lib/bootstrap_it/version.rb +1 -1
- data/lib/bootstrap_it/view_helpers.rb +4 -1
- data/lib/bootstrap_it/view_helpers/breadcrumb.rb +3 -2
- data/lib/bootstrap_it/view_helpers/button.rb +47 -39
- data/lib/bootstrap_it/view_helpers/button_group.rb +23 -4
- data/lib/bootstrap_it/view_helpers/dropdown_menu.rb +6 -5
- data/lib/bootstrap_it/view_helpers/form.rb +40 -41
- data/lib/bootstrap_it/view_helpers/grid.rb +9 -5
- data/lib/bootstrap_it/view_helpers/icon.rb +4 -2
- data/lib/bootstrap_it/view_helpers/list.rb +5 -5
- data/lib/bootstrap_it/view_helpers/misc.rb +37 -36
- data/lib/bootstrap_it/view_helpers/mixin.rb +16 -24
- data/lib/bootstrap_it/view_helpers/nav.rb +23 -21
- data/lib/bootstrap_it/view_helpers/pagination.rb +8 -6
- data/lib/bootstrap_it/view_helpers/table.rb +6 -10
- data/lib/bootstrap_it/view_helpers/text.rb +10 -8
- data/spec/spec_helper.rb +5 -2
- data/spec/support/example_groups/view_helpers_example_group.rb +4 -5
- data/spec/view_helpers/breadcrumb_spec.rb +8 -4
- data/spec/view_helpers/button_group_spec.rb +4 -4
- data/spec/view_helpers/button_spec.rb +25 -23
- data/spec/view_helpers/button_toolbar_spec.rb +3 -3
- data/spec/view_helpers/dropdown_menu_spec.rb +9 -9
- data/spec/view_helpers/form_spec.rb +4 -4
- data/spec/view_helpers/grid_spec.rb +5 -5
- data/spec/view_helpers/icon_spec.rb +2 -2
- data/spec/view_helpers/list_spec.rb +9 -9
- data/spec/view_helpers/misc_spec.rb +11 -11
- data/spec/view_helpers/mixin_spec.rb +49 -38
- data/spec/view_helpers/nav_spec.rb +14 -10
- data/spec/view_helpers/pagination_spec.rb +6 -6
- data/spec/view_helpers/table_spec.rb +9 -10
- data/spec/view_helpers/text_spec.rb +3 -3
- data/spec/views/examples_spec.rb +49 -36
- metadata +31 -32
- data/lib/bootstrap_it/view_helpers/button_toolbar.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5774b34f81adf31f3b4b049ecd85fe339f03a02
|
4
|
+
data.tar.gz: 96cf31d8278893dee53b19a990886a53b2a94b8b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4dc4b603556ec14825b124c335dcbeb9059cc0326ccf4409aca87ef97ff1d366570d8f87329014a440d73d18dff9ae46cde71543951c033689063feebcdd5d97
|
7
|
+
data.tar.gz: d5b303cc16719485b8d65cf742f3df733e33b7fd484b09807a3d0702b15666b9892da8f559c06cf26372a8faf2056203d72868510169fd4b1936737c6a0cd483
|
data/README.md
CHANGED
@@ -57,7 +57,7 @@ Full Rails-style configuration is not implemented yet. So, to change config opti
|
|
57
57
|
|
58
58
|
## Bootstrap assets
|
59
59
|
|
60
|
-
Now, you have two choises: at first, CDN source of CSS and JavaScript. And second is minified versions of assets, downloaded from official sites. Third options - compile from LESS source will be available soon. So, you can configure bootstrap_it in `application.rb`
|
60
|
+
Now, you have two choises: at first, CDN source of CSS and JavaScript. And second is minified versions of assets, downloaded from official sites. Third options - compile from LESS source will be available soon. So, you can configure bootstrap_it in `application.rb` like this:
|
61
61
|
|
62
62
|
```ruby
|
63
63
|
BootstrapIt.config.assets_source = :cdn # or :precompiled for minified version
|
@@ -553,6 +553,11 @@ This and all other stuff are in development.
|
|
553
553
|
|
554
554
|
# Changes
|
555
555
|
|
556
|
+
`0.1.2`
|
557
|
+
* switched to wrap_it 0.2.0
|
558
|
+
* code refactoring
|
559
|
+
* testing improvements
|
560
|
+
|
556
561
|
`0.1.1`
|
557
562
|
* fixed: bootstrap version uninitialized constant
|
558
563
|
|
data/bootstrap_it.gemspec
CHANGED
@@ -19,15 +19,16 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.
|
23
|
-
spec.
|
22
|
+
spec.add_runtime_dependency 'rails', '~> 4.0'
|
23
|
+
spec.add_runtime_dependency 'wrap_it', '~> 0.2'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.3'
|
26
|
-
spec.add_development_dependency 'rake'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.1'
|
27
27
|
spec.add_development_dependency 'redcarpet', '~> 1.17'
|
28
|
-
spec.add_development_dependency 'yard', '~> 0.7
|
29
|
-
spec.add_development_dependency 'rspec'
|
30
|
-
spec.add_development_dependency 'rspec-rails'
|
31
|
-
spec.add_development_dependency 'combustion'
|
32
|
-
spec.add_development_dependency 'capybara'
|
28
|
+
spec.add_development_dependency 'yard', '~> 0.7'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 2.14'
|
30
|
+
spec.add_development_dependency 'rspec-rails', '~> 2.14'
|
31
|
+
spec.add_development_dependency 'combustion', '~> 0.5'
|
32
|
+
# spec.add_development_dependency 'capybara'
|
33
|
+
spec.add_development_dependency 'rspec-html-matchers', '~> 0.4'
|
33
34
|
end
|
data/lib/bootstrap_it/config.rb
CHANGED
data/lib/bootstrap_it/engine.rb
CHANGED
@@ -9,8 +9,8 @@ module BootstrapIt
|
|
9
9
|
|
10
10
|
initializer 'bootstrap_it.configure_view_controller' do |app|
|
11
11
|
ActiveSupport.on_load(:action_view) do
|
12
|
-
include WrapIt.helpers
|
13
12
|
include BootstrapIt::LayoutHelpers
|
13
|
+
include BootstrapIt::ViewHelpers
|
14
14
|
end
|
15
15
|
|
16
16
|
# ActiveSupport.on_load :action_controller do
|
data/lib/bootstrap_it/version.rb
CHANGED
@@ -36,6 +36,10 @@ module BootstrapIt
|
|
36
36
|
bootstrap_it_stylesheets << bootstrap_it_javascripts
|
37
37
|
end
|
38
38
|
end
|
39
|
+
|
40
|
+
module ViewHelpers; end
|
41
|
+
|
42
|
+
WrapIt.register_module ViewHelpers
|
39
43
|
end
|
40
44
|
|
41
45
|
require 'bootstrap_it/view_helpers/mixin'
|
@@ -47,7 +51,6 @@ require 'bootstrap_it/view_helpers/list'
|
|
47
51
|
require 'bootstrap_it/view_helpers/dropdown_menu'
|
48
52
|
require 'bootstrap_it/view_helpers/button'
|
49
53
|
require 'bootstrap_it/view_helpers/button_group'
|
50
|
-
require 'bootstrap_it/view_helpers/button_toolbar'
|
51
54
|
require 'bootstrap_it/view_helpers/form'
|
52
55
|
require 'bootstrap_it/view_helpers/nav'
|
53
56
|
require 'bootstrap_it/view_helpers/breadcrumb'
|
@@ -2,9 +2,10 @@ module BootstrapIt
|
|
2
2
|
#
|
3
3
|
module ViewHelpers
|
4
4
|
#
|
5
|
+
# @see http://getbootstrap.com/components/#breadcrumbs Bootstrap docs
|
5
6
|
# Breadcrumb
|
6
7
|
#
|
7
|
-
# @author
|
8
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
8
9
|
#
|
9
10
|
class Breadcrumb < WrapIt::Container
|
10
11
|
default_tag 'ol'
|
@@ -14,6 +15,6 @@ module BootstrapIt
|
|
14
15
|
child :item, 'BootstrapIt::ViewHelpers::ListItem'
|
15
16
|
end
|
16
17
|
|
17
|
-
|
18
|
+
register :breadcrumb, 'BootstrapIt::ViewHelpers::Breadcrumb'
|
18
19
|
end
|
19
20
|
end
|
@@ -4,13 +4,15 @@ module BootstrapIt
|
|
4
4
|
#
|
5
5
|
# Button
|
6
6
|
#
|
7
|
-
# @author
|
7
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
8
8
|
#
|
9
|
+
# @see http://getbootstrap.com/css/#buttons Bootstrap docs
|
10
|
+
# @see http://getbootstrap.com/javascript/#buttons Bootstrap docs
|
9
11
|
class Button < WrapIt::Container
|
12
|
+
include WrapIt::TextContainer
|
10
13
|
include Activable
|
11
14
|
include Disableable
|
12
15
|
include Sizable
|
13
|
-
include WrapIt::TextContainer
|
14
16
|
|
15
17
|
html_class 'btn'
|
16
18
|
html_class_prefix 'btn-'
|
@@ -24,11 +26,14 @@ module BootstrapIt
|
|
24
26
|
default: :default, html_class: true
|
25
27
|
|
26
28
|
child :icon, 'BootstrapIt::ViewHelpers::Icon'
|
29
|
+
extract_from_options icon: :icon
|
30
|
+
section :space_separator, :input
|
31
|
+
place :children, after: :begin
|
32
|
+
place :space_separator, after: :children
|
33
|
+
place :input, before: :content
|
27
34
|
|
28
|
-
|
29
|
-
|
30
|
-
@content = capture { @icon.render } + html_safe(' ') + @content
|
31
|
-
end
|
35
|
+
after_capture do
|
36
|
+
children.size > 0 && self[:space_separator] = html_safe(' ')
|
32
37
|
|
33
38
|
if @helper_name == :radio || @helper_name == :checkbox
|
34
39
|
@tag = 'label'
|
@@ -37,35 +42,29 @@ module BootstrapIt
|
|
37
42
|
next if k == :class || k == :type
|
38
43
|
input_options[k] = @options.delete(k)
|
39
44
|
end
|
40
|
-
input_options.key?(:checked) && input_options[:checked] != false
|
45
|
+
if input_options.key?(:checked) && input_options[:checked] != false
|
41
46
|
input_options[:checked] = 'checked'
|
42
|
-
|
43
|
-
|
47
|
+
end
|
48
|
+
self[:input] = content_tag('input', '', input_options)
|
49
|
+
unless input_options[:id].blank?
|
44
50
|
@options[:label_for] = input_options[:id]
|
51
|
+
end
|
45
52
|
end
|
46
|
-
true
|
47
|
-
end
|
48
|
-
|
49
|
-
after_capture do
|
50
|
-
@icon.nil? && !@content.empty? && @content += html_safe(' ')
|
51
53
|
end
|
52
54
|
|
53
55
|
after_initialize do
|
54
|
-
@tag
|
56
|
+
@tag == 'a' || @tag == 'input' || @tag = 'button'
|
55
57
|
if @tag == 'a'
|
56
58
|
@options[:role] = 'button'
|
57
59
|
else
|
58
|
-
@options[:type] = 'button'
|
60
|
+
@options.include?(:type) || @options[:type] = 'button'
|
59
61
|
@options[:type] = @options[:type].to_s.downcase
|
60
62
|
end
|
61
63
|
|
62
|
-
@options.key?(:icon) &&
|
63
|
-
@icon = Icon.new(@template, @options.delete(:icon))
|
64
|
-
|
65
64
|
@options.keys.each do |key|
|
66
|
-
|
65
|
+
/_text$/ =~ key || next
|
67
66
|
value = @options.delete(key)
|
68
|
-
|
67
|
+
value.is_a?(String) || next
|
69
68
|
set_html_data(key.to_s.gsub(/_/, '-'), value)
|
70
69
|
end
|
71
70
|
end
|
@@ -74,43 +73,52 @@ module BootstrapIt
|
|
74
73
|
#
|
75
74
|
# DropdownButton
|
76
75
|
#
|
77
|
-
# @author
|
76
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
78
77
|
#
|
78
|
+
# @see http://getbootstrap.com/components/#btn-dropdowns Bootstrap docs
|
79
79
|
class DropdownButton < Button
|
80
80
|
include DropdownMenuWrapper
|
81
81
|
|
82
82
|
switch :splitted
|
83
83
|
switch :dropup
|
84
|
+
section :caret, :splitted
|
85
|
+
place :caret, after: :content
|
86
|
+
place :splitted, after: :caret
|
87
|
+
place :space_separator, before: :caret
|
88
|
+
place :children, before: :end
|
84
89
|
|
85
90
|
after_capture do
|
86
|
-
|
87
|
-
|
88
|
-
@content += content_tag('span', '', class: 'caret')
|
89
|
-
add_html_class('dropdown-toggle')
|
90
|
-
set_html_data(:toggle, 'dropdown')
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
after_render do
|
96
|
-
unless @dropdown_items.empty?
|
91
|
+
if !@dropdown_menu.nil?
|
92
|
+
caret = content_tag('span', empty_html, class: 'caret')
|
97
93
|
if splitted?
|
98
94
|
toggle = WrapIt::Base.new(@template, @options.merge(tag: 'button'))
|
99
95
|
toggle.add_html_class('dropdown-toggle')
|
100
96
|
toggle.set_html_data(:toggle, 'dropdown')
|
101
|
-
|
102
|
-
|
103
|
-
|
97
|
+
self[:splitted] = capture { toggle.render(caret) }
|
98
|
+
self[:space_separator] = empty_html
|
99
|
+
else
|
100
|
+
self[:caret] = caret
|
101
|
+
self[:space_separator] = html_safe(' ')
|
102
|
+
add_html_class('dropdown-toggle')
|
103
|
+
set_html_data(:toggle, 'dropdown')
|
104
104
|
end
|
105
|
+
#puts "--- #{self.class.placement}"
|
106
|
+
#puts "--> #{instance_variable_get(:@sections)}"
|
107
|
+
self[:content] = render_sections(except: [:children, :splitted])
|
108
|
+
@after_render = render_sections(:children, :splitted)
|
109
|
+
#puts "RENDERED: #{self[:content]} #{@}"
|
105
110
|
wrapper_class = ['btn-group']
|
106
111
|
wrapper_class << 'dropup' if dropup?
|
107
112
|
wrap(class: wrapper_class)
|
108
113
|
end
|
109
114
|
end
|
115
|
+
|
116
|
+
after_render do
|
117
|
+
@after_render.nil? || @rendered << @after_render
|
118
|
+
end
|
110
119
|
end
|
111
120
|
|
112
|
-
|
113
|
-
|
114
|
-
WrapIt.register :dropdown_button, 'BootstrapIt::ViewHelpers::DropdownButton'
|
121
|
+
register :button, :radio, :checkbox, 'BootstrapIt::ViewHelpers::Button'
|
122
|
+
register :dropdown_button, 'BootstrapIt::ViewHelpers::DropdownButton'
|
115
123
|
end
|
116
124
|
end
|
@@ -4,8 +4,9 @@ module BootstrapIt
|
|
4
4
|
#
|
5
5
|
# ButtonGroup
|
6
6
|
#
|
7
|
-
# @author
|
7
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
8
8
|
#
|
9
|
+
# @see http://getbootstrap.com/components/#btn-groups Bootstrap docs
|
9
10
|
class ButtonGroup < WrapIt::Container
|
10
11
|
include Sizable
|
11
12
|
include Justifable
|
@@ -18,15 +19,33 @@ module BootstrapIt
|
|
18
19
|
child :button, 'BootstrapIt::ViewHelpers::Button'
|
19
20
|
child :dropdown, 'BootstrapIt::ViewHelpers::DropdownButton'
|
20
21
|
|
21
|
-
child :radio, 'BootstrapIt::ViewHelpers::Button' do |
|
22
|
+
child :radio, 'BootstrapIt::ViewHelpers::Button' do |_|
|
22
23
|
set_html_data(:toggle, 'buttons')
|
23
24
|
end
|
24
25
|
|
25
|
-
child :checkbox, 'BootstrapIt::ViewHelpers::Button' do |
|
26
|
+
child :checkbox, 'BootstrapIt::ViewHelpers::Button' do |_|
|
26
27
|
set_html_data(:toggle, 'buttons')
|
27
28
|
end
|
28
29
|
end
|
29
30
|
|
30
|
-
|
31
|
+
#
|
32
|
+
# Button Toolbar
|
33
|
+
#
|
34
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
35
|
+
#
|
36
|
+
# @see http://getbootstrap.com/components/#btn-groups-toolbar Bootstrap
|
37
|
+
# docs
|
38
|
+
class ButtonToolbar < WrapIt::Container
|
39
|
+
html_class 'btn-toolbar'
|
40
|
+
|
41
|
+
child :button_group, 'BootstrapIt::ViewHelpers::ButtonGroup'
|
42
|
+
alias_method :group, :button_group
|
43
|
+
|
44
|
+
after_initialize { @options[:role] = 'toolbar' }
|
45
|
+
end
|
46
|
+
|
47
|
+
register :button_group, 'BootstrapIt::ViewHelpers::ButtonGroup'
|
48
|
+
register :button_toolbar, 'BootstrapIt::ViewHelpers::ButtonToolbar'
|
49
|
+
register :toolbar, 'BootstrapIt::ViewHelpers::ButtonToolbar'
|
31
50
|
end
|
32
51
|
end
|
@@ -4,18 +4,19 @@ module BootstrapIt
|
|
4
4
|
#
|
5
5
|
# Dropdown Menu
|
6
6
|
#
|
7
|
-
# @author
|
7
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
8
8
|
#
|
9
|
+
# @see http://getbootstrap.com/components/#dropdowns Bootstrap docs
|
9
10
|
class DropdownMenu < WrapIt::Container
|
10
11
|
default_tag 'ul'
|
11
12
|
html_class 'dropdown-menu'
|
12
13
|
|
13
14
|
child :divider, ListItem,
|
14
|
-
|
15
|
+
tag: 'li', class: 'divider', role: 'presentation'
|
15
16
|
child :header, ListItem,
|
16
|
-
|
17
|
+
tag: 'li', class: 'dropdown-header', role: 'presentation'
|
17
18
|
child :link_item, ListLinkItem,
|
18
|
-
|
19
|
+
li_role: 'presentation', role: 'menuitem', tabindex: '-1'
|
19
20
|
|
20
21
|
after_initialize do
|
21
22
|
@options['role'] = 'menu'
|
@@ -25,6 +26,6 @@ module BootstrapIt
|
|
25
26
|
end
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
register :dropdown_menu, 'BootstrapIt::ViewHelpers::DropdownMenu'
|
29
30
|
end
|
30
31
|
end
|
@@ -4,8 +4,9 @@ module BootstrapIt
|
|
4
4
|
#
|
5
5
|
# Input
|
6
6
|
#
|
7
|
-
# @author
|
7
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
8
8
|
#
|
9
|
+
# @see http://getbootstrap.com/css/#forms Bootstrap docs
|
9
10
|
class Input < WrapIt::Base
|
10
11
|
include WrapIt::TextContainer
|
11
12
|
TYPES = %w(text password datetime datetime-local date month time
|
@@ -20,16 +21,15 @@ module BootstrapIt
|
|
20
21
|
@saved_args = @arguments.clone
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
-
@options.key?(:value) || @options[:value] =
|
25
|
-
@content = empty_html
|
24
|
+
after_capture do
|
25
|
+
@options.key?(:value) || @options[:value] = render_sections
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
29
|
#
|
30
30
|
# FormLabel
|
31
31
|
#
|
32
|
-
# @author
|
32
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
33
33
|
#
|
34
34
|
class FormLabel < WrapIt::Base
|
35
35
|
include WrapIt::TextContainer
|
@@ -42,60 +42,56 @@ module BootstrapIt
|
|
42
42
|
#
|
43
43
|
# FormGroup
|
44
44
|
#
|
45
|
-
# @author
|
45
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
46
46
|
#
|
47
47
|
class FormGroup < WrapIt::Container
|
48
48
|
html_class 'form-group'
|
49
49
|
|
50
|
+
section :label, :input
|
51
|
+
|
52
|
+
child :label, 'BootstrapIt::ViewHelpers::FormLabel', section: :label
|
50
53
|
child :input, 'BootstrapIt::ViewHelpers::Input' do |input|
|
51
54
|
input_args = input.instance_variable_get(:@saved_args)
|
52
|
-
|
55
|
+
control_size = input_args.extract!(
|
53
56
|
Symbol, and: [SizableColumn::COLUMN_SIZE_REGEXP]
|
54
57
|
)
|
55
|
-
|
58
|
+
control_place = input_args.extract!(
|
56
59
|
Symbol, and: [PlacableColumn::COLUMN_PLACE_REGEXP]
|
57
60
|
)
|
58
|
-
|
59
|
-
|
60
|
-
label_args = input.options.delete(:label)
|
61
|
-
unless label_args.nil?
|
62
|
-
label_args.is_a?(Array) || label_args = [label_args]
|
63
|
-
@label = FormLabel.new(@template, *label_args)
|
64
|
-
if @form.kind == :horizontal && !@label.column_size_defined?
|
65
|
-
@label.column_size = @form.label_size
|
66
|
-
end
|
67
|
-
unless input.options[:id].nil?
|
68
|
-
@label.options[:label_for] = input.options[:id]
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
61
|
+
control_size.empty? && control_size = parent.control_size
|
72
62
|
|
73
|
-
|
74
|
-
|
75
|
-
# @form.is_a? Form || fail(
|
76
|
-
# ArgumentError,
|
77
|
-
# 'Required option `form` for `form_group` is not specified'
|
78
|
-
# )
|
79
|
-
end
|
80
|
-
|
81
|
-
after_capture do
|
82
|
-
if @form.kind == :horizontal
|
83
|
-
input_wrapper = Base.new(@template)
|
63
|
+
if parent.kind == :horizontal
|
64
|
+
input_wrapper = WrapIt::Base.new(@template)
|
84
65
|
input_wrapper.extend SizableColumn
|
85
66
|
input_wrapper.extend PlacableColumn
|
86
|
-
input_wrapper.column_size =
|
87
|
-
input_wrapper.column_place =
|
88
|
-
|
67
|
+
input_wrapper.column_size = control_size
|
68
|
+
input_wrapper.column_place = control_place
|
69
|
+
input.wrap(input_wrapper)
|
70
|
+
end
|
71
|
+
|
72
|
+
args = input.options.delete(:label)
|
73
|
+
unless args.nil?
|
74
|
+
args.is_a?(Array) || args = [args]
|
75
|
+
options = args.extract_options!
|
76
|
+
unless input.options[:id].nil?
|
77
|
+
options[:label_for] = input.options[:id]
|
78
|
+
end
|
79
|
+
args << options
|
80
|
+
label(*args)
|
81
|
+
l = children.last
|
82
|
+
if parent.kind == :horizontal && !l.column_size_defined?
|
83
|
+
l.column_size = @form.label_size
|
84
|
+
end
|
89
85
|
end
|
90
|
-
@label.nil? || @content = capture { @label.render } + @content
|
91
86
|
end
|
92
87
|
end
|
93
88
|
|
94
89
|
#
|
95
90
|
# Form
|
96
91
|
#
|
97
|
-
# @author
|
92
|
+
# @author Alexey Ovchinnikov <alexiss@cybernetlab.ru>
|
98
93
|
#
|
94
|
+
# @see http://getbootstrap.com/css/#forms Bootstrap docs
|
99
95
|
class Form < WrapIt::Container
|
100
96
|
DEFAULT_LABEL_SIZE = %i(xs2 sm2 md2 lg2)
|
101
97
|
DEFAULT_CONTROL_SIZE = %i(xs10 sm10 md10 lg10)
|
@@ -107,9 +103,11 @@ module BootstrapIt
|
|
107
103
|
attr_reader :label_size
|
108
104
|
attr_reader :control_size
|
109
105
|
|
106
|
+
child :group, 'BootstrapIt::ViewHelpers::FormGroup',
|
107
|
+
deffered_render: true
|
108
|
+
|
110
109
|
def input(*args, &block)
|
111
|
-
group
|
112
|
-
group.input(*args, &block)
|
110
|
+
group { |g| g.input(*args, &block) }
|
113
111
|
end
|
114
112
|
|
115
113
|
after_initialize do
|
@@ -119,9 +117,10 @@ module BootstrapIt
|
|
119
117
|
@label_size = options.delete(:label_size) || DEFAULT_LABEL_SIZE
|
120
118
|
@control_size = options.delete(:control_size) || DEFAULT_CONTROL_SIZE
|
121
119
|
end
|
120
|
+
self.deffered_render = true
|
122
121
|
end
|
123
122
|
end
|
124
123
|
|
125
|
-
|
124
|
+
register :form, 'BootstrapIt::ViewHelpers::Form'
|
126
125
|
end
|
127
126
|
end
|