twitter-bootstrap-form-builder 0.0.3 → 0.0.4
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/README.md
CHANGED
@@ -99,17 +99,24 @@ the regular `FormBuilder#text_field`, use `:label => false`:
|
|
99
99
|
<%= f.text_field :email, :label => false %> # <input type="text" id="post_email" />
|
100
100
|
```
|
101
101
|
|
102
|
+
To render the field within the Bootstrap control-group markup but without a label tag,
|
103
|
+
use `:label => nil`:
|
104
|
+
|
105
|
+
```erb
|
106
|
+
<%= f.text_field :email, :label => nil %>
|
107
|
+
```
|
108
|
+
|
102
109
|
Checkboxes are a special case. They can contain two labels in a horizontal form, on to the left and
|
103
110
|
one to the right.
|
104
111
|
|
105
112
|
The left label uses the `:label` option and works as expected.
|
106
113
|
|
107
|
-
The right label is controled by the `:
|
114
|
+
The right label is controled by the `:text` option.
|
108
115
|
|
109
116
|
Example:
|
110
117
|
|
111
118
|
```erb
|
112
|
-
<%= f.check_box :hide_email, :
|
119
|
+
<%= f.check_box :hide_email, :text=> "Do not display my email in my post" %>
|
113
120
|
```
|
114
121
|
|
115
122
|
Produces the following HTML:
|
@@ -25,24 +25,22 @@ module MNE
|
|
25
25
|
define_method method_name.to_sym do |field, *args|
|
26
26
|
|
27
27
|
# find the options hash, and extract the options for the label tag
|
28
|
-
opts
|
29
|
-
label_opts = extract_sub_options(opts, :label)
|
28
|
+
opts = extract_options(args)
|
30
29
|
|
31
|
-
|
32
|
-
return super(field, *args) if label_opts === false
|
30
|
+
label_tag = build_label_tag(field, opts)
|
33
31
|
|
34
|
-
#
|
35
|
-
|
32
|
+
# If label is false, we're rendering the field without modification
|
33
|
+
return super(field, *args) if label_tag === false
|
36
34
|
|
37
35
|
# create a help-block if present
|
38
36
|
help_block = opts[:help_block] ? @template.content_tag(:p, opts[:help_block], :class => "help-block") : ""
|
39
37
|
|
40
38
|
# propogate properties of control group up
|
41
39
|
control_group_opts = opts[:control_group] || {}
|
42
|
-
control_group_opts[:class] = control_group_opts[:class]
|
40
|
+
control_group_opts[:class] = "#{control_group_opts[:class]} #{method_name}"
|
43
41
|
|
44
42
|
control_group(field, control_group_opts) do
|
45
|
-
|
43
|
+
label_tag + @template.content_tag(:div, :class => "controls") do
|
46
44
|
super(field, *args) + help_block + errors_for(field)
|
47
45
|
end
|
48
46
|
end.html_safe
|
@@ -52,48 +50,85 @@ module MNE
|
|
52
50
|
|
53
51
|
# Special handling for check boxes, which can have two labels
|
54
52
|
def check_box(field, options = {}, checked_value = "1", unchecked_value = "0")
|
55
|
-
|
56
|
-
about_opts = extract_sub_options(options, :about)
|
57
|
-
|
58
|
-
return super if label_opts == false
|
53
|
+
label_tag = build_label_tag(field, options)
|
59
54
|
|
60
|
-
|
61
|
-
# Add the TB class to the thelabel
|
62
|
-
label_opts << { :class => "control-label" } unless label_opts.nil?
|
63
|
-
about_opts << { :class => "checkbox" } if about_opts.any?
|
55
|
+
return super if label_tag === false
|
64
56
|
|
65
57
|
control_group_opts = options[:control_group] || {}
|
66
58
|
|
67
|
-
|
68
|
-
check_box = super(field, options, checked_value, unchecked_value).html_safe
|
59
|
+
options[:text] ||= false
|
69
60
|
|
70
61
|
control_group(field, control_group_opts) do
|
71
62
|
label_tag + @template.content_tag(:div, :class => "controls") do
|
72
|
-
|
73
|
-
|
74
|
-
|
63
|
+
|
64
|
+
check_box_tag = super(field, options, checked_value, unchecked_value).html_safe
|
65
|
+
|
66
|
+
about_tag = build_label_tag(field, options, :text, {:class => "checkbox"}) do |opts|
|
67
|
+
check_box_tag + opts[0].html_safe
|
68
|
+
end
|
69
|
+
|
70
|
+
about_tag ||= @template.content_tag(:label, check_box_tag, :class => "checkbox")
|
71
|
+
|
72
|
+
about_tag.html_safe + errors_for(field)
|
73
|
+
end.html_safe
|
75
74
|
end.html_safe
|
76
75
|
end
|
77
76
|
|
78
77
|
protected
|
79
78
|
|
80
79
|
def extract_options(args)
|
81
|
-
args.find { |a| a.is_a?(Hash)
|
80
|
+
args.find { |a| a.is_a?(Hash) } || {}
|
82
81
|
end
|
83
82
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
83
|
+
# Build a label tag (or return false, or "") based on the rules for passing
|
84
|
+
# nil/false/a string/an array/a hash into the options hash
|
85
|
+
def build_label_tag(field, opts, key = :label, defaults = { :class => "control-label" }, &block)
|
86
|
+
label_opts = extract_sub_options(opts, key, defaults)
|
87
|
+
|
88
|
+
# False indicates complete fall-back to FormBuilder's implementation
|
89
|
+
return false if label_opts === false
|
90
|
+
|
91
|
+
if label_opts
|
92
|
+
if block_given?
|
93
|
+
label(field, *label_opts) { yield(label_opts) }
|
94
|
+
else
|
95
|
+
label(field, *label_opts)
|
96
|
+
end
|
97
|
+
else
|
98
|
+
""
|
99
|
+
end.html_safe
|
90
100
|
end
|
91
101
|
|
92
|
-
|
93
|
-
|
94
|
-
|
102
|
+
# Pull nested (label) options out of an options hash
|
103
|
+
# Used primarily by checkbox's :label/:text tags
|
104
|
+
def extract_sub_options(opts, key = :label, defaults = {})
|
105
|
+
if opts.keys.include?(key)
|
106
|
+
sub_opts = opts.delete(key)
|
107
|
+
|
108
|
+
return [sub_opts.merge(defaults)] if sub_opts.is_a? Hash
|
109
|
+
return [sub_opts, defaults] if sub_opts.is_a? String
|
110
|
+
|
111
|
+
# If we were explicitly given an array, we're done.
|
112
|
+
# Freeze it, and pass it directly to label_tag
|
113
|
+
if sub_opts.is_a? Array
|
114
|
+
sub_opts.freeze
|
115
|
+
return sub_opts
|
116
|
+
end
|
117
|
+
|
118
|
+
# If the user explicitly passed in nil, return it
|
119
|
+
return nil if sub_opts.nil?
|
120
|
+
end
|
121
|
+
|
122
|
+
return false if sub_opts === false
|
123
|
+
|
124
|
+
sub_opts || [defaults]
|
95
125
|
end
|
96
126
|
|
127
|
+
#def label_opts(opts, key = :label)
|
128
|
+
# label_opts = Array(extract_sub_options(opts, key))
|
129
|
+
# label_opts << { :class => "control-label" }
|
130
|
+
#end
|
131
|
+
|
97
132
|
def errors_for(field)
|
98
133
|
@template.content_tag(:span, "#{object.class.human_attribute_name(field)} #{object.errors.messages[field].to_sentence}",
|
99
134
|
:class => "help-inline") if object.errors.messages.has_key?(field) && object.errors.messages[field].any?
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Matthew Eagar
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-08-
|
17
|
+
date: 2012-08-04 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|