-
Notifications
You must be signed in to change notification settings - Fork 350
/
bootstrap.rb
110 lines (90 loc) · 3.41 KB
/
bootstrap.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
module BootstrapForm
module Helpers
module Bootstrap
def button(value = nil, options = {}, &block)
options.reverse_merge! class: 'btn btn-secondary'
super
end
def submit(name = nil, options = {})
options.reverse_merge! class: 'btn btn-secondary'
super
end
def primary(name = nil, options = {}, &block)
options.reverse_merge! class: 'btn btn-primary'
if options[:render_as_button] || block_given?
options.except! :render_as_button
button(name, options, &block)
else
submit(name, options)
end
end
def alert_message(title, options = {})
css = options[:class] || 'alert alert-danger'
if object.respond_to?(:errors) && object.errors.full_messages.any?
content_tag :div, class: css do
concat content_tag :p, title
concat error_summary unless options[:error_summary] == false
end
end
end
def error_summary
content_tag :ul, class: 'rails-bootstrap-forms-error-summary' do
object.errors.full_messages.each do |error|
concat content_tag(:li, error)
end
end
end
def errors_on(name, options = {})
if has_error?(name)
hide_attribute_name = options[:hide_attribute_name] || false
content_tag :div, class: "alert alert-danger" do
if hide_attribute_name
object.errors[name].join(", ")
else
object.errors.full_messages_for(name).join(", ")
end
end
end
end
def static_control(*args)
options = args.extract_options!
name = args.first
static_options = options.merge({
readonly: true,
control_class: [options[:control_class], static_class].compact.join(" ")
})
static_options[:value] = object.send(name) if static_options[:value].nil?
text_field_with_bootstrap(name, static_options)
end
def custom_control(*args, &block)
options = args.extract_options!
name = args.first
form_group_builder(name, options, &block)
end
def prepend_and_append_input(name, options, &block)
options = options.extract!(:prepend, :append, :input_group_class)
input_group_class = ["input-group", options[:input_group_class]].compact.join(' ')
input = capture(&block) || "".html_safe
input = content_tag(:div, input_group_content(options[:prepend]), class: 'input-group-prepend') + input if options[:prepend]
input << content_tag(:div, input_group_content(options[:append]), class: 'input-group-append') if options[:append]
input << generate_error(name)
input = content_tag(:div, input, class: input_group_class) unless options.empty?
input
end
# Some helpers don't currently accept prepend and append. However, it's not
# clear if that's corrent. In the meantime, strip to options before calling
# methods that don't accept prepend and append.
def prevent_prepend_and_append!(options)
options.delete(:append)
options.delete(:prepend)
end
def input_group_content(content)
return content if content.match(/btn/)
content_tag(:span, content, class: 'input-group-text')
end
def static_class
"form-control-plaintext"
end
end
end
end